для увеличения скорости чтения и записи/печати данных с Arduino Nano на Raspberry Pi 3B+
В моем проекте мне нужно прочитать номер входного контакта (отправленный RPi), где 8 датчиков подключены к Arduino Nano, после считывания Arduino Nano отправляет значения всех датчиков в реальном времени через последовательную связь USB. Все хорошо, но моя проблема в том, что мне нужно ускорить отправку данных, так как чтение из Rasberry pi занимает много времени. Я ставлю задержку 70 миллисекунд, но если я пытаюсь уменьшить больше, я сталкиваюсь с проблемой, т.е. данные перезаписываются. У меня скорость 115200. Пожалуйста, помогите мне с кодом, чтобы сделать это быстро.
int analogInputPin;
float voltage;
void setup() {
// инициализируем последовательную связь на скорости 9600 бит/с:
Serial.begin(115200);
}
void loop() {
// если какие-либо данные по последовательному порту доступны
// читаем и пытаемся обновить аналогInputPin
// на основе числа, которое было прочитано в сериале
if (Serial.available() > 0) {
analogInputPin = Serial.parseInt();
}
// прочитать аналоговое значение:
int analogInputPinValue = analogRead(analogInputPin);
voltage=(5./1023.)*analogInputPinValue;
// вывод результатов в последовательный порт:
// вывод должен иметь следующий вид: INPUTPIN:VALUE
// за которым следует символ новой строки
Serial.print(analogInputPin);
Serial.print(":");
Serial.print(voltage);
Serial.println("");
// ждем 50 миллисекунд перед следующим циклом
delay(50);
}
@nilyad, 👍0
Обсуждение1 ответ
parseInt
считывает цифры и останавливается после появления нецифровых символов или после истечения времени ожидания функции из-за отсутствия следующих символов. Тайм-аут по умолчанию составляет 1 секунду. Так что здесь вы теряете время.
Самое простое решение для вашего кода — отправить нецифровой символ после числа, отправленного из Raspberry. Это немедленно завершит работу parseInt. Обычно это отправка символа новой строки. Это будет хорошо разделять числа, если вы отлаживаете связь с печатью на последовательном терминале.
Не очень хороший вариант, но я упомянул о нем, это установить меньшее время ожидания блокировки функций чтения, таких как parseInt
, с помощью Serial.setTimeout(ms)
.
Чтобы действительно ускорить общение, вы должны отправлять числа в двоичной форме, а не в виде текста, как сейчас.
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Питание светодиодной ленты - Сколько ампер?
- Arduino nano как клавиатура HID
- Как я могу запитать Arduino Nano от батареи LiPo, желательно 3,7 В
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
Подсказка: посмотрите исходный код Serial.parseInt(). Вместо этого рассмотрите возможность чтения в буфер., @Mikael Patel
Не используйте
parseInt
. Всегда. Это прогоркло. Прочитайте сериал *правильно*: https://majenko.co.uk/blog/reading-serial-arduino, @Majenko