PYTHON - else/if met timer er tussen

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Vincent_Thunder
  • Registratie: Augustus 2015
  • Laatst online: 14-09 22:57
Mijn vraag
ik ben bezig met het maken van een enkelbaan stoplicht in een tunnel.
hier bij moet ik met veiligheid werken dat kan meten dat de auto ook weer uit de tunnel is gekomen (dit wil ik doen met een druk knop)
heeft iemand daar een simpel (aantal) regeltje(s) voor hoe ik dat kan doen?

Relevante software en hardware die ik gebruik
qua hardware gebruik ik een ESP32, 2 druk knoppen en 2 neopixels


dit is mijn huidige script :
Python:
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
import time
import machine, neopixel
np = neopixel.NeoPixel(machine.Pin(23), 2)
knop1 = machine.Pin(16)
knop2 = machine.Pin(17)
alarm = machine.Pin(19)

while True:

    if knop1.value():
        print("links groen")
        np[1] = (0, 25, 0)
        np.write()
        time.sleep(2)
        print("links oranje")
        np[1] = (25, 25, 0)
        np.write()
        time.sleep(1)
        print("links rood")
        np[1] = (25, 0, 0)
        np.write()   
        time.sleep(5)
        print("auto uit tunnel")
        time.sleep(0.75)
    else:
        print("rood L")
        np[1] = (25, 0, 0)
        np.write()
    
    if knop2.value():
        print("rechts groen")
        np[0] = (0, 25, 0)
        np.write()
        time.sleep(2)
        print("rechts oranje")
        np[0] = (25, 25, 0)
        np.write()
        time.sleep(1)
        print("rechts rood")
        np[0] = (25, 0, 0)
        np.write()
        time.sleep(5)
        print("auto uit tunnel")
        time.sleep(0.75)
    else:
        print("rood R")
        np[0] = (25, 0, 0)
        np.write()

[ Voor 0% gewijzigd door MueR op 20-06-2018 22:46 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Blijft toch irritant dat GoT geen StackOverflow is, anders had ik je post kunnen formatten. Maar jij bent dus de enige die dat kan. S.v.p. [ code ] tags toevoegen en dubbelchecken of de indent goed is.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • Koffie32
  • Registratie: Juni 2017
  • Laatst online: 24-12-2021
Ik neem aan dat een ESP32 ongeveer werkt als een Arduino.

Ten eerste wil je dan altijd voorkomen dat je iets als sleep() aanroept omdat dit het systeem bezet houdt, gebruik daarvoor in de plaats een software timer.

Voorbeeld in C (eens kijken of het goed is blijven hangen in mijn geheugen):
code:
1
2
3
4
5
6
7
8
const int INTERVAL = 500; // doorloop elke x milliseconde
unsigned long previousMillis;

unsigned long currMillis = millis()
if(currMillis - displayPreviousMillis >= INTERVAL){
previousMillis = millis();
// De tijd is verstreken.
}

Daarnaast zou ik adviseren alles eens uit te tekenen in een state-machine-diagram. Let er overigens op dat je bij het gebruik van de drukknoppen mogelijk te maken krijg met bouncing en de knoppen dus eerst moet debouncen (als het mechanische knoppen zijn).