用 arduino 挂起 python 脚本。需要帮助简化事情

Hanging python script with arduino. Need help simplifying things

好的,所以我要做的是用一个 python 脚本打开 LED,然后用另一个脚本关闭。现在我面临的问题是我的 python 脚本必须保持挂起才能让 LED 保持亮起。我无法弄清楚如何从串口中读取内容,在保持 LED 亮着的同时关闭通信。

'g' 是我从打开的 python 脚本发送的内容,'h' 将从关闭的 python 脚本发送。

arduino:

void setup(){
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  Serial.write('g');
  Serial.write('h'); 
}

void loop(){ 
  if(Serial.read() == 'g' ){    
    digitalWrite(13, HIGH);
    Serial.end();
  }
  if(Serial.read() == 'h' ){    
    digitalWrite(13, LOW);
     Serial.end();
  }
} 

还有 python

#! /usr/bin/python
## import the serial library
import serial

## Boolean variable that will represent 
## whether or not the arduino is connected
connected = False

## open the serial port that your ardiono 
## is connected to.
ser = serial.Serial("/dev/cu.wchusbserial1410", 9600)

## loop until the arduino is ready
while not connected:
    serin = ser.read()
    connected = True

ser.write("g")


while ser.read() == 'g':
    ser.read()

## close the port
ser.close()

底部的 'while ser.read() 部分只是我想弄清楚我需要什么,但到目前为止还没有这样的运气。

提前致谢!

在python代码中不使用这个串行命令,而是简单地使用打印命令。假设你想在串行端口上发送字符 g 然后简单地写:

print "g"

它会被发送到串口。在使用 Arduino YUN 时为我工作。

感谢您的反馈。我使用了一种不同的方法,并认为共享代码是个好主意,以防有人有兴趣这样做。

Python:

import serial
import time

arduino = serial.Serial('/dev/tty.wchusbserial1410', 9600)
time.sleep(0.1) # wait
print("initialising")

arduino.write('off') # turns LED off
print("LED OFF")
time.sleep(0.1) # wait



arduino.close() # close serial

这是用来关灯的代码。如果你想打开它,它是相同的程序,但创建另一个脚本替换 arduino.write('off') 与 arduino.write('on')

还有阿杜诺:

int led = 13; // Pin 13

void setup()
{
    pinMode(led, OUTPUT); // Set pin 13 as digital out

    // Start up serial connection
    Serial.begin(9600);
    Serial.flush();
}

void loop()
{
    String input = "";

    // Read any serial input
    while (Serial.available() > 0)
    {
        input += (char) Serial.read(); // Read in one char at a time
        delay(5); // Delay for 5 ms so the next char has time to be received
    }

    if (input == "on")
    {
        digitalWrite(led, HIGH); // on
    }
    else if (input == "off")
    {
        digitalWrite(led, LOW); // off
    }
}

此脚本的一个问题是串行通信关闭后灯熄灭。为了解决这个问题,我在接地和复位引脚之间使用了一个 10uF 的电解电容来保持串口打开。 (请注意:只有在您对 Arduino 进行编程后才能盖上盖子。如果您需要重新编程,请先将其拉出。)