Возможно ли иметь два serialEvent() в коде Arduino?
Я разрабатываю код на Arduino, и мне нужно реализовать условие, согласно которому, если данные доступны в формате «serial2», тогда входные данные будут получены только для «последовательного» терминала Arduino.
Я пробовал использовать приведенный ниже код, но его поведение такое: когда я отправляю что-то с «последовательного» терминала Arduino, управление переходит в цикл «serialEvent()», в противном случае, даже если я отправляю данные через «serial2», это не входит в этот цикл.
Ниже приведен фрагмент моего кода:
void serialEvent()
{
int DATAaddressMSb, DATAaddressLSb;
digitalWrite(DIR485, LOW);
delay(100);
delay(10);
while (Serial2.available()>0)
{
Serial.println("serial2 data available");
int i = 0;
int bufferIn1[9] = { int(0x00), int(0x00), int(0x00), int(0x00), int(0x00), int(0x00), int(0x00), int(0x00), int(0x00) };
bufferIn1[i] = Serial2.read();
Serial.print(bufferIn1[i], DEC);
Serial.print(" ");
if(i == 0){Serial.print("BUFFER VAL 0");
Serial.print( bufferIn1[i], DEC);}
if(i == 1){Serial.print("BUFFER VAL 1");
Serial.print( bufferIn1[i], DEC);}
if(i == 2){Serial.print("BUFFER VAL 2");
Serial.print( bufferIn1[i], DEC);}
i++;
}
while (Serial.available()&& pos < sizeof my_str - 1) {
char c = Serial.read();
if (c == '\n') { // \n означает "конец сообщения"
my_str[pos] = '\0'; // завершаем буфер
pos = 0; // сброс к началу буфера
String str((char*)my_str); // конвертируем массив символов в строку
if (str == "PCB-CODE") { Serial.println(SN_CODE); }
if (str == "FW-VERSION") { Serial.println(FW_ver); }
if (str == "STOP" ) { TESTcode = 0; IDcode = 999; }
if (str == "TEST1") { TESTcode = 1; delay(6000); Serial.println("Enter ID "); }
if (str == "TEST2") { Serial.println("Initialising Board "); delay(6000); TESTcode = 2; } // Для всех тестов
if (str == "ID0") { IDcode = 999; }
if (str == "ID1") { delay(60); IDcode = 1; } // Проверка версии прошивки
if (str == "ID2") { IDcode = 2; } // Тест на 3,3 В
if (str == "ID3") { IDcode = 3; } // Проверка основного питания
if (str == "ID4") { delay(50); IDcode = 4; } // Проверка +15 В
if (str == "ID5") { IDcode = 5; } // Тест на +10В
if (str == "ID6") { IDcode = 6; } // Тест на +8В
if (str == "ID7") { IDcode = 7; } // Проверка +5,5 В
if (str == "ID8") { IDcode = 8; } // Проверка +1,2 В
if (str == "ID9") { IDcode = 9; } // Проверка +2,5 В
if (str == "ID10") { IDcode = 10; } // Тест на -15 В
if (str == "ID11") { IDcode = 11; } // Проверка POW_LIGHT
if (str == "ID12") { IDcode = 12; } // Проверка +s_stab
if (str == "ID13") {delay(50); IDcode = 13; } // Проверка +CELLA
if (str == "ID14") { IDcode = 14; } // Проверка FPGA_GPIO
if (str == "ID15") { IDcode = 15; } // Проверка DAC_OUT
if (str == "ID16") { IDcode = 16; } // Проверка CURRENT_LOOP
if (str == "ID17") {delay(50); IDcode = 17; } // Проверка сигнала крутящего момента
if (str == "ID18") { IDcode = 18; } // Проверка EXT_TRIGGER
if (str == "ID19") { IDcode = 19; } // Проверка кодировщика
if (str == "ID20") { IDcode = 20; } // Проверка оперативной памяти
if (str == "ID21") { IDcode = 21; } // Проверка SD-карты
if (str == "ID22") { IDcode = 22; } // Проверка Ethernet
if (str == "ID23") { IDcode = 23; } // Проверка CAN
if (str == "ID24") { IDcode = 24; } // Тест на I2C
for( int i = 0; i < sizeof(my_str); ++i ) // сброс строки рисвута // сброс полученной строки
my_str[i] = (char)0;
}
else {my_str[pos++] = c;}
}
}
Пожалуйста, помогите. Спасибо.......
@swanand, 👍1
Обсуждение1 ответ
▲ 1
Согласно https://www.arduino.cc/en/Reference/SerialEvent
Ардуино Мега обрабатывает:
void serialEvent1(){
//заявления
}
void serialEvent2(){
//заявления
}
void serialEvent3(){
//заявления
}
Каждый второй Arduino имеет только один:
void serialEvent(){
//statements
}
,
@Filip Franik
Смотрите также:
- Как работает последовательная связь на Arduino?
- Использование YS-IRTM с Arduino Uno
- Как Arduino будет общаться по беспроводной сети через XBee?
- Не могу заставить работать software serial
- если я добавлю файл .cpp, Serial станет непригодным для использования
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
игнорируйте SerialEvent и поместите этот код в цикл(). это не что иное, как
if (Serial.available())
, вызываемый после функции цикла(), @JurajСоответствующий исходный код Arduino: https://github.com/arduino/ArduinoCore-avr/blob/b7c607663fecc232e598f2c0acf419ceb0b7078c/cores/arduino/HardwareSerial.cpp#L64-L85., @Gerben