Код ардуино:
#include <QuadDisplay.h>
#define BUTTON_PIN 2
#define LED_PIN 3
#define DISPLAY_PIN 4
int s = 0;
unsigned long t = 0;
bool run = true;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
displayInt(DISPLAY_PIN, 0);
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == 'R') { s = 0; displayInt(DISPLAY_PIN, 0); Serial.println(0); t = millis(); }
if (c == 'T') run = !run;
}
if (!digitalRead(BUTTON_PIN)) { s = 0; displayInt(DISPLAY_PIN, 0); Serial.println(0); t = millis(); delay(300); }
digitalWrite(LED_PIN, (s > 0 && run));
if (run) {
if (millis() - t >= 1000) {
t = millis();
s++;
Serial.println(s);
displayInt(DISPLAY_PIN, (s / 60) * 100 + (s % 60));
}
} else {
t += (millis() - t);
}
}
Пайтон:
import serial
import tkinter as tk
try:
ser = serial.Serial('COM4', 9600, timeout=0.1)
except:
exit()
def update():
if ser.in_waiting:
try:
v = int(ser.readline())
lbl.config(text=f"{v//60:02d}:{v%60:02d}")
except: pass
root.after(50, update)
def toggle():
ser.write(b'T')
btn_t["text"] = "вкл" if btn_t["text"] == "выкл" else "выкл"
root = tk.Tk()
lbl = tk.Label(root, text="00:00", font=(50))
lbl.pack()
tk.Button(root, text="ресет", command=lambda: ser.write(b'R'), font=(10)).pack(fill='x')
btn_t = tk.Button(root, text="выкл", command=toggle, font=(10))
btn_t.pack(fill='x')
update()
root.mainloop()