keuze's laten maken

Hallo hier een newbie,

Ik wil graag een arduino schakeling maken met als doel na het drukken op een knop gaat er random een LED branden. ( keuze uit 3 ) Nu had ik deze gevonden:

http://arduino.sundh.com/2012/11/decision-maker-with-leds/

Deze nagemaakt maar werkt niet. Kan iemand me helpen met dit aub Dit is wel wat ik graag zou willen

Hallo duitsman, en welkom.

Als je wil dat mensen je helpen, moet je ze zoveel mogelijk informatie geven.
Een linkje met de mededeling "die doet het niet", levert nauwelijks iets op waaraan iemand je van zinnige informatie kan voorzien.
Vertel eens welke Arduino je gebruikt, en welke IDE versie.
Krijg je een foutmelding in de IDE, ?
Heb je getest of iets anders wel werkt ? (zoals de blink sketch), ook als je 'm aanpast zodat ie een andere pin gebruikt en dan dus een LED die je ook voor je decisionmaker wil gebruiken ?

Oke hier gaat ie dan,

Ik maak gebruik van de uno en heb al diverse schakelingen gemaakt die werken. Op de eerder gegeven link staat een filmpje en het programma maar dat krijg ik niet werkend. Ik heb al andere uitgangen geprobeerd enzo maar als ik naar het programma kijk wat er bij zit snap ik niet waarom het bij mij niet werkt. Ik ben nog niet zover dat ik dit alles al weet dus vandaar de vraag. Ik hoop dat iemand me kan helpen.

Ik krijg geen foutmeldingen. Het programma werkt ook wel wat als ik de schakelaar er tussen uit haal krijg ik random ledjes die branden alleen werkt het geheel dus niet met de schakelaar er tussen. Deze is wel goed want als ik de standaard button pak uit arduino werkt deze wel oké.

POst je programma code, mischien is het een typefuot eh fout :wink:

int timeShowRandom = 1000;
int timeShowDecision = 3000;
int timeBlink = 50;
int analogPin = A0;
 
int buttonPress = false;
int randomNumber;
int previousNo = 0;
int timePassed = 0;
 
void setup() {    
  // Set output pins  
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
}
 
void getRandomNo() {
  int rand = random(11,14);
  if(rand == previousNo) {
    getRandomNo();
  } else {
    randomNumber = rand;
    previousNo = randomNumber;
  }
}
 
void loop() {
  // Check if button is pressed
  if(analogRead(analogPin) > 10 && buttonPress == false) {
     buttonPress = true;
  } if(buttonPress == true && timePassed <= timeShowRandom) {
    getRandomNo(); // Get random pin number
    digitalWrite(randomNumber, HIGH);
    delay(timeBlink);  
    digitalWrite(randomNumber, LOW);
    delay(timeBlink);  
    timePassed = timePassed + (timeBlink * 2);
  } else if(buttonPress == true) {
    digitalWrite(random(11,14), HIGH); // Set random pin on
    delay(timeShowDecision); // For x seconds
    buttonPress = false; // Set button to be enabled again
    timePassed = 0;
  } else {
    // Reset all output pins
    digitalWrite(11, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
  }    
}

Los van "het werkt niet" is het geen goed idee om pin 13 te gebruiken.
Zoals je in het filmpje ook duidel?k kan zien is de led op pin 13 minder klaar. Dat komt omdat op pin 13 al een weerstand en led zit.
Met vriendelijke groet
Jantje

duitsman:
Het programma werkt ook wel wat als ik de schakelaar er tussen uit haal krijg ik random ledjes die branden alleen werkt het geheel dus niet met de schakelaar er tussen. Deze is wel goed want als ik de standaard button pak uit arduino werkt deze wel oké.

Het is me niet duidelijk wat je hiermee bedoelt.
Heb je een schakelaar gebruikt zoals afgebeeld en heb je die ook op een breadboard geplaatst ?
Je hebt toch niet de schakelaar 90 graden gedraaid ?
Want dan is het contact altijd aan.

Verder kun je zelf uitvinden wat er allemaal gebeurt, maar daarvoor moet je wel wat werk verrichten.
Dan zou je een seriële verbinding moeten opzetten en daarop bij elke stap in je programma (in het void loop gedeelte) iets vertellen via die seriele verbinding.
Je kunt in de IDE bij extra - Seriële-monitor een schermpje openen zodat je dan ziet wat er allemaal voorbij komt.
Je kunt ook elke stap nog vertragen door een delay in te bouwen zodat je ook nog kunt volgen wat er gebeurt want anders komen de stappen erg snel voorbij.
Dit is een heel goede manier van debuggen want je ziet gewoon wat er allemaal gebeurt.

Zo kun je na het registreren van een ingedrukte toets, melden dat je dat gezien hebt (en anders dat je ziet dat ie niet is ingedrukt bijvoorbeeld).
En elke keer als je een variabele bewerkt, het resultaat versturen.

Als je je sketch eenmaal aan het werken hebt kun je natuurlijk alle seriële verbinding toestanden en de extra delays er weer uit slopen.

Met " het werkt niet bedoel ik het volgende:

Je ziet in het schema een zwarte draad getekend. Als ik die draad los haal begint het programma te lopen en gaat er dus inderdaad random een led branden. Dit blijft het programma ook herhalen. Er gaat een random led branden, daarna blijft deze een aan en er gaat daarna een andere ( of dezelfde ) led branden. Wat er dus niet gebeurd is dat de loop pas gaat lopen nadat ik de schakelaar indruk. De schakelaar is wel ok.

En van die poot 13 dat wist ik inderdaad maar toch bedankt voor de hulp.

Dat is dan ook je probleem.

De zwarte draad verbindt je ingang van de Uno met GND.
Dat doet ie niet als je dat wenst, maar altijd.
Je hebt dus het schema niet correct aangehouden.
Om het te laten werken, dien je de groene draad aan A0 aan de andere kant van de weerstand aan te sluiten.
Als de waarde van die weerstand correct is afgebeeld (220 Ohm), dan is ie bovendien een beetje aan de lage kant, maar het zal vast wel werken.
Beter dat je er 10 K (bruin zwart oranje) ofzo van maakt.

Overigens is het ook raar dat je hiervoor een analoge waarde gaat gebruiken.
Dat is helemaal niet noodzakelijk, te ingewikkeld om je doel te bereiken en daarom niet efficiënt.
Maar ik raad je eerst aan de zaken werkend te maken en dan pas verder te kijken naar verbeteringen.

Dat het ding spontaan gaat staan werken wanneer je die zwarte draad losneemt klopt ook precies.
Op dat moment hangt de ingang wel aan een weerstand maar die weerstand hangt nergens aan als de schakelaar niet is ingedrukt.
Dan krijg je dus een ongedefinieerde toestand op je ingang en kan zeer zeker overeen komen met jouw voorwaarde om te starten ( if(analogRead(analogPin) > 10 && buttonPress == false) ).

Nou je schema heb je schijnbaar wel goed aangehouden, maar de site waar je het vandaan hebt, heeft haar eigen bronnen niet gecheckt.
Zowel Jantje als ik hebben daar vandaag een reactie achtergelaten naar aanleiding van jouw vragen.
Ellen kan dus haar pagina gaan aanpassen, want er zijn een aantal manieren om te bereiken wat er daar geleerd kan worden maar dan moet er eerst getest worden of de informatie wel klopt.
Anders bestaat de les uit het oplossen van een probleem, zoals jij nu ervaart.
Kan heel leerzaam zijn maar ik vermoed dat dat niet de opzet was ;).

