Передача данных по UART
- Войдите на сайт для отправки комментариев
Ср, 11/10/2017 - 00:35
Доброго времени суток.Пытаюсь передать данные с одной ардуины на другую
Передатчик:(передаёт вроде-бы нормально,выдаёт в сериал верные данные)
volatile int RPM=0; volatile unsigned long lastflash=0; void setup() { Serial.begin(9600); attachInterrupt(1,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала pinMode(2, OUTPUT); digitalWrite(2, HIGH); } void sens() { RPM=30000000/(micros()-lastflash); //расчет lastflash=micros(); //запомнить время последнего оборота } void loop() { if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды RPM=0; //считаем что RPM 0 } Serial.println(RPM); //вывод в порт }
Приёмник:(Не принимает данные, например, при передаче нуля получаются различные двухзначные данные, почему?)
void RPM(){ //получает данные об оборотах двигателя по uart и выводит
if(Serial.available()>0){
Serial.println(int (Serial.read())); //смотрим показания на экране
}
}
Вы понимаете, что передаёте в текстовом виде, а принимаете во внутреннем - машинном? Если понимаете и при этом считаете, что что-то не так, публикуйте
1) скетчи полнстью, а не кусочно
2) лог из сериал-монитора
Приёмник:(Не принимает данные, например, при передаче нуля получаются различные двухзначные данные, почему?)
"Различные" двухзначные данные приниматься не должны, при отправке нуля вашим кодом всегда должно приниматься хначение 48. Почему - вам Евгений выше обьяснил.
Спасибо,разобрался в передаче бинарного кода,сначала не понял ,как выцепить из потока байтов нужное число,потом наткнулся на parceInt() ,теперь всё работает.Пока разбирался спалил ардуинку,код загруженный на неё ранее работает,а прошиваться не хочет(
Передатчик :
Приёмник:
Glinka0, вот что заинтересовало в вашем коде - в приемнике вы читаете RPM из сериала и потом обратно в сериал же его и отправляете. Зачем?
Отправляю на экран компа для отладки,позже это будет выводится на TFT экран
Отправляю на экран компа для отладки,позже это будет выводится на TFT экран
у вас один и тот же сериал подключен и к передатчику и к монитору компа?
Передатчик висит на выводах RX TX ,приёмник отправляет по проводу в комп.Данные не смешиваются,если ты про это.
Передатчик висит на выводах RX TX ,приёмник отправляет по проводу в комп.Данные не смешиваются,если ты про это.
А плата(ардуина) какая?
NANO
Передатчик висит на выводах RX TX ,приёмник отправляет по проводу в комп.Данные не смешиваются,если ты про это.
Удивительно :)
А ты в курсе, что "выводы RX TX" и "провод в комп" - на Нане это одно и то же ? :) Данные не могут не смешиваться и что ты там принимаешь или отправляешь - черт не разберет...
Для того, чтоб реально протестировать, перевесь передатчик на софтовый сериал на любые другие пины, кроме 0 и1.
Кстати, именно поэтому у тебя ардуина больше не прошивается, что ты повесил приемник на тот же порт, через который идет связь с компом.
Наверное ты прав,но мне всё-равно,т.к. в основной программе данные будут выводится на TFT экран
Кстати, именно поэтому у тебя ардуина больше не прошивается, что ты повесил приемник на тот же порт, через который идет связь с компом.
[/quote]
Так,а что сгорело?Программатор?
[
Так,а что сгорело?Программатор?
скорее всего ничего не сгорело, просто загрузчик в нане слетел.