From fc7a93c4e730fc2624b9fe0df04009b2f6e849c8 Mon Sep 17 00:00:00 2001 From: Alex Thomassen Date: Thu, 21 Feb 2019 18:30:51 +0100 Subject: [PATCH] =?UTF-8?q?Oppgave=209:=20Fiks=20at=20det=20er=20'delay'?= =?UTF-8?q?=20etter=20fotgjengerlys=20f=C3=B8r=20trafikklys=20starter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sketch_jan10a-ArduinoInnlevering.ino | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/Sketches/sketch_jan10a-ArduinoInnlevering/sketch_jan10a-ArduinoInnlevering.ino b/Sketches/sketch_jan10a-ArduinoInnlevering/sketch_jan10a-ArduinoInnlevering.ino index ce018e8..6d63f07 100644 --- a/Sketches/sketch_jan10a-ArduinoInnlevering/sketch_jan10a-ArduinoInnlevering.ino +++ b/Sketches/sketch_jan10a-ArduinoInnlevering/sketch_jan10a-ArduinoInnlevering.ino @@ -145,6 +145,19 @@ bool pedLightOn = false; */ const int pedActivateAfter = 5000; +/** + * Hvor mange millisekunder programmet skal vente + * før den restarter trafikklyset, etter at fotgjengerlyset er ferdig. + */ +const int restartTrafficAfter = 500; + +/** + * Denne brukes for å sjekke om trafikklys kan starte. + * I hovedsak brukes denne ETTER at fotgjengerlys er ferdig, + * siden det skal være et 500 ms delay etter fotgjengerlyset er ferdig. + */ +unsigned long trafficCanStart = 0; + /** * Holder verdien om "fotgjengermodus" skal aktiveres * etter neste trafikklyssyklus. @@ -238,6 +251,18 @@ void loop() { pedActive = false; pedLightOn = false; pedBlinkCount = 0; + + /** + * Basert på `restartTrafficAfter` (500 ms) oppdaterer denne `trafficCanStart`. + * På grunn av `trafficCanStart`, vil trafikklys restarte sine "sjekker" 500 ms + * etter at denne loopen er ferdig. + * + * Som en liten "dirty fix", legger jeg også til lengden på hvor lenge det røde + * trafikklyset vanligvis lyser (`redLength`). + * Uten denne hadde trafikklyset gått fra rødt til gult rett etter 500 ms, + * noe som jeg tyder som feil i følge oppgaven. + */ + trafficCanStart = currentTime + restartTrafficAfter + redLength; } /** @@ -273,7 +298,7 @@ void loop() { * Dette sjekker om `trafficState` skal inkrementes, altså at et viss antall millisekunder har gått * siden trafikklys endret fra f.eks. gult til grønt, eller rødt til gult. */ - bool incrementTrafficState = (!pedActive && currentTime - lastStateChange >= lightLength); + bool incrementTrafficState = (!pedActive && currentTime - lastStateChange >= lightLength && currentTime > trafficCanStart); if (incrementTrafficState) { /**