В настоящее время я пытаюсь отправить информацию из python в Arduino через последовательный порт.
Я управляю этим, используя только одну букву Serial.read()
'P' и выполняя действие на моем Arduino со следующим кодом.
Код Arduino:
#define arduinoLED 12 // Arduino LED on board
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(arduinoLED, OUTPUT); // Configure the onboard LED for output
digitalWrite(arduinoLED, LOW); // default to LED off
}
void loop() {
// put your main code here, to run repeatedly:
//delay (20000);
//char comein=Serial.read();
//Serial.println(comein);
char *arg = "hello";
if (Serial.read()== 'P'){
digitalWrite(arduinoLED, HIGH);
delay(5000);
}
else {
digitalWrite(arduinoLED, LOW);
Serial.println("Hello World");
}
}
Код Python:
ser.open()
ser.is_open
my_string='P'
my_string_as_bytes=str.encode(my_string)
print(my_string_as_bytes)
ser.write(my_string_as_bytes)
Это хорошо работает и включает мой светодиод, но как я могу управлять более чем одной буквой для команды, например 'P1 2018' для включения светодиода?
Но моя настоящая проблема в том, что я пытаюсь сделать то же самое, используя тот же код Python, но используя SCmd.readSerial()
, чтобы прочитать информацию в Arduino, такую как:
Код Arduino:
#include <SerialCommand.h>
#define arduinoLED 12 // Arduino LED on board
SerialCommand SCmd; // The demo SerialCommand object
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(arduinoLED, OUTPUT); // Configure the onboard LED for output
digitalWrite(arduinoLED, LOW); // default to LED off
SCmd.addCommand("P1", process_command1); // Converts two arguments to integers and echos them back
SCmd.addCommand("P", relay1_on); // Turns Relay1 on
SCmd.addDefaultHandler(unrecognized); // Handler for command that isn't matched (says "What?")
Serial.println("Ready");
}
void loop() {
// put your main code here, to run repeatedly:
SCmd.readSerial(); // We don't do much, just process serial commands
}
void relay1_on()
{
digitalWrite(12, HIGH);
Serial.println(3000);
delay(3000);
digitalWrite(12, LOW);
}
void process_command1()
{
int aNumber = 5;
char *arg = "hello";
Serial.println("We're in process_command");
arg = SCmd.next();
int OhmPosition = atoi(arg); //will return only numbers
arg = SCmd.next();
int relay = atoi(arg); //will return only numbers
arg = SCmd.next();
int opentime = atoi(arg); //will return only numbers
Serial.println(OhmPosition);
Serial.println(relay);
Serial.println(opentime);
}
Как вы можете видеть, это последовательная команда, отвечающая на 'P', который является тем же примером, что и выше, но по какой-то причине не работает и не понимает почему. Есть идеи?
И вторая команда Serial - это «P1», которую я хотел бы получить в конце, чтобы я мог послать из Python что-то вроде:
Код Python:
my_string6 = 'P1'+str(actions_time_[0][0] )+' '+str(actions_time_[0][1])+' '+str(actions_time_[0][2]))
my_string_as_bytes=str.encode(my_string6)
print(my_string_as_bytes)
ser.write(my_string_as_bytes)
output looks like this=> b'P1 150.0 5.0 2000.0 '
Чтобы я мог запустить команду P1 и отправить значения, которые будут сохранены в OhmPosition
, Реле, Время, которое будет разделено пробелом, так как цель состоит в том, чтобы запустить небольшой электрический автомат.
Буду очень рад, если вы поддержите эти пары точек, связанных друг с другом.