led + button + random

Hallo,

kan er iemand mij helpen, ik zoek een code voor een schakeling nl
3 leds en 3 drukknoppen en een arduino uno
bedoeling is led brand bij druk op knop led uit ieder afzonderlijk.
tot zover lukt dit wel,met 1 led en knop maar nu zou ik die random willen laten werken, en daar begint mijn probleem.

Hoi Frank, welkom.

Ik denk dat er bij het plaatsen van je bericht iets mis is gegaan.
Je kondigt een probleem aan, maar dan is je verhaal ineens afgelopen.
Dus wat is je probleem ?

Verhaal is inderdaad niet echt af nee. Maar in de verte klinkt het heel erg als:

Engels maar niet heel lastig. Als het echt een probleem is moet je maar vragen, dan volgt een vertaling.

er bestaat een random functie zet die op 3
array maken boolean led[4]
en dan is het dus led[random(4)]= drukknop1
etc.

  1. Zonder seed eindig je dan toch steeds met hetzelfde
  2. Als je random elke led aan een schakelaar koppelt heb je de kans dat alle schakelaars 1 led doen of alle leds werken op 1 schakelaar (afhankelijk van hoe je toewijst). Kan de bedoeling zijn natuurlijk. Maar 3 ledjes 3 schakelaars klinkt meer alsof je het door de war wilt halen.

hallo,

eigenlijk heb ik mijn probleem een beetje slecht gesteld.

mijn hobby is eigenlijk airsoft en ik ben op zoek naar een elektrisch target systeem dwz

een target waarbij een led brand en als het target wordt geraakt deze led uitschakelt, en dit voor drie verschillende targets waarbij de eerste target een willekeur is van de drie, als deze is geraakt één van de twee volgende en tenslotte de derde tot deze allemaal zijn geraakt.
nu het schema en de code voor de schakeling afzonderlijk lukt wel maar ik weet niet hoe met een random code.

ben wel maar net met arduino bezig

grt frank

Ik denk dat je er goed aan doet om dit eens goed door te nemen: http://www.arduino.cc/en/Reference/Random
En dan met name ook nog eens randomSeed(). Als je random aanroept krijg je vrijwel een zelfde sequence van de getallen. De RandomSeed() verstoort dat proces. Voor seed heb je dus iets nodig wat elke keer als je opstart anders is. Zij doen zelf een voorstel om bijvoorbeeld een analoge poort zwevend te laten en dan die waarde te nemen. Als je nu een analogPoort zou lezen zonder dat er iets aanhangt is krijg je elke keer een andere waarde. Dus eigenlijk is dat je random waarde terwijl random() op basis van die willekeurige seed de waarden normaliseert tussen de minimale en maximale waarde.
Ik zou gewoon eens een test programmatje maken om ff te spelen met de random en randomSeed om er een beetje een gevoel bij te krijgen.

Wat Nico zegt over random() en randomSeed() is dan inderdaad erg nuttig. Verder is waar ik in mijn vorige bericht naar linkte ook nog steeds erg handig. Ik denk dat 90% daarvan wel bruikbaar is hiervoor namelijk :smiley:

Nog twee vraagstukken om het af te maken (misschien weet jij het al in je hoofd maar zeg je het niet of je hebt er nog niet aan gedacht)

  • Je hebt 3 targets en je wil 3 keer een target moeten raken. Moeten dit altijd alle 3 de targets zijn alleen in een random volgorde of is 3 keer een random target ook goed?

  • Goed, je hebt het hele "raak targets"-verhaal. Maar wat moet er gebeuren als je dat gedaan hebt? Gelijk opnieuw beginnen? Even wachten? Niets? De laatste link in je omschrijving mist zeg maar nog :slight_smile:

dit is hetgene dat ik heb gemaakt, nu het enig probleem is dat de led in het begin high is en als ik raak LOW is. als de 3 targets zijn geraakt zou hij moeten gereset kunnen worden.

ik hoop dat mijn attachment ook is mee verstuurd want daar staat de code en schema op

mvg
frank

Plaatje (klik er op om m te downloaden):

2d0457cf6c23b6eb4055de379eacc388c7801090.jpg

Schema uploaden van je opstelling is goed. (Zie het even door de vingers dat het een irritante Fritzing is.) Code tonen is ook goed. Maar code in een plaatje tonen, auwww :confused: Hoe moet ik dat nu kunnen aanpassen dan? Het is gewoon tekst dus plak deze gewoon p het forum. Doe dat wel tussen code-tags (</> in het menu).

begin eens met een random getal maken int getal= random(3);

dan if getal==1 dan led1
if getal==2 led2
etc.

ja ik weet er is ook nog array en case, maar eerst eens beginnen.
en rustig steeds stapje voor stapje daar leer je het beste van.

