Обмен данными по UART

BooMToP
Offline
Зарегистрирован: 04.06.2015

Добрый день, коллеги!

У меня возникла проблема с объединением 2х ардуинов по UART. Пока не приехали модули на MAX485 создаю алгоритм работы на UART, ну а потом уже и на RS-485 все перекину... 

Вообщем суть какая: 2 ардуинки первая - mini, вторая - mega 2560. К мини подключен переменный резистор (pin A0) и два светодиода (pin 8, pin 9) - эти светодиоды эмуляторы ключа реле, на mege стоит LCD и две кнопки (pin 46, pin 47). Задача состоит в том чтобы значение A0 mini перередовалось постоянно mege и выводилось на дисплей и в этот же момент чтобы действовали кнопки при нажатии которых на mege загарались бы светодиоды на mini.

Создавши код у меня никак не получается создать протокол для обмена данными. По отдельности кнопки и значение A0 mini работают, но как только загоняю все в один скетч кнопки начинают криво работать.

Вот собственно и скетчи

MINI

void setup() {

Serial.begin(19200);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}

void loop() {
 
digitalWrite(9, 0);
digitalWrite(8, 0);

byte x=analogRead(A0)/4;
            Serial.print("S");
            Serial.write(x);
            Serial.println();
             delay(332);  

}
void serialEvent() {
  if (Serial.available()) {
    digitalWrite(9, 0);
    digitalWrite(8, 0);
   
    char inChar = (char)Serial.read();
    if (inChar=='B') {
    delay(10);
    inChar = (char)Serial.read();
    if (inChar=='1') {
                      //Serial.print("B1=1");
                      digitalWrite(9, HIGH);
                      delay(413);
                      }
    delay(10);
    inChar = (char)Serial.read();
    if (inChar=='1') {
                    // Serial.print("B2=1");
                      digitalWrite(8,1);
                      delay(413);
                      }
                                             }
             }
      }

MEGA 2560

#include <LiquidCrystal.h>

LiquidCrystal lcd(4, 5, 10, 11, 12, 9);

#define LEFT  46
#define RIGHT  47
byte firstSensor = 0;  
byte secondSensor = 0;
void setup() {
 
lcd.begin(16, 2);
pinMode(LEFT, INPUT);
pinMode(RIGHT, INPUT);
Serial.begin(19200);
}

void loop() {
 
  
  firstSensor = digitalRead(LEFT);
  secondSensor = digitalRead(RIGHT) ;
  delay(10);
  if (firstSensor != secondSensor){
    Serial.print("B");
    Serial.print(!firstSensor);
    Serial.print(!secondSensor);
       delay(413);
  } 
                         
   }

 void serialEvent() {
  if (Serial.available()) {
   
    // get the new byte:
   byte inChar = (char) Serial.read();
   if (inChar == 'S') {
    //delay(200);
                    byte inChar = (char) Serial.read();
                    digitalWrite(22,inChar);
                    if (inChar <10) {
                    lcd.setCursor(12, 0);
                    lcd.print(inChar);
                    lcd.print('  ');}
                    else 
                    if (inChar <100){
                    lcd.setCursor(12, 0);
                    lcd.print(inChar);
                    lcd.print(' ');}
                    else{
                    lcd.setCursor(12, 0);
                    lcd.print(inChar); 
                    Serial.print('inChar');}
    delay(332);
   }
     
    }
  } 

Подскажите, что не так? 

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

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011
BooMToP
Offline
Зарегистрирован: 04.06.2015

Спасибо большое, ознакомлюсь!

BooMToP
Offline
Зарегистрирован: 04.06.2015

А можно как-нибудь без дополнительных библиотек реализовать обмен данными?