Загрузка данных


Код ардуино:
#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()