UART между Arduino Mega

Здравствуйте!
Казалось бы тривиальная задача - пытаюсь организовать связь между arduino mega по UART. Использую PIN 0,1. А позже пробовал использовать PIN 18,19.

Так вот:
С первой arduino mega я посылаю команду:

Serial.print(1);
  delay(2000);
Serial.print(0);
  delay(2000);

и на второй arduino я получаю эти команды (вижу в виртуальном COM порте …01010101…), но у меня не получается сделать, чтоб при поступлении команды “1” включался какой нить PIN.

Что я не правильно делаю?

Вот скетч с принимающей arduino mega:

onst int led = 12;
char serialinput = ' ';
void setup() {
   Serial.begin(9600);                       // Монитор порта
  pinMode(led, OUTPUT);
}

void loop() {
  if (Serial.available()){
  
char serialinput = Serial.read();
if (serialinput == '0') {
      digitalWrite(led, HIGH);
    }

    if (serialinput == '1') {
      digitalWrite(led, LOW);
    }
  }
}

Между 11 и 12 строками вставь это:

Serial.print("SerialInput = '");
Serial.print(serialinput);
Serial.println("'");

Результат сюда.

Пишете на форум вместо того, чтобы отлаживать скетч.

1 лайк

посылаешь 0, а сравниваешь с ‘0’

1 лайк

Так функция print() отправляет символ же?

1 лайк

млять, смотрю на .read и в уме write :smiling_face:
спасиб, пойду “таблетку приму”.

Тут сначала надо разобраться “кто на ком стоял”!
А то использовал одни пины, потом другие пины, что-то видел в каком-то “виртуальном порте”, но ничего не работает!
А надо так. При такой-то схеме подключения такие два скетча дают такой результат. А ожидаю такой.

4 лайка

Почему в каждой беседе находятся такие “умники”, которым проще гадость написать, чем человека в правильном направлении направить?!
Конечно я пробывал и так и сяк, поэтому обратился за помощью.

Замечено, что когда направляешь человека в правильном направлении, он обижается ещё больше.

3 лайка

А так чтобы увидеть что именно “прилетает” - пробовал? Что прилетало?

Дак это мы, холопы, и должны барину растолковать, что там у него прилетает.

1 лайк

Проверьте схему. И, кстати, её принято выкладывать. Ведь мы долго можем думать, что не так, а у вас , например, диоды неправильно подключены

3 лайка

Это к чему такой всплеск эмоций?
Неужели только потому, что вас попросили НАПИСАТЬ ЧЕТКО, что именно вы пробовали?
Совершенно правильно попросили.

Начните с выкладывания схемы соединения двух Ардуин.
А так же выложите полный код для обоих сторон.

Обращаю внимание, что если вы “пробывали и так и сяк” - то выберите какой-то один вариант и выложите схему и код ИМЕННО для этого ОДНОГО варианта.
А то бывают любители выложить код одного теста, схему от другого и потом спрашивать, почему не работает.

Так именно в том и проблема, что Вы “пробывали” вместо того, чтобы осмысленно идти в нужном направлении.

1 лайк

Всем спасибо за уделённое время.
Разобрался сам. Всё удалил и написал так:
На передатчике:

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print(1);
  delay(1000);
  Serial.print(2);
  delay(1000);
}

На приемнике:

const int led = 13;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop() {
  if (Serial.available()){
    int data = Serial.parseInt();

    if(data == 1){
      digitalWrite(led, HIGH);
    }

    if(data == 2){
      digitalWrite(led, LOW);
    }
  }
}

Источник:
Общение между Ардуино и Ардуино [ простая передача данных ] [ проекты Ардуино ] (cediy.ru)

Написал или скоптпастил?

Для 1/2/…9 достаточно write() и read().

А теперь убери delay и удивись

Код из первого поста рабочий. Так что где-то ещё косяк был

1 лайк