Скажите, а как принимать в порт ардуины данные по прерыванию?
Скажите, а как принимать в порт ардуины данные по прерыванию?
if (Serial.available()) int inByte = Serial.read();
Не понял, а прерывание где происходит?
По прерыванию производится запись данных в буфер
Все это в библиотеке
Спасибо, но всё равно не понятно............
Так тебе в какой порт нужно serial? или INT0,INT1
Мне нужно чтоб вот это:
Создавало прерывание, то есть, чтоб таймер как-то слушал RX и если туда что-то прилетело, то вызывается прерывание и принимаются байты!PHP код:
//////////////////////////приём байт от компа//////////////////////////////////
if (Serial.available() > 0) //priem ot kompa
{
int inByte = Serial.read();
if (inByte ==1)
{
pboost = 0;
inByte =0;
}
}
Чтобы не пропустить прилетающие байты!!!
Как-то коряво я объяснил......
Эдуард, ты вот эту библиотеку имел в виду?
<NewSoftSerial.h>
Эдуард посмотри пожалуйста, почему так получается?
Вот скетч принимающего устройства (Atmega 168), она принимает данные от другой кардуины и выводит их на экран:
Когда delay(10); закоментировано, данные выводятся нормально в течении 3 минут, после этого начинает показывать всякую чепуху!PHP код:
//#include <SoftwareSerial.h>
#include <TVout.h>
#include <fontALL.h>
TVout TV;
//SoftwareSerial mySerial(2, 3);
//int ffff = 0;
byte serialInArray[8];
int serialCount = 0;
int inByte = 0;
int watertemp = 0;
int turbo = 0;
int volts = 0;
int pboost = 0;
int result = 0;
void setup()
{
TV.begin(PAL,90,40); // 1 ширина, 2 высота
TV.select_font(font6x8); // 1 ширина, 2 высота
Serial.begin(115200);
// mySerial.begin(57600);
}
void loop()
{
// TV.clear_screen();
TV.set_cursor(0,6);
TV.print("TMP ");
TV.print(watertemp);
TV.set_cursor(40,6);
TV.println(volts);
TV.set_cursor(0,14);
TV.print("TURBO ");
TV.println(turbo);
TV.set_cursor(0,22);
TV.print("PEAK ");
TV.println(pboost);
TV.set_cursor(0,30);
TV.print("RPM ");
TV.println(result);
//delay(100);
if (Serial.available() > 7) //priem ot kompa
{
inByte = Serial.read();
serialInArray[serialCount] = inByte;
serialCount++;
if (serialCount ==8)
{
watertemp = serialInArray[0]; //senstvaz
turbo = serialInArray[1]; //kpa
pboost = serialInArray[2]; //pboost
volts = serialInArray[3]; //volts
result = serialInArray[7];
result = (result << 24) | serialInArray[6];
result = (result << 16) | serialInArray[5];
result = (result << 8) | serialInArray[4];
serialCount = 0;
inByte = 0;
Serial.flush();
}
}
// delay(10);
}
Если delay(10); раскоментировать, то нормально работает только 5 секунд и тоже самое, показания превращаются в хаос из цифр))))
Из-за чего так? Может это буфер приёмный как-то переполняет память или ещё что-то?
Если менять скорость порта на меньшую, то всё становится ещё хуже!
Я почему про буфер подумал, если из скетча залитого в передающие устройство, убрать значительную часть кода (оно же побыстрей станет), то приемное устройство сразу же начинает показывать искажённые данные, без всяких 5 секунд.
Последний раз редактировалось mebitek; 25.12.2011 в 08:57.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)