Nouwja, ik zou eigenlijk eens beginnen met arrays. Scheelt je gewoon al het werk wat je nu 3 keer doet... Het is niet voor niets Gammons 1e tip: Gammon Tip 1

En weer de note, als je alleen random() gebruikt is de volgorde wel willekeurig maar wel elke keer hetzelfde als je de Arduino opnieuw op start. Om dat te voorkomen moet je dus beginnen met een randomSeed() (van bijvoorbeeld een niet aangesloten ADC).

Het is wel grappig dat veel startende ontwikkelaars zich niet echt verdiepen in de kracht van array's. Ze schrijven liever 10 x IF THEN ELSE statements terwijl de code structuur elke keer hetzelfde is. Maar de reference manual doornemen van de Arduino kost tijd......

ik probeer te testen met 123D circuits, maar zijn er andere programma's die beter zijn en waar je je schema's en code's kunt testen?

mvg

frank

ben aan het proberen mijn 3leds en knoppen gewoon afzonderlijk te doen werken 1 led lukt de 2de niet meer
wat doe ik verkeerd ?

de code

int ledPin1 = 9;
int ledPin2 = 8;
int ledPin3 = 10;
int buttonPin1 = 7;
int buttonPin2 = 6;
int buttonPin3 = 5;
int lastButtonState1=LOW;
int lastButtonState2=LOW;
int lastButtonstate3=LOW;
int ledState1=HIGH;
int ledState2=HIGH;
int ledState3=HIGH;

void setup()
{
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
pinMode(ledPin3,OUTPUT);
pinMode(buttonPin1,INPUT);
pinMode(buttonPin2,INPUT);
pinMode(buttonPin3,INPUT);
}
void loop()
{

int buttonState1 = digitalRead(buttonPin1);

if(buttonState1==LOW&& buttonState1!=lastButtonState1)
{

if(ledState1==LOW)
{
ledState1=HIGH;
}
else
{
ledState1=LOW;
}
}

digitalWrite(ledPin1, ledState1);
lastButtonState1=buttonState1;
delay(20);
}
int buttonState2 = digitalRead(buttonPin2);

if(buttonState2==LOW&& buttonState2!=lastButtonState2)
{
if(ledState2==LOW)
{
ledState2=HIGH;
}
else
{
ledState2=LOW;
}
/

digitalWrite(ledPin2,ledState2);
lastButtonState2=buttonState2;
delay(20);
}
}

mvg
frank

frankdewispelaere1:
wat doe ik verkeerd ?

Dat je de code niet in tags zet, zoals eerder in deze thread toegelicht, en ook in de forum gebruiksaanwijzing (klik !) vermeld is.

int ledPin1 = 9;
int ledPin2 = 8;
int ledPin3 = 10;
int buttonPin1 = 7;
int buttonPin2 = 6;
int buttonPin3 = 5;
int lastButtonState1=LOW;
int lastButtonState2=LOW;
int lastButtonstate3=LOW;
int ledState1=HIGH;
int ledState2=HIGH;
int ledState3=HIGH;

void setup()
{
  pinMode(ledPin1,OUTPUT);
  pinMode(ledPin2,OUTPUT);
  pinMode(ledPin3,OUTPUT);
  pinMode(buttonPin1,INPUT);
  pinMode(buttonPin2,INPUT);
  pinMode(buttonPin3,INPUT);
}
 void loop()
  {
  
  int buttonState1 = digitalRead(buttonPin1);
    
  if(buttonState1==LOW&& buttonState1!=lastButtonState1)
  {
  
    if(ledState1==LOW)
    {
  ledState1=HIGH;
    } 
  else
  {
   ledState1=LOW;
  }
  }
  
  digitalWrite(ledPin1, ledState1);
  lastButtonState1=buttonState1;
  delay(20);
}
 int buttonState2 = digitalRead(buttonPin2);

 if(buttonState2==LOW&& buttonState2!=lastButtonState2)
 {
if(ledState2==LOW)
  {
ledState2=HIGH;
 } 
else
{
 ledState2=LOW;
}
/

digitalWrite(ledPin2,ledState2);
lastButtonState2=buttonState2;
delay(20);
}
}

Dit doe je door op het code knopje te klikken als je in de uitgebreide editor je bericht typt, of door [code] (plak hier je code) [/code] te doen.

int ledPin = 9;
int buttonPin = 7;
int lastButtonState = HIGH;
int ledState = HIGH;

sorry

heb hier een stuk code gezet, is dit de juiste manier?

mvg

frank

frankdewispelaere1:

int ledPin = 9;

int buttonPin = 7;
int lastButtonState = HIGH;
int ledState = HIGH;




sorry 

heb hier een stuk code gezet, is dit de juiste manier?

mvg

frank

yup

bedankt
zal in het vervolg dit zo verder doen.