Bingo reset met knop
5 berichten
• Pagina 1 van 1
Bingo reset met knop
Hallo allemaal,
Ik heb hier een bingo sketch van Rino Wijngaa die gebruik maakt van een lcd en een knop.
Als men op de knop drukt komt er een getal op de lcd, als alle 75 getallen zijn geweest word de bingo gereset.
Nu zou ik graag willen dat als ik bijvoorbeeld 3 seconden lang op de knop druk dat de bingo gaat resetten.
Ik heb ook een stukje code voor een ledje dat gaat branden nadat er 3 sec. lang op de knop gedrukt wordt, zou graag willen weten hoe ik deze code kan combineren met de bingo sketch.
Alvast bedankt!
Hieronder de bingo sketch:
cpp code
En hieronder de knop 3 sec. tellen sketch:
cpp code
Ik heb hier een bingo sketch van Rino Wijngaa die gebruik maakt van een lcd en een knop.
Als men op de knop drukt komt er een getal op de lcd, als alle 75 getallen zijn geweest word de bingo gereset.
Nu zou ik graag willen dat als ik bijvoorbeeld 3 seconden lang op de knop druk dat de bingo gaat resetten.
Ik heb ook een stukje code voor een ledje dat gaat branden nadat er 3 sec. lang op de knop gedrukt wordt, zou graag willen weten hoe ik deze code kan combineren met de bingo sketch.
Alvast bedankt!
Hieronder de bingo sketch:
cpp code
#include <Entropy.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
uint8_t random_byte;
const int button = 2;
const int aantalGetallen = 75;
int buttonState;
int prevButtonState;
int trekkingNummer = 0;
long vorigeBingoGetal = 0;
String vorigeBingoLetter;
long bingoGetal = 0;
String bingoLetter;
int trekking[aantalGetallen+1]; // 0..75, 0=not used
void setup() {
Serial.begin(9600);
lcd.begin (16,2);
pinMode (button, INPUT);
startBingo();
Entropy.initialize();
}
void startBingo() {
vorigeBingoGetal = 0;
bingoGetal = 0;
bingoLetter = "";
vorigeBingoLetter = "";
trekkingNummer = 0;
// trekking schoonmaken
for (int i = 0; i <= aantalGetallen; i++) {
trekking[i] = -1;
}
printToLcd (
"B I N G O",
"Druk op de knop!");
prevButtonState = digitalRead (button);
}
void stopBingo() {
for (int i = 5; i>0; i--) {
printToLcd (
"We zijn klaar!",
"Reset in " + String(i) + " sec."
);
delay(1000);
}
}
void loop() {
buttonState = digitalRead (button);
if (buttonState != prevButtonState && buttonState == HIGH)
{
if (trekkingNummer == aantalGetallen) {
stopBingo();
startBingo();
return;
}
trekkingNummer++;
vorigeBingoGetal = bingoGetal;
vorigeBingoLetter = bingoLetter;
doBlinkOn();
do {
// bingoGetal = random (1,aantalGetallen+1);//
bingoGetal = Entropy.random(1,aantalGetallen+1); // returns a value from 1 to 6
// Serial.println("Trekking " + String(trekkingNummer) + ": " + String(bingoGetal));
} while (trekking[bingoGetal] != -1);
doBlinkOff();
trekking[bingoGetal] = 1; // markeer als geweest
bingoLetter = bepaalBingoLetter(bingoGetal);
if (trekkingNummer==1) {
printToLcd (
"We zijn begonnen",
"Trek. " + String (trekkingNummer) + ") " + bingoLetter + " " + bingoGetal
);
} else {
printToLcd (
"Trek. " + String (trekkingNummer-1) + ") " + vorigeBingoLetter + " " + vorigeBingoGetal,
"Trek. " + String (trekkingNummer) + ") " + bingoLetter + " " + bingoGetal
);
}
delay (500);
}
prevButtonState = buttonState;
}
String bepaalBingoLetter(long getal) {
if (getal <= 15) {
return "B";
} else if (getal <= 30) {
return "I";
} else if (getal <= 45) {
return "N";
} else if (getal <= 60) {
return "G";
} else if (getal <= 75) {
return "O";
}
return "";
}
void printToLcd (String line1, String line2) {
lcd.clear ();
lcd.print (line1);
lcd.setCursor (0, 1);
lcd.print (line2);
}
void doBlinkOn () {
lcd.setCursor (15, 1);
lcd.blink();
}
void doBlinkOff () {
lcd.setCursor (15, 1);
lcd.noBlink();
}
En hieronder de knop 3 sec. tellen sketch:
cpp code
// Arduino IDE 1.6.9
int ledPin = 13;
int buttonPin = 5;
int firsttime = 1;
unsigned long startTime;
unsigned long pressTime;
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop(){
if (digitalRead(buttonPin) == HIGH) {
if (firsttime == 1) {
startTime = millis();
firsttime = 0;
}
pressTime = millis() - startTime;
if (pressTime >= 1) {
Serial.print("Time: ");
Serial.print(pressTime);
Serial.print(" milliseconds ");
Serial.print(int(pressTime / 1000));
Serial.println(" seconds");
}
if (pressTime > 3000) { // 3 sec wachten tot led aangaat
digitalWrite(ledPin, HIGH);
delay(1000);
}
}
else if (firsttime == 0) {
firsttime = 1;
Serial.println("Time: 0 milleseconds; 0 seconds");
digitalWrite(ledPin, LOW);
}
}
Advertisement
Re: Bingo reset met knop
Een link naar de bron: https://github.com/rwijngaa/bingo/blob/master/bingo.ino.
Re: Bingo reset met knop
Pexy schreef:Rino Wijngaa
Moet natuurlijk Rino van Wijngaarden zijn, foutje van mij.
Koepel schreef:Een link naar de bron: https://github.com/rwijngaa/bingo/blob/master/bingo.ino.
Dat is inderdaad de link.
Re: Bingo reset met knop
Je laat niet zien welke poging je hebt gedaan.
De ene sketch maakt gebruik van de StateChangeDetection (https://www.arduino.cc/en/Tutorial/StateChangeDetection), en de andere niet. Dat maakt dat ze niet zomaar samen te voegen zijn. Dus die tweede zal ik maar vergeten. De eerste heeft geen mooie logische structuur in de code. Met name de 'buttonState' en de 'prevButtonState' zijn niet logisch, en dat is nu juist wat nodig is om de 3 seconden toe te voegen (Koepel schudt zijn hoofd, kijkt een beetje triest en zucht eens diep).
1) Voeg drie globale variabelen toe:
cpp code
2) Wijzig de structuur van de loop() en voeg wat dingen toe:
cpp code
3) Verwijder de volgende regel uit de functie "startBingo()":
cpp code
De ene sketch maakt gebruik van de StateChangeDetection (https://www.arduino.cc/en/Tutorial/StateChangeDetection), en de andere niet. Dat maakt dat ze niet zomaar samen te voegen zijn. Dus die tweede zal ik maar vergeten. De eerste heeft geen mooie logische structuur in de code. Met name de 'buttonState' en de 'prevButtonState' zijn niet logisch, en dat is nu juist wat nodig is om de 3 seconden toe te voegen (Koepel schudt zijn hoofd, kijkt een beetje triest en zucht eens diep).
1) Voeg drie globale variabelen toe:
cpp code
// Extra variables to detect if button is pressed for certain time.
unsigned long previousMillis;
const unsigned long timeOut = 3000;
bool timerRunning = false;
2) Wijzig de structuur van de loop() en voeg wat dingen toe:
cpp code
void loop()
{
buttonState = digitalRead (button);
if (buttonState != prevButtonState)
{
if( buttonState == HIGH)
{
timerRunning = true;
previousMillis = millis();
if (trekkingNummer
...
delay (500);
}
else
{
// button has changed and is now low.
timerRunning = false;
}
}
prevButtonState = buttonState;
if( timerRunning)
{
if( millis() - previousMillis >= timeOut)
{
timerRunning = false;
stopBingo();
startBingo();
}
}
}
3) Verwijder de volgende regel uit de functie "startBingo()":
cpp code
prevButtonState = digitalRead(button);
Re: Bingo reset met knop
Koepel, je bent geniaal!
Ik druk 3 seconden lang op de knop en... bingo!
Nouja geen bingo maar een nette reset van het spel.
Ik druk 3 seconden lang op de knop en... bingo!
Nouja geen bingo maar een nette reset van het spel.
5 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 18 gasten