Video 10: code voor de opdrachten
Gebruik onderstaande code voor de onderstaande opdrachten. Vergeet niet om bb_init()
aan je Sketch toe te voegen (in de Arduino IDE).
/* * * * * * * * * * * * * * * * * * * * * * * * Deze code is voor de bread board * * * * * * * * * * * * * * * * * * * * * * * */ #include "bb_init.h" void setup() { bb_init(); } int zet_led_aan() { analogWrite(RGB1_RED, 255); analogWrite(RGB1_GREEN, 255); analogWrite(RGB1_BLUE, 255); } int zet_led_uit() { analogWrite(RGB1_RED, 0); analogWrite(RGB1_GREEN, 0); analogWrite(RGB1_BLUE, 0); } // duur van korte pulsjes is afhankelijk van slider 1 // wel is er een minimum van 50 ms int kort_aan() { return analogRead(SLIDER1_PIN) + 50; } // pauze tussen twee korte pulsen is helft van duur van pulsen int kort_uit() { return kort_aan() / 2; } // lang_aan is nu vastgesteld op drie maal de duur van kort_aan. int lang_aan() { return 3 * kort_aan(); } int lang_uit() { return lang_aan() / 2; } void loop() { int pauze = 2000; zet_led_aan(); delay( kort_aan() ); zet_led_uit(); delay( kort_uit() ); zet_led_aan(); delay( kort_aan() ); zet_led_uit(); delay( kort_uit() ); zet_led_aan(); delay( kort_aan() ); zet_led_uit(); delay( kort_uit() ); //------------------------------ zet_led_aan(); delay( lang_aan() ); zet_led_uit(); delay( lang_uit() ); zet_led_aan(); delay( lang_aan() ); zet_led_uit(); delay( lang_uit() ); zet_led_aan(); delay( lang_aan() ); zet_led_uit(); delay( lang_uit() ); //------------------------------ zet_led_aan(); delay( kort_aan() ); zet_led_uit(); delay( kort_uit() ); zet_led_aan(); delay( kort_aan() ); zet_led_uit(); delay( kort_uit() ); zet_led_aan(); delay( kort_aan() ); zet_led_uit(); delay( kort_uit() ); //------------------------------ delay( pauze ); }
Vraag 10.1: variabele wordt functie
Pas de code voor opdracht 10 zo aan dat ook de duur van de pauze (op het einde van de loop) varieert, afhankelijk van de slider. Maak daarvoor een functie pauze() die niet zelf de slider uitleest, maar de pauze berekent als: 2 maal het gemiddelde van de kort_uit() en lang_uit().
Vraag 10.2: tweede slider gebruiken
Pas de code zo aan dat de duur van een lange puls niet afhankelijk is van de duur van de korte puls, maar van een tweede slider (het is handig om SLIDER2_PIN te gbruiken).
Zorg ervoor dat de lange pulsen tussen 300 en 3000 milliseconden kunnen zijn, afhankelijk van de stand van de slider. Gebruik, als je kunt, de map() functie van Arduino voor deze omrekening.
Vraag 10.3: functies voor kortere code
In de loop-code zit nog flink wat herhalende code. Maak de 2 functies, drieKortePulsjes() en drieLangePulsjes(), op zo’n manier dat de loop-functie er zo kan uitzien:
void loop() { drieKortePulsjes(); drieLangePulsjes(); drieKortePulsjes(); delay( pauze() ); }
Deze functies hoeven geen return-waarde op te leveren, want ze worden niet gebruikt in berekeningen, maar als commando’s voor hun zij-effect (knipperend lampje).
Vraag 10.4: twee functies kunnen weg
De duur van het interval dat de LED uit staat na een puls (laten we dat het “uit_interval” noemen) is altijd de helft van de duur van de puls zelf. Eigenlijk zijn kort_uit() en lang_uit() daarom een beetje bubbelop. Schrijf een functie die de duur van een puls als parameter binnenkrijgt, en het interval tussen de puls als returnwaarde heeft. Dus:
- uit_interval(300) levert 150 op;
- uit_interval( korte_puls() ) levert de helft van de korte pulsduur op; en
- uit_interval( lange_puls() ) levert de helft van de lange pulsduur op.
Nadat je deze functie gemaakt hebt (en getest met Serial.println), gebruikt ‘m in de SOS code, en verwijder de functies kort_uit() en lang_uit().
Vraag 10.5: parameters maken de code nog korter
We kunnen de functie uit_interval() die je zojuist maakte, gebruiken in de volgende klus:
Vervang nu de twee functies drieKortePulsjes() en drieLangePulsjes() door één functie driePulsjes() die de pulsduur als parameter binnen krijgt (en zelf het bijbehorende uit-interval berekent). De loopfunctie kan er dan zo uit komen te zien:
void loop() { driePulsjes( kort_aan() ); driePulsjes( lang_aan() ); driePulsjes( kort_aan() ); delay( pauze() ); }