Python последовательная связь с Arduino, мигание встроенного светодиода с использованием пользовательского ввода и одновременное считывание сигнала Arduino - PullRequest
0 голосов
/ 01 мая 2020

Я работал над школьным заданием, которое необходимо для создания программы для подключения arduino для чтения сигнала arduino с именем 'Ping', и в то же время при чтении пользовательского ввода из файла python может переключаться встроенный светодиод включен и выключен. Я работал с этим в течение 2 дней, ища в inte rnet решение?

Задание 2: Считайте Ping от Arduino и включите / выключите светодиод на своем ноутбуке. Запустите программу «pingandled.ino» на вашем Arduino. Использование учебного пособия https://petrimaki.com/2013/04/28/reading-arduino-serial-ports-in-windows-7/ Напишите программу (.py), которая считывает Ping с последовательной шины и одновременно позволяет включать / выключать светодиод по умолчанию (вывод 13) на Arduino с вашего компьютера. P C. Если ваша программа блокирует чтение Pnigs при ожидании команды на включение или выключение светодиода, это неправильно. Чтение Пингов всегда должно продолжаться !!!! Используйте inte rnet, чтобы найти решение.

У нас есть код arduino, который мы не можем изменять.

enter code here: int incomingByte = 0;
int ledPin = 13;

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}

int counter = 0;
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available() == 0 and counter == 0)
{
Serial.print("Ping");
delay(10);
counter++;
}
else
{
incomingByte = Serial.read();

// say what you got:
if (incomingByte == 49) { // ASCII printable characters: 49 means number 1
  digitalWrite(ledPin, HIGH);
} else if (incomingByte == 48) { // ASCII printable characters: 48 means number 0
  digitalWrite(ledPin, LOW);
}
delay(10);
if (counter < 100)
{
  counter ++;
}
else
{
  counter = 0;
}
}
}

У меня есть код python, который имеет 2 функции: одну для считывания сигнала arduino и одну для включения и выключения светодиода. Если я вызываю функции отдельно, это работает, но мне нужен код для одновременного выполнения обеих функций l oop. Вывод выглядит следующим образом: постоянная печать данных с Arduino и при этом мне нужно дать ввод, введите 1 или 0, чтобы переключить светодиодный пинг

enter code here: import serial
import time
s = serial.Serial("COM3", 9600, timeout=0)
def blink():
data = s.readline()
data = data.decode()
print(data)
time.sleep(1)
def aan():
var = input()
var = var.encode()
var = s.write(var)

while 1:

1 Ответ

0 голосов
/ 04 мая 2020

Nevermind. Я нашел решение !! Я использовал поток из библиотеки Threading.

python код:

серийный импорт

время импорта

из потоков импортный поток

s = serial.Serial ("COM3", 9600, время ожидания = 0)

def мигает ():

, а 1:

data = s.readline ()

ping = data.decode ()

print (ping)

time.sleep (1)

def aan ():

while 1:

var = input ()

s.write (var.encode ())

if name == ' main ':

Thread (target = blink) .start ()

Thread (target = aan) .start ()

...