Als absolute beginner met veel goesting, ervaar ik nogal wat problemen met het programmeren. Het lukt me niet om alle nodige stappen in de juiste volgorde te krijgen. Nu met veel oefenen en doorbijten schijnt dit uiteindelijk wel te lukken. Maar nu worstel ik toch wel al erg lang met een schijnbaar eenvoudig probleem.
Ik zou een super eenvoudig 'slot' spelletje willen maken. 3 reeksen van 3 LED's in verschillende kleuren, rood, groen en geel knipperen elk in hun reeks netjes na elkaar. Bij elk reeksje hoort een knopje. Als je op een knopje drukt moet de animatie stoppen op de plaats waar gedrukt werd. Dus als op dat moment het groene LEDje brandde moet het daar stoppen.
Als je er dan in slaagt 3 keer het groene LEDje te laten branden bijvoorbeeld, dan wordt je beloond. Later zou ik dit nog kunnen uitbreiden met meer toeters en bellen. Maar dat zien we dan wel.
Maar first things first.
Gezien het een reactie spelletje is is het niet aangewezen om de Delay functie te gebruiken in de LED animatie. Eén BlinkWithoutDelay is geen probleem maar wat met 3 LEDs?
Als de animatie loopt, hoe stop je dan animatie, en wel net op die plaats waar gedrukt werd. Welke functie gebruik je daar voor. Uiteraard is het de bedoeling om het gedrukte resultaat (2 x groen + 1 x rood = ooh niet gewonnen) in een variabele op te slaan zodat we die later kunnen gebruiken om bijvoorbeeld de beloning te bepalen
Ik heb interrupt geprobeerd maar las toen dat er maar 2 interrupt pinnen zijn op een UNO-bordje. Dat is niet bruikbaar, gezien ik 3 reeksjes wil gebruiken en dus 3 knopjes nodig heb, of zie ik dat verkeerd.
Debouncing heb ik intussen hardwarematig opgelost, dat is al een zorg minder.
Ik ben hier nu toch al meer dan een maandje zoet mee heb al min of meer functionerende sketches op mijn HD staan maar het is me nog niet gelukt om dit probleem volledig op een 'intelligente' manier op te lossen.
Leuk he, dat programmeren en het spelen met LEDjes en zo.
Het probleem wat je aankaart zit niet zozeer in het programmeren.
Eerder in je hoofd, hoe jij dit wil aanpakken.
Maar geen paniek, dat is ook op te lossen.
Je hebt het zo te lezen voor mekaar gekregen om een LED te laten knipperen met de blink without delay() sketch.
Het is juist dat je voor dit geval geen delay() kunt gebruiken, want dat gooit het hele verhaal op z'n kop.
Blink without delay() gaat er niet over om iets te laten knipperen, maar de manier waarop dat gedaan word.
Dus is het wel erg belangrijk dat je goed begrijpt wat er achter die sketch zit.
Wat ik ook meen te lezen, is dat je nu van 1 pin laten knipperen, 9 pinnen wil laten knipperen, en tegelijk ook 1 of meer knopjes in de gaten wil houden (hoeveel knopjes had je precies in gedachten ?).
Waarom die grote sprong ineens ?
Concentreer je eerst eens er op om 2 LEDjes om de beurt te laten knipperen.
Dan 3.
Dan 3 met elk een ander ritme (nu word het interessant ).
Dan nog meer LEDjes.
En als laatst het knopje ook nog zien.
Het toverwoord, of eigenlijk de truc hier is:
Heel goed bijhouden wat je doet en gedaan hebt.
Je moet ook begrijpen wat het woord loop() eigenlijk betekent en wat dat ding eigenlijk doet.
Tot slot maar zeker niet als laatste: als je zulke vragen hebt, is het het best als je heel uitgebreid beschrijft wat je probleem precies is.
Door daar over na te denken, kun je mogelijk al iets daarvan oplossen, maar je komt er zeer waarschijnlijk ook achter dat het eigenlijk over een verzameling van problemen gaat.
En die moet je niet proberen in 1 keer op te lossen, maar stuk voor stuk.
Als je niet verder komt met een sketch die je hebt gemaakt, dan is het verstandig om die sketch bij je vraag te plaatsen.
Het is voor mensen die je willen antwoorden zo veel eenvoudiger om te zien waar het mis zou kunnen gaan.
Als ik het zo lees ben je goed bezig maar probeer je te vliegen en ben je pas aan kruipen toe.
Programmeren is een manier van denken en die heb je -zoals je zelf zegt- nog niet vast.
En inderdaad delay is enkel goed voor voorbeeld programmatjes om uit te leggen in welke volgorde je dingen moet doen.
Eén BlinkWithoutDelay is geen probleem maar wat met 3 LEDs?
Maar BlinkWithoutDelay is er juist om 3 LEDS (en nog veel meer) te doen ter zelfdertijd.
Probeer dat eerst eens aan de klap te krijgen.
Merk op dat "ter zelfdertijd" heel relatief is. ik vind dat als men loop meer dan 5ms duurd dat het te lang is. dat is 200 keer per seconde (dus zowiezo al geen delay met meer dan 4)
Dus als je sketch in 5ms 2 knoppen "na elkaar" controleert en dan de "led stopt met knipperen" doet is dat echt wel "terzelfdertijd".