Random getal
41 berichten
• Pagina 1 van 5 • 1, 2, 3, 4, 5
Random getal
Hallo allemaal,
Ik ben helemaal nieuw in de wereld van arduino en programeren. Maar het lijkt me leuk om een "spel" te maken.
Een kleine uitleg van het spel:
je hebt een paar ledjes. iedere deelnemer zit bij een eigen ledje en heeft een drukknop. De ledjes gaan random branden en zodra je op je drukknop druk als je lampje aan is blijft jou lampje branden. Gene die als laatste zijn lampje nog niet blijft branden is af.
maar ja nu het probleem, bij het programeren van de arduino (uno) loop ik al vast bij het random laten branden van de ledjes. Ik heb de ledjes aangesloten op poorten 8-13.
Alvast bedankt voor de hulp,
Dedier
Ik ben helemaal nieuw in de wereld van arduino en programeren. Maar het lijkt me leuk om een "spel" te maken.
Een kleine uitleg van het spel:
je hebt een paar ledjes. iedere deelnemer zit bij een eigen ledje en heeft een drukknop. De ledjes gaan random branden en zodra je op je drukknop druk als je lampje aan is blijft jou lampje branden. Gene die als laatste zijn lampje nog niet blijft branden is af.
maar ja nu het probleem, bij het programeren van de arduino (uno) loop ik al vast bij het random laten branden van de ledjes. Ik heb de ledjes aangesloten op poorten 8-13.
Alvast bedankt voor de hulp,
Dedier
Advertisement
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: Random getal
gebruik je de functie random() al ? http://arduino.cc/en/Reference/random
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate
Re: Random getal
Ja daar had ik al naar gekeken maar dat snap ik nog niet helemaal :$.
Mijn code tot nu toe is dit:
int drukKnop = 8;
int drukKnop2 = 9;
int drukKnop3 = 10;
int led = 1;
int led2 = 2;
int led3 = 3;
void setup()
{
pinMode(drukKnop, INPUT);
pinMode(drukKnop2, INPUT);
pinMode(drukKnop3, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop()
{
// Start met random getalletjes (ledjes aan)
if( digitalRead(drukKnop) == HIGH && digitalRead(led) == HIGH)
{
//stop random
}
else
{
// ga door met random
}
Ik hoop dat dit duidelijk is, anders mijn excusses.
Mijn code tot nu toe is dit:
int drukKnop = 8;
int drukKnop2 = 9;
int drukKnop3 = 10;
int led = 1;
int led2 = 2;
int led3 = 3;
void setup()
{
pinMode(drukKnop, INPUT);
pinMode(drukKnop2, INPUT);
pinMode(drukKnop3, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop()
{
// Start met random getalletjes (ledjes aan)
if( digitalRead(drukKnop) == HIGH && digitalRead(led) == HIGH)
{
//stop random
}
else
{
// ga door met random
}
Ik hoop dat dit duidelijk is, anders mijn excusses.
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: Random getal
Hier mee maak je drie random knipperende Led's:
byte r = random(255);
led1 = r & B00000001;
led2 = r & B00000010;
led3 = r & B00000100;
nadeel is dat er ook dat kans (random) bestaat dat een led vrij lang aanblijft.
Mischien wil je meer dat een led kort(vaste tijd) aangaat op random tijdintervallen ?.
byte r = random(255);
led1 = r & B00000001;
led2 = r & B00000010;
led3 = r & B00000100;
nadeel is dat er ook dat kans (random) bestaat dat een led vrij lang aanblijft.
Mischien wil je meer dat een led kort(vaste tijd) aangaat op random tijdintervallen ?.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate
Re: Random getal
Ik ga zo even een proef opstelling maken om te kijken hoe lang ze aan blijven. Maar wat moet je dan precies doen om die tijdsintervallen in te stellen?
Re: Random getal
Okey ik heb nu de opstelling gemaakt. Met de volgende code (ik hoop dat ik hem goed heb ingevoerd :$)
int drukKnop = 8;
int drukKnop2 = 9;
int drukKnop3 = 10;
int led = 1;
int led2 = 2;
int led3 = 3;
void setup ()
{
pinMode(drukKnop, INPUT);
pinMode(drukKnop2, INPUT);
pinMode(drukKnop3, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop()
{
byte r = random(255);
led = r & B00000001;
led2 = r & B00000010;
led3 = r & B00000100;
if(digitalRead(drukKnop) == HIGH&& digitalRead(led) == HIGH)
{
//stop
}
else
{
//doorgaan
}
}
Maar ja nu blijft ledje1 de heletijd aan, ledje 2 heel lichtjes en ledjes 3 gaat nooit aan......
Dus of met het programmeren is wat fout gegaan of met het aansluiten.
int drukKnop = 8;
int drukKnop2 = 9;
int drukKnop3 = 10;
int led = 1;
int led2 = 2;
int led3 = 3;
void setup ()
{
pinMode(drukKnop, INPUT);
pinMode(drukKnop2, INPUT);
pinMode(drukKnop3, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop()
{
byte r = random(255);
led = r & B00000001;
led2 = r & B00000010;
led3 = r & B00000100;
if(digitalRead(drukKnop) == HIGH&& digitalRead(led) == HIGH)
{
//stop
}
else
{
//doorgaan
}
}
Maar ja nu blijft ledje1 de heletijd aan, ledje 2 heel lichtjes en ledjes 3 gaat nooit aan......
Dus of met het programmeren is wat fout gegaan of met het aansluiten.
Re: Random getal
De loop functie wordt nu heel vaak per seconde aangeroepen. Om dit want langzamer te maken kun je bijvoorbeeld een delay aan het eind van de loop functie zetten, bijv delay(100) dat is dan een wachttijd van 100 milli seconden.
De loop wordt dan zo 10 x per seconde aangeroepen. Je kunt dan de delay tijd aanpassen om te kijken wat het beste resultaat oplevert.
De loop wordt dan zo 10 x per seconde aangeroepen. Je kunt dan de delay tijd aanpassen om te kijken wat het beste resultaat oplevert.
- astrofrostbyte
- Berichten: 229
- Geregistreerd: 20 Jan 2013, 12:01
Re: Random getal
Bij programeren kan je het beste wat je wil eerst gewoon eens in een gewone mensentaal sequentie beschrijven, en daarna vertalen naar C.
Het is heel verleidelijk om eerst te programeren en dan pas eens na te denken wat we nu precies willen.
Wat je ook zal merken is dat er vele (goede) methoden zijn om dit spelletje te programeren.
Voorbeeld van één mogelijk oplossing:
- Voor iedere speler een boolean (true/false) opgenomen om aan te geven of hij gewonnen heeft en nog meedoet
Het is heel verleidelijk om eerst te programeren en dan pas eens na te denken wat we nu precies willen.
Wat je ook zal merken is dat er vele (goede) methoden zijn om dit spelletje te programeren.
Voorbeeld van één mogelijk oplossing:
- Voor iedere speler een boolean (true/false) opgenomen om aan te geven of hij gewonnen heeft en nog meedoet
- Code: Alles selecteren
int drukKnop1 = 8;
int drukKnop2 = 9;
int drukKnop3 = 10;
int led1 = 1;
int led2 = 2;
int led3 = 3;
boolean Player1 = true;
boolean Player2 = true;
boolean Player3 = true;
void setup ()
{ pinMode(drukKnop1, INPUT); pinMode(drukKnop2, INPUT); pinMode(drukKnop3, INPUT);
pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT);
}
void loop()
{
delay(100);
if( Player1 )
{ if ( digitalRead(drukKnop1) == HIGH && digitalRead(led1) == HIGH)
{ Player1 = false; //stop player1
}
else
{ digitalWrite(led1, random(255) & B00000001);
}
}
if( Player2 )
{ if ( digitalRead(drukKnop2) == HIGH && digitalRead(led2) == HIGH)
{ Player2 = false; //stop player2
}
else
{ digitalWrite(led2, random(255) & B00000010);
}
}
if( Player3 )
{ if ( digitalRead(drukKnop3) == HIGH && digitalRead(led3) == HIGH)
{ Player3 = false; //stop player3
}
else
{ digitalWrite(led3, random(255) & B00000100);
}
}
if ( !Player1 && !Player2 && !Player3 )
{ // all players done, end of game
}
}//loop
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate
Re: Random getal
Willekeurigheid is iets raars.
Ik gebruik nog wel eens de analoogRead() van een "floating" pin om een willekeurig getal te maken.
Dan rijg ik acht bits aan elkaar tot een byte (0-255)
Een bit word een één als de laatste bit van de analogRead(Ax) ook een 1 is. Anders een nul. (sketch verderop)
Nu heb ik gekeken hoe vaak de getallen 0 - 255 voorkomen. Deze heb ik in een Excel sheet gezet en plaatje gemaakt. Zoals je hieronder ziet omen bepaalde getallen toch vaer voor dan andere getallen. De lijn is niet recht.
Willekeurigheid is iets raars...
Ik gebruik nog wel eens de analoogRead() van een "floating" pin om een willekeurig getal te maken.
Dan rijg ik acht bits aan elkaar tot een byte (0-255)
Een bit word een één als de laatste bit van de analogRead(Ax) ook een 1 is. Anders een nul. (sketch verderop)
Nu heb ik gekeken hoe vaak de getallen 0 - 255 voorkomen. Deze heb ik in een Excel sheet gezet en plaatje gemaakt. Zoals je hieronder ziet omen bepaalde getallen toch vaer voor dan andere getallen. De lijn is niet recht.
Willekeurigheid is iets raars...
41 berichten
• Pagina 1 van 5 • 1, 2, 3, 4, 5
Wie is er online?
Gebruikers in dit forum: Majestic-12 [Bot] en 11 gasten