вызов serial.read из другой функции - PullRequest
0 голосов
/ 26 мая 2019

Я пытаюсь соединить python с кодом Arduino, используя последовательный порт, но я не могу вызвать serial.read() в функции led_on_off().

Это код Arduino:

int led=13;
int val=0;
char functionname='K';
#include <string.h>
void setup() 
   { 
      Serial.begin(9600); 
      pinMode(led, OUTPUT);
      digitalWrite (led, LOW);
      Serial.println("Connection established...");
   }

void loop()
{

    functionname = Serial.read();
 if (functionname= 'L')
  {
    led_on_off();
    }

 }//void loop
void led_on_off()
{
  val=Serial.read()
  if (val= 1)
  digitalWrite(led,HIGH) 
  else if (val == 0)
  digitalWrite(led,LOW)
}

И это код Python:

import serial    


Arduino_Serial = serial.Serial('com18',9600)  # Create Serial port object called arduinoSerialData
print(Arduino_Serial.readline())             # read the serial data and print it as line
print("Enter L to ON LED and M dc motor") 



input_data = input()                  
Arduino_Serial.write(input_data.encode())
print(Arduino_Serial.readline())
input_value=input("enter 1 or 0")      
Arduino_Serial.write(input_value.encode())            

Я ожидаю получить входные данные (1 or 0) из кода Python и обработать их в функции led_on_off в коде Arduino с помощью функции serial.read() и включить или выключитьсветодиод на выводе 13.

1 Ответ

0 голосов
/ 27 мая 2019

Как уже говорилось @KIIV, в вашем коде Arduino есть некоторые синтаксические ошибки.Кроме того, вы отправляете строку из скрипта Python (функция input), поэтому вам нужно прочитать ее как строку в Arduino.Примерно так будет работать:

Скрипт Python:

import serial


# Create Serial port object called arduinoSerialData
Arduino_Serial = serial.Serial('com18', 9600)
# read the serial data and print it as line
print(Arduino_Serial.readline())

input_data = input("Enter L to ON LED and M dc motor: ")
Arduino_Serial.write(input_data.encode())
print("Received Command:", Arduino_Serial.readline())
while True:
    input_value = input("enter 1 or 0")
    Arduino_Serial.write(input_value.encode())

Код Arduino:

int led = 13;

void setup()
{
    Serial.begin(9600);
    pinMode(led, OUTPUT);
    digitalWrite(led, LOW);
}

void loop()
{
    //void loop
    if (Serial.available())
    {
        String functionname = Serial.readString();
        if (functionname == "L")
        {
            Serial.println("Command received from Arduino!");
            while (1)
            {
                led_on_off();
            }
        }
    }
}
void led_on_off()
{
    if (Serial.available())
    {
        String val = Serial.readString();
        if (val == "1")
            digitalWrite(led, HIGH);
        else if (val == "0")
            digitalWrite(led, LOW);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...