-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdebug-controller.py
More file actions
56 lines (45 loc) · 1.56 KB
/
Copy pathdebug-controller.py
File metadata and controls
56 lines (45 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import pigpio
import time
# --- CONFIGURAZIONE ---
# Usiamo la numerazione BCM (quella del chip)
PIN_CH1 = 17 # Pin fisico 11 # in realta CHANNEL 4
PIN_CH2 = 18 # Pin fisico 12
class PWM_Reader:
def __init__(self, pi, gpio):
self.pi = pi
self.gpio = gpio
self.pulse_width = 0
self.tick_start = None
# Crea un "callback" che scatta ad ogni cambio di stato (da 0 a 1 e da 1 a 0)
self.cb = pi.callback(gpio, pigpio.EITHER_EDGE, self._cbf)
def _cbf(self, gpio, level, tick):
if level == 1: # Inizio impulso
self.tick_start = tick
elif level == 0: # Fine impulso
if self.tick_start is not None:
# Calcola la differenza di tempo tra inizio e fine
self.pulse_width = pigpio.tickDiff(self.tick_start, tick)
def get_width(self):
return self.pulse_width
def stop(self):
self.cb.cancel()
# Inizializzazione
pi = pigpio.pi()
if not pi.connected:
print("Errore: pigpiod non è attivo! Digita 'sudo pigpiod' nel terminale.")
exit()
ch1 = PWM_Reader(pi, PIN_CH1)
ch2 = PWM_Reader(pi, PIN_CH2)
print(f"Lettura canali avviata sui GPIO {PIN_CH1} e {PIN_CH2}...")
print("Valori attesi tra 1000 (min) e 2000 (max). 1500 è il centro.")
try:
while True:
v1 = ch1.get_width()
v2 = ch2.get_width()
print(f"CH1: {v1:4} µs | CH2: {v2:4} µs", end='\r')
time.sleep(0.1) # Aggiorna lo schermo 10 volte al secondo
except KeyboardInterrupt:
print("\nChiusura in corso...")
ch1.stop()
ch2.stop()
pi.stop()