Обмен данными по UART
- Войдите на сайт для отправки комментариев
Добрый день, коллеги!
У меня возникла проблема с объединением 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);
}
}
}
Подскажите, что не так?
Заранее спасибо!
http://www.billporter.info/2011/05/30/easytransfer-arduino-library/
Спасибо большое, ознакомлюсь!
А можно как-нибудь без дополнительных библиотек реализовать обмен данными?