Задать вопрос
ogregor
@ogregor
арендатор vpn сервера debian

Как избавиться от задержки при передаче данных в arduino через последовательный порт?

Здравствуйте, никак не могу найти решение простой задачки активации пина на ардуино через вызов функции в python.
Проблема в том, что возникает задержка в полсекунды из за (как я понял) ожидания готовности микроконтроллера. Можно ли избежать задержек?

Python
import serial, time

ON = ":00000008f8"

ser = serial.Serial('COM3', 57600)
time.sleep(0.28) // если убираю здесь, то пин не активируется
#ser.flush()
ser.write(ON)
time.sleep(1)
ser.close()


Arduino:
const int pin =  2;

void pulseLed() {
   digitalWrite(pin, HIGH);        // sets the pin on
   delay(200);        // pauses for 50 microseconds      
   digitalWrite(pin, LOW);         // sets the pin off
   delay(200);       // pauses for 50 microseconds
  }

void setup() {
  pinMode(pin, OUTPUT);           // set pin to input
  // initialize serial:
  Serial.begin(57600);
}

void loop()
{
  // serial read section
  while (Serial.available()) // this will be skipped if no data present, leading to
  {
    if (Serial.available() >0)
    {
      pulseLed();
    }
  }
}
  • Вопрос задан
  • 792 просмотра
Подписаться 2 Оценить 2 комментария
Решения вопроса 1
@vanyamba-electronics
Когда хост обращается к последовательному порту Ардуино (вызов функции serial.open()), происходит так называемый мягкий сброс (soft reset) микроконтроллера. При этом запускается бутлоадер Ардуино, который некоторое время ждёт, не поступит ли от хоста специальной последовательности символов для запуска программы загрузки новой прошивки.

Поскольку специальная последовательность не поступает, то бутлоадер передаёт управление прошивке пользователя, запуская Ваш скетч.

Если Вы хотите, чтобы микроконтроллер ждал запуска программы на хосте и не сбрасывался при открытии последовательного порта, то Вам следует удалить перемычку soft reset на Вашей плате Ардуино.

Без этой перемычки при загрузке скетча в Arduino IDE надо будет вручную нажимать кнопку сброса, чтобы запустить бутлоадер.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ogregor
@ogregor Автор вопроса
арендатор vpn сервера debian
Как вариант делать инициализацию порта в начале скрипта, а передавать данные уже там где надо, тогда задержек не будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:12
10000 руб./за проект
22 дек. 2024, в 19:47
3000 руб./за проект
22 дек. 2024, в 19:03
60000 руб./за проект