Как запретить подчиненному устройству выполнять код до тех пор, пока мастер не отправит новое значение? I2C

Я полный нуб, когда дело касается Arduino. Я медленно учусь. Я пробовал этот код, который в основном получает входные данные в Arduino1 (главный) и отображает символ на последовательном мониторе Arduino2 (ведомый). Кодовые слова просто находятся, но мне просто нужно, чтобы ведомое устройство подождало, пока ведущее устройство не отправит следующий символ. Прямо сейчас подчиненное устройство непрерывно печатает символ.

Главный код:

    #include "Wire.h"
    char ch;

    void setup() {

      Serial.begin(9600);
      Wire.begin();

    }

     void loop() {
      while(Serial.available()==0)
      {}
      ch=Serial.read();
      delay(1000);
      Serial.print("The character that you entered is ");
      Serial.println(ch);

      Wire.beginTransmission(9);
      Wire.write(ch);
      Wire.endTransmission();

        }

Подчиненный код:

#include "Wire.h"
char x;

void setup() {

  Serial.begin(9600);
  Wire.begin(9);
  Wire.onReceive(Event);

}
void Event(char bytes){
  x = Wire.read();
}

void loop() {

  Serial.print("The character that you entered in the other Arduino is ");
  Serial.println(x);
}

Я знаю, что это будет просто, но я просто не могу понять, что делать. Пожалуйста, помогите мне

, 👍0


1 ответ


Лучший ответ:

2
#include "Wire.h"
volatile char x;
volatile bool received;

void setup() {
  Serial.begin(9600);
  Wire.begin(9);
  Wire.onReceive(Event);
}

void Event(char bytes){
  x = Wire.read();
  received = true;
}

void loop() {

  if (received) {
    received = false;
    Serial.print("The character that you entered in the other Arduino is ");
    Serial.println(x);
  }
}
,