I have a small project to show how to communicate between Arduino and python project. The idea is to create python ap to control the traffic light. Arduino (UNO) part is just a small traffic light with only 3 LEDs (red - 2, yellow-3,green-4). Also the Python part is a simple tkinter app with 2 buttons: set 10 sec delay, and set 5 sec delay. They are communicating with serial port. All codes (py and arduino parts) will be below. An issue is when i press 'set 5 sec' button, in the next loop iteration, delay becomes 5 sec. But when i press 'set 10 sec' button, nothing happens. I am noob at arduino and c++, but know python very well. Also english is not my native language, so dont scold me for some mistakes.
python:
import serial
from time import sleep
import tkinter
from tkinter import ttk
# Укажите порт, к которому подключена Ваша плата Arduino.
ARDUINO_PORT = 'COM4'
BAUDRATE = 9600
def on():
command = '10'
arduino.write(command.encode())
sleep(0.1) # Добавляем небольшую задержку для обработки
def off():
command = '5'
arduino.write(command.encode())
sleep(0.1) # Добавляем небольшую задержку для обработки
main_window = tkinter.Tk()
main_window.title('Управление arduino')
main_window.geometry('800x600')
button1 = ttk.Button(text='Задержка 10 сек.', command=on)
button0 = ttk.Button(text='Задержка 5 сек.', command=off)
buttons = [button1, button0]
for button in buttons:
button.pack()
status_label = ttk.Label()
status_label.pack()
try:
arduino = serial.Serial(ARDUINO_PORT, BAUDRATE, timeout=1)
sleep(2)
status_label.config(text='Подключено к Arduino')
except serial.SerialException:
status_label.config(text='Не удается подключиться')
main_window.mainloop()
arduino:
int main_delay = 10000;
int sign_delay = main_delay - 3000;
int yellow_delay = 3000;
int green_morg_delay = 1000;
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
char command = Serial.read();
if (command == '10') {
main_delay = 10000;
} else if (command == '5') {
main_delay = 5000;
}
}
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
delay(main_delay);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
delay(yellow_delay);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delay(main_delay);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
delay(green_morg_delay);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delay(green_morg_delay);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
delay(green_morg_delay);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(yellow_delay);
}
I already tried to talk with chat-gpt but it cant help me. Also all hardware is working correctly.