Как запретить подчиненному устройству выполнять код до тех пор, пока мастер не отправит новое значение? 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

Обсуждение

Изменил код. Пожалуйста, проверьте сейчас, @Kishore

отправить больше байтов, прочитать больше байтов. собрать байты в буфер, отправить весь буфер и получить буфер, @Juraj

@Juraj Пожалуйста, переведите это на нубский язык. Извини. Могу ли я внести какие-либо изменения в код, чтобы заставить ведомое устройство сделать это?, @Kishore

см. примеры master_writer и подчиненного_reader в меню «Файл» IDE., @Juraj


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);
  }
}
,

Сделать обоих нестабильными?, @Jot

да, конечно, он вызывается из прерывания., @Juraj