Hulp gezocht bij arduino programma

Hallo, ik ben Swen en ik heb op school een basis cursus Arduino gehad. Ik wil nu een project maken met een Arduino aansturing. Het programma moet een Random nummer kiezen tussen 0 en 7. Hij mag hier geen nummer 2 x kiezen tot alle nummers zijn geweest. De nummer moeten op een random tijdsinterval gekozen worden. Het programma werk in een seriële monitor alleen nou krijg ik er geen uitgang mee aangestuurd. Kan iemand mij hier bij verder helpen. Zie bijlage voor programma.
Alvast bedankt.

Hello, my name is Swen.
I have followed a basic Arduino class and now I want to make a School project that is Arduino controlled. The program is supposed to be choose a number between 0 and 7.
The program can’t pick a number that it already picked until all the number have been selected. Every number has to be picked at a random time interval. Those function are currently working in the seriële monitor. But I can’t get the number I see in the serial monitor to connect with a digital output. Can someone help me with this problem. See the Appendix for the program.
Thanks in advance.

Er is in het programma nergens sprake van digitale outputs, dus het werkt correct.. (?)

Is dit een schoolvraag ? Er zijn 1001 denkbare manieren om nummers naar digitale uitgangen te zenden. Kun je formuleren wat je zou willen en al geprobeerd hebt ?

Beetje tegenstrijdige eisen. Als het cijfer echt random is dan kan je best wel meerdere keren hetzelfde cijfer kiezen. En als dat niet mag dan is het niet echt random.

Als je gaat dobbelen kan krijg je soms ook wel eens 3 keer achter elkaar hetzelfde cijfer.

En But[8] is een array met 8 posities. Dan moet je wel zorgen dat je een index gebruikt binnen de grenzen van die array, tussen 0 t/m 7.

[Bericht gewijzigd door deKees op maandag 15 januari 2018 19:51:16 (21%)

Aart het klopt dat er nog nergens sprake is van een digitale output maar deze moet nog wel komen. Het programma wat je ziet is het enigste dat werkt dus een kale versie.

Het is niet een school vraag maar het uiteindelijke project is wel voor school.

Het idee is dat we een oud Hollands spel na maken het wel bekende ijspegel vangen. Dit moet nadat je een start signaal geeft volledig automatische. Vandaar dat de besturing niet 2x het zelfde getal mag kiezen omdat die ijspegel dan al gevallen is.

Waar ik hopen achter te komen is hoe ik van uit de waarden die ik in de seriële monitor zie ( dus de 0 tot en met 7 ) een idigitale poort kan aansturen om een ijspegel te laten vallen.
Het probleem is dat ik de waarden die ik in de seriële monitor zie niet terug kan koppelen aan een uitgang waar mee ik de ijspegel kan laten vallen

Ik heb al geprobeerd om de waarden [X] met een poort te laten comminuseren.
Ook heb ik het met een andere benaming geprobeerd zoals But en But X.
Alleen zodra ik hem probeer te verifiëren dan komen er error’s in.

LetterHenk

Golden Member

Dag Swendc,

Kijk eens naar het switch statement. Switchen op je random variabele en zo de outputpinnen besturen.

Action expresses priorities LH

code:

pinMode(13, OUTPUT);       
digitalWrite(13, HIGH);   
delay(1000);                  
digitalWrite(13, LOW);

Dit onder de laatste delay zetten.

'13' vervang je door '4+but[x]' al je bv pin 4 tm 11 wil gebruiken.

Die while lus kan echt niet! Maak die regel eens met 4000 nummers ;)

GJ_

Moderator

Op 15 januari 2018 20:05:41 schreef Swendc:
Het is niet een school vraag maar het uiteindelijke project is wel voor school.

??

Op 16 januari 2018 14:25:16 schreef GJ_:
[...]??

Kan toch iets voor een klassenavond o.i.d. zijn? Ik heb op school ook wel eens een quizbord gemaakt zodat degene die het snelste op de knop drukte mocht antwoorden. Kreeg je geen cijfer voor ofzo, was gewoon voor de fun.

Ontopic:

Ik heb je programma iets veranderd zodat het, denk ik, wat overzichtelijker voor je wordt. Nu moet het wel lukken hoop ik.

c code:


void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(0));
}

void loop() {
  byte ijspegels = 0b11111111; 			// van deze byte gebuiken we bit 0 t/m 7 als geheugen voor welke pegels al gevallen zijn
  while (ijspegels) {			        // dit doen zolang 'ijspegels' > 0 is. (Als alle bits op nul staan is 'ijspegels' uiteraard ook nul)
    byte loslaten = random(8);			// creer een nummer van 0 t/m 7 
    if (bitRead(ijspegels, loslaten)) { 	// kijk of deze pegel al is gevallen, als dit bit op 1 staat is hij dus nog niet gevallen
      bitClear(ijspegels, loslaten);		// bit op 0 zetten, zodat deze pegel niet nog een keer gekozen kan worden.
      unsigned long randNumber = random(500, 4000);
      Serial.println(randNumber);
      Serial.print("Pegel = "); 
      delay(randNumber);
      Serial.println(loslaten);
      // verzin hier je code om de uitgang(en) te besturen
      // hou er rekening mee dat de 8 pegels via 'loslaten' zijn genummerd van 0 t/m 7 en dus niet van 1 t/m 8
    }
  }
  Serial.println("---------------------");
  delay(1000);
}

K7Jz ik heb deze code geprobeerd alleen nou word een poort aangestuurd nadat de random getallen gekozen zijn dus dit is niet de oplossing waar ik naar opzoek ben. Toch bedankt voor het meedenken.

BVZ ik ga morgen proberen of ik het kan laten werken ??
Het ziet er idd overzichtelijker uit ik zal jullie morgen op de hoogte houden of het gelukt is!