Как мне получить значения пина 4, чтобы они также были отправлены на ведомое устройство и отображались с использованием I2 C? - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь передать значения напряжения от моего мастера к подчиненному устройству, но передается только напряжение с контакта 3, а не мои значения с контакта 4. Я новичок в кодировании, поэтому, пожалуйста, сделайте ваше решение очень "без жаргона". " Если вы могли бы предоставить мне пример, то он будет очень признателен.

МАСТЕР-КОД:

void pin3(){
  Wire.beginTransmission(0x08);
  int val2 =  analogRead(twosensorpin);
  float volts2 = (val2 / 1023.0) * refvoltage;
  voltage = String(volts2);
  char volt2[5];
  voltage.toCharArray(volt2, 5);
  Serial.print("The voltage are pin 2 is ");
  Serial.println(voltage);
  Wire.write(volt2);
  Wire.endTransmission();
}


void pin4(){
    Wire.beginTransmission(0x08);
    int val3=  analogRead(threesensorpin);
    float volts3 = (val3 / 1023.0) * refvoltage;
    voltage2 = String(volts3);
    char volt3[5];
    voltage.toCharArray(volt3, 5);
    Serial.print("The voltage are pin 3 is ");
    Serial.println(voltage2);
    Wire.write(volt3);
    Wire.endTransmission();

} 

РАБОВЫЙ КОД:

#include <Wire.h>
#define SLAVE_ADDRESS 0X08
String q;
String r = "3.20";




// name the motor control pins
#define PWMa 7
#define PWMb 5
#define PWMc 8
#define PWMd 6



void setup() {

  // configure the motor control pins as outputs
  pinMode(PWMa, OUTPUT);
  pinMode(PWMb, OUTPUT);
  pinMode(PWMc, OUTPUT);
  pinMode(PWMd, OUTPUT);

Wire.begin(SLAVE_ADDRESS);
Wire.onReceive(receiveEvent);
//Wire.onRequest(requestEvent);
Serial.begin(9600);

}

void loop() {}

      void receiveEvent(){
      q = "";
      while(Wire.available()){
        char c = Wire.read();

        q += c;

      }



      do{ 
        if(q < r){
      Serial.print("The value coming from pin 2 is ");
      Serial.println(q);

        digitalWrite(PWMa, LOW);
        digitalWrite(PWMb, HIGH);
        digitalWrite(PWMc, LOW);
        digitalWrite(PWMd, HIGH);
      //delay(500);
       }
      }while(Wire.available());

      do{
        if (q > r){
         digitalWrite(PWMa, HIGH);
        digitalWrite(PWMb, LOW);
        digitalWrite(PWMc, HIGH);
        digitalWrite(PWMd, LOW);
        }
      }while(Wire.available());

Заранее спасибо

1 Ответ

1 голос
/ 20 января 2020

Как сказал Эдд, вы должны показать нам некоторый вывод.

Но, если вы пытаетесь сравнить входящие данные с 3.20 в виде числового значения , следующий код выполнит работу .

Мастер

float send_i2c(int val){

  float volts = (val / 1023.0) * refvoltage;
  char v[5];
  String(volts).toCharArray(v, 5);
  Wire.beginTransmission(0x08);
  Wire.write(v);
  Wire.endTransmission();

  return volts;
}

void pin3(){
  Serial.println("Pin3 val : " + String(send_i2c(analogRead(twosensorpin))));
}


void pin4(){
  Serial.println("Pin4 val : " + String(send_i2c(analogRead(threesensorpin))));
} 

Ведомый

#include <Wire.h>

#define SLAVE_ADDRESS 0X08
#define R 3.20

String q;

// name the motor control pins
#define PWMa 7
#define PWMb 5
#define PWMc 8
#define PWMd 6


void setup() {

  // configure the motor control pins as outputs
  pinMode(PWMa, OUTPUT);
  pinMode(PWMb, OUTPUT);
  pinMode(PWMc, OUTPUT);
  pinMode(PWMd, OUTPUT);

  Wire.begin(SLAVE_ADDRESS);
  Wire.onReceive(receiveEvent);
  Serial.begin(9600);

}

void loop() {}

void receiveEvent(int a) {
  int num = 0;

  while (Wire.available())
    q += Wire.read();

  num = q.toInt();

  Serial.print("The value: ");
  Serial.println(q);

  digitalWrite(PWMa, (num < R) ? LOW : HIGH);
  digitalWrite(PWMb, (num < R) ? HIGH : LOW);
  digitalWrite(PWMc, (num < R) ? LOW : HIGH);
  digitalWrite(PWMd, (num < R) ? HIGH : LOW);

  q = "";

}

Но, опять же, вы должны рассмотреть свой способ управления GPIO выходные данные.

Вы сделали довольно много ошибок. Проверьте эту страницу , чтобы получить больше информации о строках. И эта страница для проводной передачи.

...