Quiz Knoppen

Beste lezers

Ik wil heel graag een quiz schakeling maken maar ik kom geen stap verder. De bedoeling is dat ik 4 knoppen heb en vier ledjes en als dan 1 persoon drukt dat dan de ander niet meer kan drukken. Ik ben begonnen met relais en draad en dat soort dingen maar dat wilde allemaal niet lukken. Toen kreeg ik de tip om het met Arduino te gaan doen!!!!!!!! Ik heb naar het horen van de verhalen mijzelf over laten halen om dan maar een starters kit van arduino aan te schaffen en te kijken of ik daar verder mee kom. Ik ben nu inmiddels alles bij elkaar al 100 euro kwijt en heb dus nog steeds geen quiz knoppen. Het probleem is dat ik op internet verschillende schema's en programma's heb gedownload maar niets is compleet of de programma's geven al een fout aan bij het verifiëren.

Ik moet eerlijkheidshalve wel zeggen dat ik er ook echt geen drol van snap. Ik vind het superleuk allemaal om wat te spelen met de videolessen die ik heb gevonden maar het programmeren is voor mij abracadabra.

Helaas is mijn budget op en wil ik toch graag voor mijn kids deze schakeling alsnog afmaken.

Wie ow wie kan mij helpen???????

Welkom bulldogrick

Je verhaal is niet helemaal compleet 1) Wat moet er gebeuren als de eerste die gedrukt heeft het antwoord fout heeft? Hebben de anderen dan weer een kans om te drukken? 2) Hoe zie je het terugzetten naar 'af' gebeuren? Met een vijfde knop?

nee ik zal het proberen uit te leggen

Ik heb 4 knoppen met een ingebouwde led. ik stel een vraag en diegene dia als eerste drukt daarvan moet zijn lamp gaan branden. Nu mag er niemand anders meer kunnen drukken en na een bepaalde tijd reset het zichzelf.

