Отправка в Arduino UNO нескольких значений из кода Python

Я начинаю изучать, как работать с Arduino, в частности, как обмениваться данными между кодом Python, работающим на ПК, и Arduino Uno.

Поэтому я решил начать с того, что считал легкой задачей. То есть отправка пользовательского ввода из Python. Есть 2 значения, одна задержка между светодиодом Arduino (порт 13) и углом сервопривода.

Это не сработало, и я не смог найти ответы, надеюсь, вы мне поможете.

Код Arduino —

#include <Servo.h>

const int ledPin = 13; // контакт, к которому подключен светодиод
int incomingByte = 1000;      // переменная хранит последовательные данные
int pos = 0; 
int incoming[2];
Servo myservo;

void setup() {
  // инициализируем последовательную связь:
  Serial.begin(9600);
  myservo.attach(9);
  // инициализируем вывод светодиода как выход:
  pinMode(ledPin, OUTPUT);
   digitalWrite(ledPin, HIGH);
   myservo.write(180);
   delay(1000);
   digitalWrite(ledPin, LOW);
   myservo.write(0);
}

void loop()
{

  if (Serial.available()>=2) 
  {
     for (int i = 0; i < 1; i++)
     {
      incoming[i] = Serial.read();
     }
    digitalWrite(ledPin, HIGH);
    delay(incoming[0]);
    digitalWrite(ledPin, LOW);
    myservo.write(incoming[1]);
  }
}

Код Python (3.7) —

import serial
import time

ser = serial.Serial('COM5', 9600, timeout=1)


user_input = '1'
while user_input != 'q':
    user_input = input("'Blink time is or q = quit' : ") 
    servo_input = input("What position servo go? ")
    byte_command = str.encode(user_input)                 
    ser.write(byte_command)                              
    servo_command = str.encode(servo_input)
    ser.write(servo_command)
    time.sleep(0.5)                                      

print('\nq entered. Exiting the program')
ser.close()

, 👍0

Обсуждение

Arduino перезагружается при новом USB-подключении и после этого проводит несколько секунд в загрузчике. подождите две секунды в Python после подключения к Arduino., @Juraj


1 ответ


-2

Ну, я сделал это самым простым способом.

Я только что отправил строку на C++ и разобрал ее с помощью sscanf().

,

Не могли бы вы расширить свой ответ? В нынешнем виде это довольно лаконично., @Greenonline