les 6: de drukknop gebruiken

advertisement
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.
Download