Python Arduino Проблема несовместимости последовательной связи - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь отправить некоторые целочисленные значения из Python в Arduino, используя последовательный порт, код Python, кажется, работает, потому что я вижу мерцание светодиода TX на плате Ardunio, но мой светодиод, подключенный к 12-му выводу, все еще не горит Код Arduino также работает, потому что, когда я открываю последовательный порт IDE Arduino и отправляю «1», загорается светодиод, поэтому я думаю, что существует некоторая несовместимость между данными, отправляемыми Python, и типом Arduino ожидая. Код Python:

ser = serial.Serial('COM3', 9600)
time.sleep(1)
ser.write('1'.encode())

Arduino код:

void setup() {
Serial.begin(9600);
pinMode(12,OUTPUT);
}

void loop() {
int X;
if (Serial.available()>0)
{
  X = Serial.read();
  if(X == '1')
  {
    digitalWrite(12,HIGH);
    }
  else if(X == '0')
  {
    digitalWrite(12,LOW);
    }
}
}

поэтому мои вопросы:

1) В чем проблема в кодах?

2) _Какой тип данных Arduino ожидает получить от последовательного порта?

3) _ Каков наилучший способ отправить целочисленное значение свыше 255 из Python в Arduino? это правильный путь?

ser = serial.Serial('COM3', 9600)
S = 102
time.sleep(1)
data = [int(x)for x in str(S)]
for d in data:
    c = bytes(str(d), "ascii")
    ser.write(c)

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Я определил X в начале скрипта как символ, и проблема была решена.

0 голосов
/ 25 марта 2019

Я думаю, что вы ошибаетесь с типами, которые Serial.read дает вам байт, вам нужно преобразовать его в char для сравнения.

try

   X = atoi((char)Serial.read())

Чтение байта ->преобразование его в char -> преобразование в int

Тогда вы можете использовать условия условия как

if (X == 1)
...