我正在尝试用Python编写程序。它的作用是向Arduino发送一个数字,而Arduino是否打开继电器。但是它没有打开继电器。
Arduino:
const int pinLED = 8;
void setup()
{
Serial.begin(9600);
pinMode(pinLED, OUTPUT);
}
void loop()
{
digitalWrite(pinLED, HIGH);
if (Serial.available() > 0)
{
char option = Serial.read();
if (option == '1')
{
digitalWrite(pinLED, LOW);
}
}
}
Python:
import serial, time
arduino = serial.Serial("COM6", 9600)
time.sleep(2)
arduino.write(b'1')
arduino.close()
答案 0 :(得分:1)
从代码中看,如果您将写入设置为LOW,则它立即被HIGH的这部分CODE覆盖:
void loop()
{
digitalWrite(pinLED, HIGH);
if (Serial.available() > 0)
{
....
因此,将新条件设置为'0',并用digitalWrite
删除在每个循环中写入的行:
const int pinLED = 8;
void setup()
{
Serial.begin(9600);
pinMode(pinLED, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
char option = Serial.read();
if (option == '1')
{
digitalWrite(pinLED, LOW);
}
if (option == '0')
{
digitalWrite(pinLED, HIGH);
}
}
}
答案 1 :(得分:0)
以the answer that @Marthin gave为基础,
我猜您只是想在发送信号时永久性地断开插针,在这种情况下,您必须像这样使用全局变量:
void setup()
{
Serial.begin(9600);
pinMode(pinLED, OUTPUT);
}
bool pinState=HIGH;
void loop()
{
digitalWrite(pinLED, pinState);
if (Serial.available() > 0)
{
char option = Serial.read();
pinState= option == '1'?LOW:pinState;
}
}
如果要控制该引脚的高低选项,只需对上述代码进行一行更改即可:
pinState= option == '1'?LOW:HIGH;
答案 2 :(得分:0)
在每个loop()
呼叫中,将引脚设置为HIGH。即使将其设置为LOW,在下一个loop()
调用中也会立即将其设置为HIGH。
将digitalWrite(pinLED, HIGH);
中的loop()
调用移至setup()
函数中。
const int pinLED = 8;
void setup()
{
Serial.begin(9600);
pinMode(pinLED, OUTPUT);
digitalWrite(pinLED, HIGH);
}
void loop()
{
if (Serial.available() > 0)
{
char option = Serial.read();
if (option == '1')
{
digitalWrite(pinLED, LOW);
}
}
}