Ik heb nog eens goed gekeken naar het filmpje.
De schakeling in het filmpje is functioneel wel zoals op het schema. Het verschil is dat er een andere GND gebruikt wordt.
Omdat de code zegt

analogRead(analogPin) > 10

is een kleine puls van 5/1024*10=0.05 Volt veroorzaakt door het sluiten van de schakelaar al voldoende om de code te doen werken.
Heel wat factoren spelen hier mee. Het makkelijkst te begrijpen is dat iets meer weerstand in de draad of schakeling het verschil tussen werken of niet werken.
De schakeling kan dus veel beter

  1. de groene draad naar de andere kant van de weerstand maakt de schakeling robuust.
  2. geen gebruik maken van pin 13 maak dat de leds allemaal even hard branden (dit betekend code aanpassen)
  3. Geen analoge pin (die zijn zeldzaam en traag) maar een digitale pin (dit betekend code aanpassen)

Met vriendelijke groet
Jantje

duitsman
Ik heb nog effe verder gekeken op de site. Ik raad af om die te gebruiken. Reden: te weinig uitleg en teveel fouten.
Met vriendelijke groet
Jantje

OMFG.

Ik heb de site ook maar even nader bekeken.
Schakelaars die verkeerd bedraad zijn (fritzing geeft nog aan welke pennen gebruikt kunnen worden maar degene die de schakeling heeft getekend wist niet waar naar te kijken).
Een relais dat bediend word met de Arduino maar altijd bekrachtigd is totdat die Arduino 'm in wil schakelen en dan de voeding kortsluit.

Leuk initiatief, maar waardeloos omdat de samensteller zelf de zaken niet getest heeft en blijkbaar helemaal niet weet waar ie mee bezig is.
Zeer zeker niet aan te raden dus, die site.

Ik heb maar ff een aangepaste Fritzing sketch gemaakt:
(klik erop om m te vergroten)

Edit: formaat plaatje aangepast.

Goedemorgen!

Thanks for bringing my circuits to attention.
I have updated the sketch of decision making now. I will look through all my examples on the site and test them again.

Best, Ellen

Oke dank jullie wel allemaal, Zo zie je maar weer hoe nuttig het internet kan zijn. Nadat ik gisteravond nog aan het knutselen was met arduino heb ik voor een tijdelijke andere oplossing gekozen ( dobbelsteen en daar code uit gehaald) Toch ben ik blij dat ik door jullie nu wat meer geleerd heb en zal dadelijk de keuzemaker nog eens maken.

Ik ben in ieder geval blij met de hulp die geboden is. Nogmaals bedankt.

Ik denk dat er een slotje op kan.

Groet Jorg