Ik heb op internet wel wat gevonden een programma en een filmpje en ikheb dit proberen na te maken maar er klopt niets van :( :sweat_smile:

Dit wil ik graag maken: https://www.youtube.com/watch?v=DYVHlhglcaI

En dit is de bijbehorende code:

int DELAY = 3500;

void setup() { //Serial.begin(9600); pinMode(0, INPUT); pinMode(1, OUTPUT); pinMode(2, INPUT); pinMode(3, OUTPUT); pinMode(4, INPUT); pinMode(5, OUTPUT); pinMode(6, INPUT); pinMode(7, OUTPUT); pinMode(8, INPUT); pinMode(9, OUTPUT); pinMode(10, INPUT); pinMode(11, OUTPUT); }

void playWinner(int pin) { for (int i = 0; i < 8; i++) { digitalWrite(pin, HIGH); delay(75); digitalWrite(pin, LOW); delay(75); } digitalWrite(pin, HIGH); delay(DELAY); digitalWrite(pin, LOW); }

void loop() { if (digitalRead(0) == HIGH) { playWinner(3); } else if (digitalRead(2) == HIGH) { playWinner(1); } else if (digitalRead(4) == HIGH) { playWinner(7); } else if (digitalRead(6) == HIGH) { playWinner(5); } else if (digitalRead(8) == HIGH) { playWinner(11); } else if (digitalRead(10) == HIGH) { playWinner(9); } }

Ik hoop echt dat u me kunt helpen of in ieder geval op weg kunt helpen. Ben er een beetje moedeloos van.

Alvast heel hartelijk dank voor je reactie.

Via dat YouTube filmpje zie ik jouw voorbeeld op Github: https://github.com/bluemonkeydev/arduino-projects/blob/master/uno/QuizShow/QuizShow.ino.

Welk Arduino board heb je ? Voor hoeveel knoppen wil je het maken ? Vier ? Kun je beginnen met één knop ? Kun je vertellen hoe je een knop en een led hebt aangesloten met de weerstanden ? Een foto van een met de hand getekend schema is prima.

Er staan veel foute voorbeelden op internet. Zomaar een willekeurig voorbeeld volgen kan inderdaad tot teleurstellingen leiden. Het voorbeeld dat je nu hebt is eenvoudig. Volgens mij gaat het er om dat de schakelaars en leds goed worden aangesloten.

Ik heb een Uno versie 3 bordje en ja het gaat om 4 knoppen
ik heb inderdaad 1 knop aangemaakt maar dat werkte niet daarbij vroeg ik me wel af ofdat het misschien niet werkt omdat ik maar 1 knop met led aansluit of kan dat niet het probleem zijn?
ik heb een tekeningetje gemaakt en daar een foto van gemaakt maar hoe krijg ik die hier nu op dit forum?

Dit is mijn tekening

eigen-tekening.pdf (81.3 KB)

en hier heb ik het van nagemaakt (althans geprobeerd)

Schema.PNG|394x460

Je gebruikt pins 0 en 1 zie ik, dat kun je beter niet doen. Die zijn nl. al in gebruik voor de (USB-)seriepoort, oftewel het uploaden van je sketch!

Je schrijft dat je 4 knoppen en lampjes hebt, maar in setup() zet je 6 pins als INPUT en 6 als OUTPUT. Ik stel voor om 0, 1, 10 en 11 te laten vervallen. Sluit dan je knoppen aan op 2, 4, 6 en 8, en je lampjes op 3, 5, 7 en 9. Functie loop() moet er dan zo uit komen te zien:

void loop() {
  if (digitalRead(2) == HIGH) {
    playWinner(3);
  } else if (digitalRead(4) == HIGH) {
    playWinner(5);
  } else if (digitalRead(6) == HIGH) {
    playWinner(7);
  } else if (digitalRead(8) == HIGH) {
    playWinner(9);
  } 
}

Dan zou het moeten werken, denk ik (niet getest!). Je code kan op een paar punten nog vereenvoudigd worden, maar dat is voor later. ;-)

PS.: Zet even code-tags voor en na je code! Dit is niet voor iedereen goed leesbaar, en in de regel

} else if (digitalRead(8) == HIGH) {

staat nu een smiley...

sterretje: Hoe zie je het terugzetten naar 'af' gebeuren? Met een vijfde knop?

Ik denk dat de delay(3500) in playWinner() daarvoor bedoeld is.

De leds hebben weerstanden nodig, iets van 220Ω tot 1kΩ.

Hoi bulldogrick, welkom !

Die laatste foto is onbruikbaar, want hoewel daar vrijwel alles op staat, is het niet te doen om te zien hoe alles verbonden is. Jouw tekening laat een aantal dingen zien.

Het eerste is dat je de LED direct wil aansluiten op pin 3 en de andere kant op de min van je voeding. Dat moet je NOOIT doen ! Je maakt daarmee namelijk zowel de LED als de Arduino kapot doordat je teveel stroom door de LED stuurt. Om dat te voorkomen moet je een weerstand gebruiken, en de beste weerstand kun je berekenen als je de eigenschappen van de LED weet, en rekening houd met de maximaal te leveren stroom per Arduino pin. Vuistregel is 220 Ohm, maar dat hoeft niet de beste waarde te zijn.

Dan de schakelaar tussen de plus, de min via een 10K weerstand, en die zal ook aan pin 2 zitten, toch ? Veel (zo niet alle) beginners zijn van mening dat een hoog signaal betekent dat er op een knop gedrukt is of dat er op andere wijze iets geactiveerd moet worden. Maar zo vanzelfsprekend is dat helemaal niet. Je Arduino biedt de mogelijkheid een interne pull up "weerstand" te activeren op een ingang. Dat betekent dat die ingang HOOG gehouden word, totdat een externe invloed er harder aan trekt en 'm LAAG maakt. Dat moet je dus wel activeren in setup, maar daarmee bespaar je je een onderdeel uit (een weerstand die je elders weer nodig hebt). En je moet dan in je code gaan kijken of die ingang LOW word in plaats van HIGH.

Ook ik zou je willen aanraden eerst 1 knop goed aan het werken te krijgen, en dan de rest pas te gaan uitwerken. Dan heb je minder aan je kop per stap.

Verder is "er klopt niets van" een niet zo heel duidelijke omschrijving. Want daar kan niemand wat mee.

De code die je laat zien, is niet erg slim gemaakt en een heel slechte code om als voorbeeld te dienen. Dat komt omdat het begint bij het gebruiken van poorten 0 en 1. Die moet je niet gebruiken tenzij je exact weet wat je aan het doen bent (en je mag aannemen dat degene die dat voorbeeld wil gaan proberen dat dus niet weet), omdat dat de pinnen zijn van de seriële verbinding. Dus voor jou: gebruik pinnen 0 en 1 voorlopig helemaal niet, dat zal je al veel problemen schelen. De code gebruikt ook functies, en ook dat is niet heel slim en/of bruikbaar voor beginners die op zoek zijn naar een leuk stukje code dat ze zelf kunnen aanpassen. In die functie word de LED bij de knop die gedrukt is 8 keer kort opgeflitst, en daarna 3 en een halve seconde aangezet. Tijdens de 4,7 seconden die dat al dan niet laten branden van de betreffende LED, word er niet gekeken naar de andere ingangen, maar ze worden ook niet geblokkeerd. Dus wanneer iemand lang genoeg de knop indrukt, en of ze allemaal de knop hebben ingedrukt, word altijd degene die na de eerste knopdrukker komt, als volgende aangewezen (niet eerlijk). Dat kan ook anders, maar zal je code wel een stuk gecompliceerder maken.

Maar nogmaals, laten we eerst eens 1 knop werkend krijgen op de manier die jij voor ogen hebt. Graag wel de volgende keer je code tussen [code]hier dus [/code] tags zetten. Dat maakt het voor ons een stuk leesbaarder en gemakkelijk te kopiëren naar een andere editor wanneer gewenst, en het voorkomt vreemde effecten (ik weet zeker dat jouw code geen smilies bevat).

Allereerst hartelijk dank voor jullie reacties ik ga vanmiddag of vanavond meteen aan de slag. Wat die weerstand tussen die led betreft dat weet ik en ben ik vergeten te tekenen. Voor de rest is het voor mij allemaal nog een wazig gebied, niet dat dat erg is hoor en ik heb de tijd, ik weet alleen dat ik echt helemaal onderaan moet beginnen en misschien is dit wel een beetje een te hoog gegrepen project?

Maar ik ga idd op jullie advies gewoon met 1 knop beginnen (eigenlijk heb ik ook in werkelijkheid maar 1 knop gebouwd en heb die op diverse poorten geprobeerd maar op poort 4 (geloof ik knippert hij een paar keer, blijft dan heel even branden en gaat dan uit en dat blijft hij doen ook al druk ik wel of niet op de knop en ook alleen maar op poort 4 verder niks.

Dat fotootje van die opgebouwde print heb ik van internet gehaald en van diezelfde persoon stond er ook deze code op dus het hoorde bij elkaar en dat was het begin van het hele project.

Maar nu heb ik 2 vraagjes

  1. Moet ik als ik 1 knop ga maken dan ook alle code eruit halen voor de andere knoppen of maakt dat niet uit?

  2. Ik weet niet of het tekeningetje verder goed is wat ik heb gemaakt en of het uberhoubt zo aan mijn arduino bordje aangesloten kan worden?

  3. Heeft er iemand toevallig een makkelijkere tekening (of kan iemand die heel simpel maken of beschrijven) van alvast 1 knop die wel goed is voor mij?

Ik ben tot dusver heel erg blij met alle hulp want nogmaals ik vind het superleuk maar ben echt een leek (fijn dat er mensen zijn zoals jullie)

beste bulldogrick,

Over je vraag:

  1. Moet ik als ik 1 knop ga maken dan ook alle code eruit halen voor de andere knoppen of maakt dat niet uit?

Code 'even op non-actief' zetten kan op twee manieren: 1. plaats // voor de instructie, bijvoorbeeld:

 // } else if (digitalRead(6) == HIGH) 
 //   playWinner(7);
 // } else if (digitalRead(8) == HIGH)
 //   playWinner(9);
  1. je kan hele blokken 'even op non-actief' zetten door /* ervoor te zetten en */ erna, bijvoorbeeld:
 /* } else if (digitalRead(6) == HIGH) 
      playWinner(7);
    } else if (digitalRead(8) == HIGH) 
      playWinner(9);
*/

Dat helpt enorm bij het ontwikkelen - debuggen van een sketch. // is verder heel handig voor commentaar bij instructies zodat lezers een idee hebben wat zo'n instructie doet of moet doen. Succes, photoncatcher

Of maak even een aparte sketch voor één knop. Het is normaal om een stuk of wat verschillende sketches te hebben om onderdelen uit te proberen, voordat de uiteindelijke sketch gemaakt wordt.

Ken je BasOnTech: https://www.youtube.com/watch?v=HKh-zfgpzGM.

Ja BasOnTech ken ik hebben mooie video's maar nog wel moeilijk Ik ga nu beginnen om een schema van 1 knop te maken met fritzing Maar wat bedoelen jullie met een sketch??? is dat de programmacode of een opzet van de componenten?

De sketch is inderdaad het programma dat je schrijft.

Ik will verder adviseren dat je de knoppen aansluit tussen pin en GND en pinMode(somePin, INPUT_PULLUP) gebruikt in setup(). Dit voorkomt dat je ingang zweeft (floating input) hetgeen gewoonlijk resulteert in varierende waardes als de knop niet is ingedrukt.

Je moet je je in dat geval wel van bewust zijn dat een ingedrukte knop als LOW leest inplaats van HIGH.

Dit is wat ik nu heb getekend en geprogrammeerd Klopt dit allemaal zo???

Quiz Knoppen_bb.png|2103x1296

Quiz Knoppen_pcb.png|1005x687

Quiz Knoppen_schema.png|1089x717

Het ziet er correct uit. Ik zie dat je een pull-down weerstand gebruikt en dat is OK; in dat geval is je logica niet omgedraaid.

Je laatste plaatje (schema) is voldoende; de andere plaatjes hebben we niet nodig (en die kun je in het vervolg weg laten).

en dit is nu mijn programma. ik weet niet of dat het zo goed is!!! waarom staat Serial.begin(9600); eigenlijk niet aan? en kan ik die wel inschakelen want waar is deze voor?

int DELAY = 3500;

void setup() {
  //Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, INPUT);
  pinMode(5, OUTPUT);
  pinMode(6, INPUT);
  pinMode(7, OUTPUT);
  pinMode(8, INPUT);
  pinMode(9, OUTPUT);
}

void playWinner(int pin) {
  for (int i = 0; i < 8; i++) {
    digitalWrite(pin, HIGH);
    delay(75);
    digitalWrite(pin, LOW);
    delay(75);
  }
  digitalWrite(pin, HIGH);
  delay(DELAY);
  digitalWrite(pin, LOW);
}

void loop() {
  if (digitalRead(2) == HIGH) {
    playWinner(3);
  } else if (digitalRead(4) == HIGH) {
    playWinner(5);
  } else if (digitalRead(6) == HIGH) {
    playWinner(7);
  } else if (digitalRead(8) == HIGH) {
    playWinner(9);
  }
}

Hoi Sterretje

Jij schreef:
Ik will verder adviseren dat je de knoppen aansluit tussen pin en GND en pinMode(somePin, INPUT_PULLUP) gebruikt in setup(). Dit voorkomt dat je ingang zweeft (floating input) hetgeen gewoonlijk resulteert in varierende waardes als de knop niet is ingedrukt.

betekend dat dat mijn tekening goed is maar dat ik dan in mijn sketch dus iets moet veranderen?
en zo ja wat moet er dan precies in mijn sketch komen te staan?

Yes tot dusver werkt het en...... met 4 knoppen ik heb alleen nog 1 vraag! Moet ik tussen elke knop een weerstand van 10K plaatsen of kan ik 1 weerstand van 10K in de ground van het arduino bordje plaatsen en dan aan de andere kant van de weerstand de vier knoppen plaatsen? Snappen jullie wat ik bedoel?