Помогите сделать обмен данными между Arduino Uno

Помогите сделать обмен данными между Arduino Uno

Сообщение stillyet » 01 фев 2016, 21:13

Подскажите, пожалуйста, написать код под Arduino IDE для двух плат Arduino UNO соединенных друг с другом с помощью провода. Данные из одной платы Arduino UNO (числовые, символьные вперемешку или только числовые) могли в виде массива передаваться на другую плату Arduino UNO. Данные будут получаться от джойстиков, кнопок, потенциометров и т.д. И нужен, соответственно образец кода для второй платы Arduino UNO, которая будет принимать этот массив данных таким образом, чтобы с этими данными можно было уже работать: запускать коллекторные и шаговые двигатели, моргать светодиодами и т.д. Нашел несколько сайтов, где описан код, например:

Код: Выделить всё
// скетч для Arduino, который передает данные
char str[4];
void setup() {
Serial.begin(9600);
}
void loop() {
int value=1234; // будет гораздо веселее, если это будут данные с какого-то сенсора
itoa(value, str, 10); // преобразует данные в массив символов
Serial.write(str, 4);
}


При компиляции этот код ошибку не выдает, но вот варианты кодов:

Код: Выделить всё
// скетч для Arduino, который принимает данные
char str[4];
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
int i=0;
if (Serial1.available()) {
delay(100);
while(Serial1.available() && i<4) {
str[i++] = Serial1.read();
}
str[i++]='\0';
}
if(i>0) {
Serial.println(str,4);
}
}


Выдает множество ошибок при компиляции
Второй вариант:

Код: Выделить всё
void CharToFloat(char* chars, double* value, int count) {
int i=0, l=0;
float multiplier;
float front =0.0, behind =0.0;
value = 0.0;
// перед точкой
while(chars[i]!='.' && i<count) {
i++;
if (chars[i]=='.') {
int q=i;
for(int j=i; j>0; j--) {
multiplier=1;
for(int k=q; k>1; k--) {
multiplier *= 10;
}
front+=(chars[l]-'0')*multiplier;
l++;
q--;
}
l++;
}
}
int n=i;
// после точки
while(chars[n]!='\0' && i<count) {
n++;
if (chars[n]=='\0') {
int q=n, l=n-1;
for(int j=n-1; j>i; j--) {
multiplier=1;
for(int k=q-(i+2); k>=0; k--) {
multiplier = 0.1*multiplier;
}
behind+=(chars[l]-'0')*multiplier;
l--;
q--;
}
}
}
value[0]=front;
value[1]=behind;
}


- выдает 2 ошибки, самостоятельно в них разобраться и исправить я не смог.
Помогите найти ошибку или подскажите, какой-нибудь другой код для передачи данных. Большое спасибо
stillyet
 
Сообщения: 1
Зарегистрирован: 01 фев 2016, 20:53

Re: Помогите сделать обмен данными между Arduino Uno

Сообщение admin » 04 фев 2016, 13:53

Тут вам нужно или придумать или взять готовый протокол обмена информацией, который можно осуществлять как по UART-у, так и по SPI/I2C.
При приёме, этот протокол нужно парсить и затем уже обрабатывать полученную информацию.
В ваших примерах вы просто пытаетесь преобразовать числовое значение в строчку символов и передать её по последовательному соединению.

Как вариант, можно рассмотреть свой вариант NMEA-протокола (используется в GPS-приёмниках) - см. EasyTransfer Arduino Library.

P.S. Не забывайте, оформлять код тегом
Код: Выделить всё
[code][/code]
Аватара пользователя
admin
Администратор
 
Сообщения: 317
Зарегистрирован: 05 май 2011, 14:57
Откуда: Калининград


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron
© 2009-2019 |  О проекте  |  Политика Конфиденциальности  |