ARDUINOLES 6 van tweetal: ………………………………………….. Leerdoel; 1- Hoe kan je een “apparaat” op verschillenden manieren laten reageren op het indrukken van een drukknop Les indeling: 1- Volg de lesstappen waarin het aansluiten en gebruiken van de drukknop wordt uitgelegd. 2- Bedenk , bouw en programmeer zelf een dobbelsteenschakeling waarin de drukknop wordt toegepast. Uitdaging,: Welk duo komt met een ‘eerlijk’ werkende digitale dobbelsteen in de kleinst mogelijke arduino sketch. Stap-1 De drukknop bedrading: Op het Arduino board zitten twee mini drukknopjes. De meest linkse is de RESET knop, Met de resetknop wordt de Arduino ingeval van nood opnieuw gestart, dat is deze les niet de bedoeling. Het tweede drukknopje (naast de heldere LED) gaan we deze les gebruiken. Door middel van de drukknop gaan we schakelen tussen 0 en 5 volt op input pin 5 van de Arduino. DOEN: Verbind draden en een weerstandje zoals in het schema staat. functie tabel: knop : uitleg: spanning op PIN 5: NIET ingedrukt pin 5 is via weerstand verbonden met 5V 5V WEL ingedrukt via witte draad en drukknop is er verbinding met GND; alle spanning ‘stroomt’ weg. De 330 ohm weerstand voorkomt kortsluiting. 0V Stap-2 De drukknop programmeren: Veel digitale apparaatjes hebben slechts 1 knopje, terwijl er toch veel verschillende functies mee uitgevoerd worden. Het effect dat je ziet hangt af van HOEVAAK of HOELANG het knopje wordt ingedrukt. Hier zijn wat mogelijkheden op een rij: Simpel: indrukken = led AAN en daarna loslaten = led UIT (of precies andersom) Iets lastiger: Indrukken en weer loslaten = led aan Indrukken en weerloslaten = led uit Nog een stapje lastiger; knop ingedrukt houden waardoor de knipper frequentie langzaam toeneemt Of een stuk pittiger te programmeren zoals bij een fietsachterlicht 1e keer indrukken rode led’s aan 2e keer indrukken rode led’s knipperen 3e keer indrukken rode led’s ‘lopend’ licht Er zijn nog talloze andere AAN/UIT variaties te bedenken. Alles hangt uiteindelijk af van de programma stappen in de Arduino Sketch. Het is tijd om dat te gaan uitproberen. Hier volgt nog even kort de algemene indeling van een SKETCH eerste blok, geheugen ‘klaar zetten’ geeft aan welke variabelen in het programma gebruikt gaan worden. Het gaat erom welke soort en welke naam. int is een integer; kan alleen een geheel getal bevatten. (maximaal tot het getal 32760) long is ook een geheel getal maar mag ruim 2 miljard gaan (meer geheugen gebruik) float gebruik je voor getallen die ook komma’s bevatten (float neemt veel geheunruimte in beslag) tweede blok in dit programma deel vertel de Arduino welke pins je gaat gebruiken void setup maar vooral ook HOE je de pin wil gebruiken. INPUT geeft aan dat hier signalen binnen komen. (drukknoppen of sensoren) OUTPUT geeft aan dat je signalen uitkomen (LED, motortjes of andere zaken kan je dan aansluiten) derde blok void loop Hier staat het eigenlijke programma. De loop wordt ‘eindeloos’ herhaald. De loop loopt van de eerste { tot de laatste }. Pas op er worden meerdere accolades gebruikt. Ze komen altijd in een setje { ….} In de void loop kom je diverse handige programmeer trucjes tegen, zoals IF, ELSE, FOR en ook gewone rekensommen plus, min, vermenigvuldigen en dergelijke. Er is een Arduino manual beschikbaar voor de complete opsomming van ARDUINO Programmeer instructies, in de voorbeelden kom je de belangrijkste vanzelf tegen. UITPROBEREN: In de SKETCH drukknop AAN UIT is het belangrijkste voorgeprogrammeerd. Gebruik knip en plak om de SKETCH in een Arduino programma te zetten. SKETCH opdracht-1; drukknopAAN_UIT // eerst wordt aangegeven welke naam we geven aan het geheugen plekje waarin de stand // (HIGH of LOW) van de drukknop bewaarde gaat worden: int drukknop; // nu gaan we de arduino vertellen welke aansluitingen we gaan gebruiken als input of output: void setup() { // we gaan pin 6 als "UITGANG" gebruiken: pinMode(6, OUTPUT); // pin 5 als "INGANG" gebruiken: pinMode(5, INPUT); } void loop() { drukknop = digitalRead(5); // de variabele 'drukknop' krijgt nu de waarde HIGH = 5 volt of LOW = 0 volt // als de drukknop is ingedrukt krijgt de variabele 'drukknop' de inhoud LOW if (drukknop == LOW) { // turn LED on: digitalWrite(6, HIGH); } else { // als de knop niet is ingedrukt gaat de LED uit: digitalWrite(6, LOW); } } // dit is de laatste accolade, de void loop begint weer opnieuw. Bij de laatste opdrachten moet je zelf programmeren. Dus lees deze programmaregels aandachtig door. (alles achter // is commentaar) Opdracht-1; draai de functie van de drukknop in de SKETCH om; Niet ingedrukt led aan. Wel ingedrukt led uit. Gelukt? Laat de docent controleren: . . . . .? . . . . . . Opdracht-2: Drukknop als schakelaar Kan je de SKETCH nu zo uitbreiden dat de led aangaat als je de drukknop even indrukt en weer loslaat. En de led weer uit gaat als je de knop nog een keer indrukt en loslaat? Het knopje wordt daarmee een schakelaar. Dit blijkt een lastig opgave. Je hebt geheugen nodig om te onthouden of de LED eerst AAN of UIT was. Het is knap als je een oplossing hiervoor zelf kunt bedenken. Laat maar zien of dat lukt. Hieronder staat één van vele mogelijk oplossingen: (knip en plak de sketch naar een arduino window) SKETCH opdracht-2; drukknopAAN_UIT_schakelaar // Deze SKETCH maakt van de drukknop een AAN/UIT schakelaar. // pas op de sketch werkt niet goed bij slechte drukknopjes. // gebruik dan de debounce versie int huidigestand = LOW; // geheugen voor de waarde van de led int drukknop; // geheugen voor of de drukknop is ingedrukt int vorigestand = HIGH; // geheugen voor de vorige waarde van de led void setup() { pinMode(5, INPUT); pinMode(6, OUTPUT); } void loop() { drukknop = digitalRead(5); // lees de huidige waarde van drukknop HIGH of LOW // Alleen als de knop wordt losgelaten (input gaat van LOW naar HIGH) // dan moet er 'iets' gebeuren: if (drukknop == HIGH && vorigestand == LOW) { if (huidigestand == HIGH) huidigestand = LOW; // als led AAN was, wordt de heheugenplek op UIT uitgezet else huidigestand = HIGH; // zo niet, dan wordt de het geheugen AAN gezet } digitalWrite(6, huidigestand); // de LED gaat nu AAN als hij UIT was, of UIT als hij AAN was. vorigestand = drukknop; // onthoud de vorige toestand voor een volgende keer } Is de AAN/UIT schakelaar gelukt? Laat dan zien aan de docent…….?......... Opdracht-3 Een tijdeffect toevoegen. Bedenk een paar programmaregels die je toevoegt aan de SKETCH van opdracht-1. Het volgende moet gaan gebeuren de LED gaat traag knipperen zodra je de knop indrukt, hoe langer je de knop ingedrukt houdt, hoe sneller de knippering. Na enkele seconden is de knipper tijd zo snel dat de LED gewoon wat vager lijkt de branden. Hint: gebruik delay met een variabele. Gebruik deze variabele om de tijdsduur van de delay steeds korter te maken. Laat het resultaat zien aan de docent: ……?...... Opdracht-4 De drukknop als ‘gokspel’: Kruis of munt wordt groen of rood Bedenk en maak nu een schakeling waarbij bij indrukken van de drukknop 2 LEDs om en om gaan knipperen, het knipperen gaat steeds sneller totdat het onzichtbaar wordt, op het moment dat je de knop loslaat zal puur toevallig een van de LEDs aan zijn. BONUS opdracht: Maak de schakeling van opdracht 4 een stuk uitgebreider. Neem 7 LED’s en bevestig die op het breadboard zodat het er als een dobbelsteen uitziet. Programmeer de LEDs nu zo dat de dobbelsteen gaat tellen 1-2-3-4-5-6-1-2-3-4-5-6-1 enzovoort, en uiteraard weer steeds sneller. Zodra je de knop loslaat blijft een willekeurig getal staan net zoals bij een echte dobbelsteen.