Контрольное реле Arduino от Python 3 - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь сделать программу на 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 голосов
/ 20 января 2019

Опираясь на ответ, который @Marthin дал ,

Я предполагаю, что вы просто хотите навсегда снять пин-код при отправке сигнала, и в этом случае вы должны использовать глобальную переменную, например, так:

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;
0 голосов
/ 21 января 2019

При каждом вызове loop() вы устанавливаете контакт на ВЫСОКИЙ.Даже если вы установите его на LOW, он сразу же будет установлен на HIGH при следующем вызове loop().

Переместите вызов 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);
        }
    }
}
0 голосов
/ 20 января 2019

Из кода это выглядит, как если бы вы установили запись на 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);

    }

  }
}
...