Несколько датчиков, подключенных к последовательным портам Arduino MEGA 2560
Я использую Arduino MEGA 2560 для считывания значений с двух датчиков. Датчик 1 предоставляет нам два значения, разделенных запятой и пробелом, за которыми следует символ новой строки. например:
2.277, 7.942
2.269, 7.897
2.263, 8.040
Датчик 2 предоставляет нам одно значение, за которым следует символ новой строки. например
1.213
1.333
1.17
Датчик 1 дает в два раза больше показаний, чем датчик 2, за то же время. Датчик 1 подключен через Serial1
, а датчик 2 подключен к Serial2
на плате MEGA. Я использую следующий код для чтения значений:
void setup() {
Serial.begin(57600);
Serial1.begin(9600);
Serial2.begin(9600);
while (!Serial)
{
}
}
void loop() { // повторяем снова и снова
if (Serial1.available()) {
{
Serial.print(Serial1.readStringUntil('\n'));
Serial1.flush();
}
}
Serial.print("\t\t\t");
if (Serial2.available()) {
while(Serial2.available())
{
Serial.write(Serial2.read());
Serial2.flush();
}
}
Serial.println();
delay(1000);
}
Я ожидаю примерно такого результата:
2.409, 8.150 2.134
2.490, 7.851 2.133
2.603, 8.759 2.122
2.634, 8.305 3.12
2.727, 8.408 1.32
3.018, 7.982 2.543
3.030, 7.982 1.345
3.020, 8.587 2.435
2.844, 8.034 2.763
2.690, 8.690 5.433
2.721, 8.011 2.348
2.705, 8.242 7.654
2.670, 8.713 2.123
2.756, 8.563 2.098
2.899, 8.413 2.765
3.464, 8.196 2.654
3.705, 8.437 2.343
3.435, 8.558 1.245
3.446, 8.592 2.345
3.421, 8.075 1.234
Вместо этого я получаю что-то вроде этого:
2.770, 8.332.635, 8.281 2.345
2.690, 8.690 2.674
2.721, 8.011 2.356
2.705, 8.242 2.345
2.670, 8.713 3.002
2.756, 8.563 2.094
2.899, 8.413.102, 8.523 2.984
3.464, 8.196 2.398
3.705, 8.437 2.745
3.435, 8.558 2.789
3.446, 8.592 2.543
3.421, 8.075 2.984
3.504, 8.153.772, 8.770 2.183
3.705, 8.552 2.784
3.653, 8.443 2.567
3.908, 7.971 2.098
5.020, 8.581 2.20
3.913, 8.247 2.342
3.762, 8.023.575, 8.345 2.123
Показания датчика после каждых нескольких строк искажаются. Я понимаю, что это может иметь какое-то отношение к последовательным буферам. Как я могу исправить это и получить желаемый результат?
@NRai, 👍1
Обсуждение1 ответ
Ваши последовательные буферы и смещение по фазе, что искажает изображение.
Попробуйте что-нибудь вроде:
void setup() {
String sensor1;
String sensor2;
Serial.begin(57600);
Serial1.begin(9600);
Serial2.begin(9600);
while (!Serial)
{
}
}
void loop() { // повторяем снова и снова
if (Serial1.available()) {
sensor1 = Serial1.readStringUntil('\n'));
}
if (Serial2.available()) {
sensor2 = Serial2.readStringUntil('\n'));
}
Serial.print(sensor1);
Serial.print(sensor2);
Serial.println();
delay(1000);
}
Я бы также порекомендовал метод, предложенный @Majenko в его комментарии под вашим вопросом.
- Когда дело доходит до связи UART-RS485, в чем разница между модулем "MAX485" и модулем "HW-0519"?
- Как получить данные о весе с датчиков стеклянных электронных весов для ванной?
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Как использовать Serial.setTimeout()
- Отправить структуру через Serial
- Как связаться с датчиком через порты RX/TX Arduino?
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
- Последовательная связь между несколькими устройствами (или ардуино)
Вы должны использовать метод, подобный этому: https://majenko.co.uk/blog/reading-serial-arduino — расширить его для работы с несколькими буферами строк и несколькими последовательными портами., @Majenko