通过Python 3控制Arduino继电器

时间:2019-01-19 20:16:01

标签: python python-3.x arduino serial-port

我正在尝试用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()

3 个答案:

答案 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);
        }
    }
}
相关问题