Voorbeeld

Stoplicht

Voor een voetgangersstoplicht kun je je het volgende diagram voorstellen:

Het stoplicht begint op rood. Je kunt op de knop drukken. Je wacht dan tot het autostoplicht op rood staat. Dan wacht je nog twee seconden en gaat het stoplicht op groen. Daarna gaat het via oranje weer naar rood.

Toestanden

We hebben variabelen/constanten nodig voor de toestanden en if statements per overgang.Wij gebruiken hier Python als taal maar in principe maakt de programmeertaal niet veel uit.

Ook maken we een variabele om de huidige toestand in bij te houden.

TOESTANDEN = {"VOET_ROOD": 0, "WACHT_OP_ROOD": 1, "WACHTEN": 2, "VOET_GROEN": 3, "VOET_ORANJE": 4}

huidige_toestand = TOESTANDEN["VOET_ROOD"]

Overgangen

Voor de overgangen gaan we steeds een if statement maken.

if huidige_toestand == TOESTANDEN["VOET_ROOD"]:
  # Stoplicht blijft op rood staan
  # We detecteren hier of de knop wordt ingedrukt
  if knop_ingedrukt:
    huidige_toestand = TOESTANDEN["WACHT_OP_ROOD"]

elif huidige_toestand == TOESTANDEN["WACHT_OP_ROOD"]:
  # Blijf in deze toestand tot het autostoplicht op rood staat
  if auto_rood:
    huidige_toestand = TOESTANDEN["WACHTEN"]

Als je meerdere overgangen hebt vanuit een toestand krijg je meer geneste if statments. In dit eenvoudige voorbeeld hebben we daar niet mee te maken.

Het geheel

We combineren nu de twee delen en voegen er nog een while-loop aan toe.

TOESTANDEN = {"VOET_ROOD": 0, "WACHT_OP_ROOD": 1, "WACHTEN": 2, "VOET_GROEN": 3, "VOET_ORANJE": 4}

huidige_toestand = TOESTANDEN["VOET_ROOD"]

while True:
  if huidige_toestand == TOESTANDEN["VOET_ROOD"]:
    # Stoplicht blijft op rood staan
    # Zet het stoplicht op rood als dat nodig is
    # We detecteren hier of de knop wordt ingedrukt
    if knop_ingedrukt:
      huidige_toestand = TOESTANDEN["WACHT_OP_ROOD"]
  
  elif huidige_toestand == TOESTANDEN["WACHT_OP_ROOD"]:
    # Blijf in deze toestand tot het autostoplicht op rood staat
    if auto_rood:
      huidige_toestand = TOESTANDEN["WACHTEN"]
    
  elif huidige_toestand == TOESTANDEN["WACHTEN"]:
    # Blijf in deze toestand tot 2 seconden verstreken zijn
    if tijd_voorbij:
      huidige_toestand = TOESTANDEN["VOET_GROEN"]
      
  elif huidige_toestand == TOESTANDEN["WACHTEN"]:
    # Blijf in deze toestand tot het autostoplicht op rood staat
    if tijd_voorbij:
      huidige_toestand = TOESTANDEN["VOET_GROEN"]
      
  elif huidige_toestand == TOESTANDEN["VOET_GROEN"]:
    # Zet stoplicht op groen als dat nodig is
    # Blijf 10 seconden in deze toestand
    if tijd_voorbij:
      huidige_toestand = TOESTANDEN["VOET_ORANJE"]
      
  elif huidige_toestand == TOESTANDEN["VOET_ORANJE"]:
    # Zet stoplicht op oranje als dat nodig is
    # Blijf 10 seconden in deze toestand
    if tijd_voorbij:
      huidige_toestand = TOESTANDEN["VOET_ROOD"]

Het is best wel veel code geworden! Uiteindelijk niet een spannend programma maar we weten nu wel zeker dat alleen de toestandsovergangen gemaakt kunnen worden die wij willen. Best belangrijk bij een stoplicht.

Last updated