Tombola is a traditional Italian board game that is usually played with the family during the Christmas holidays. Bingo is a game of chance played all over the world (in the USA the game is played with 75 numbers).
We program with Arduino a sketch that implements a C function that generates a succession of 90 bingo or tombola numbers. To test the feature of this function, each time you press a button (with debounce) the software prints a new number. The extraction of numbers can also be carried out with automatic extraction, for example every 5 seconds inside the loop(). The circuit diagram is minimal, as you can see in the figure.
In the sketch shown, the proposed function int* getNumbers() returns the pointer to the memory location *RAMlocation from which the vector of the extracted numbers, called bingo[90], is stored. Each time you press a button (with debounce), connected to pin 4, the software prints a new, not yet extracted, number.
/* Function that generates a sequence of 90 bingo numbers. Each time you press a button (with debounce) the software prints a new number */ #define pushButton 4 int bingo[90]; int *RAMlocation; int i; int presentState, previousState=0; int* getNumbers(){ static int numbers[90], extractedNumber; int i=0,k; randomSeed(analogRead(0)); bool alreadyExtracted; do { alreadyExtracted = false; extractedNumber = random(1, 91); for (k=0; k<i;k++) { if (extractedNumber == numbers[k]) { alreadyExtracted = true; } } if (alreadyExtracted == false) { numbers[i]=extractedNumber; i++; } } while(i<90); return (&numbers[0]); }
void setup(){ Serial.begin(9600); RAMlocation = getNumbers(); for (i = 0; i < 90; i++) { bingo[i]=*(RAMlocation + i); /* The following two lines are for debugging: you can remove them */ Serial.print(bingo[i]); Serial.print(" "); } Serial.println(); pinMode(pushButton, INPUT); i=0; } void loop() { presentState=digitalRead(pushButton); if ((presentState==1) && (previousState==0)) { Serial.print(bingo[i]); Serial.print(" "); i++; } previousState=presentState; }
Here you can find the simulation of the Arduino sketch with Tinkercad: Tombola function (Bingo). I also propose a simple code in ANSI C that you can try with Ideone: tombola.c or other C compiler.
#include <stdio.h> #include <stdlib.h> int tombola[90], estratto; int i=0,k; int giaestratto; // boolean< int mainvoid) { srand(time(NULL)); do { giaestratto=0; estratto = rand()%90+1; for (k=0; k<i;k++) { if (estratto == tombola[k]) { giaestratto=1; } } if (giaestratto==0) { tombola[i]=estratto; printf("\t%d",tombola[i]); i++; } } while(i<90); }