ARDUINO Python => Arduino, и работа с Serial

dron1000

✩✩✩✩✩✩✩
20 Дек 2018
7
0
Изучаю связку Python Arduino и Serial.

Хочу скриптом Пайтона переключать пин на Ардуине по USB.

Но есть проблема, когда скрипт пайтона завершается, то состояние переключаемого пина сбрасывается, это можно решить программно?

Прошивка Ардуины:
#define LED 13
byte val;

void setup() {

Serial.begin(9600);
pinMode (LED, OUTPUT);

}

void loop() {

if (Serial.available()) {
  val = Serial.read();
  if (val == '1') {
    digitalWrite(LED, HIGH);
    }
  if (val == '2') {
    digitalWrite(LED, LOW);
    }  
  }
}
Скрипт на Питоне:
import serial
import time

serial_port = serial.Serial('COM10', 9600)

time.sleep(2)

txs = "1"
serial_port.write(txs.encode())

time.sleep(2)
 

Геннадий П

★✩✩✩✩✩✩
14 Апр 2021
90
24
41
У всех ардуин от DTR идет сигнал на сброс. Обычно он используется при открытии/закрытии порта.
Можно аппаратно доработать ардуину, выкинув конденсатор, но тогда при прошивке через COM-порт из ArduinoIDE нужно будет вручную нажимать на сброс.

Снимок экрана 2021-06-16 002722.jpg
 
  • Лойс +1
Реакции: dron1000

bort707

★★★★★✩✩
21 Сен 2020
1,097
314
Скорее всего сбрасывается при закрытии порта.
хорошая идея... ардуина перегружается и порт сбрасывается.

Значит проблему можно обойти, если при каждом переключении пина записывать состояние в ЕЕПРОМ, а после рестарта - читать оттуда :)
 

Геннадий П

★✩✩✩✩✩✩
14 Апр 2021
90
24
41
если при каждом переключении пина записывать состояние в ЕЕПРОМ
Плохая идея. Так ресурс еепром быстро исчерпается.

Ресурс еепром атмеги в ардуине примерно 100-150тыс циклов перезаписи. Помигаете светодиодом раз в секунду записывая состояние в еепром - и через пару суток непрерывной работы уже ячейка скорее всего не будет записываться.
 
Изменено:
  • Лойс +1
Реакции: dron1000