Klopt dit was ook wel een levenswerk maar ik ben gepensioneerd en wil mooie dingen maken. Het grote soort schoolbord had ik al eerder gemaakt en werkte op een 6802 processor. Nu heb ik kennis genomen van de aduino's en ik wil spraak en controlelampjes.
Hieronder de code. Als je die assembleert krijg je geen foutmeldingen. Drivers voor DFminiplayer uiteraard nodig. Alle bingogetallen correct genummerd en ingesproken op de DF kaart
----------------------------
/*
msb
PGFEDCBA
0b00111111 - 0
0b00000110 - 1
0b01011011 - 2
0b01001111 - 3
0b01100110 - 4
0b01101101 - 5
0b01111101 - 6
0b00000111 - 7
0b01111111 - 8
0b01100111 - 9
*/
#include "Arduino.h"
#include "DFRobotDFPlayerMini.h"
#define mp3_player_busy 7
#define CLK 8 // to alle MM5451 pin 21
#define dataBit 12 // to MM5451 pin 22
#define dataBitA 9 // to MM5451 pin 22
#define dataBitB 10 // to MM5451 pin 22
#define dataBitC 11 // to MM5451 pin 22
DFRobotDFPlayerMini myDFPlayer;
// 7-segment display code array
byte segCode[] = {
0b00111111, 0b00000110, 0b01011011,
0b01001111, 0b01100110, 0b01101101,
0b01111101, 0b00000111, 0b01111111,
0b01100111
};
byte tienen = 0; //tientallen
byte myCount = 1; //bingogetal
int MIN = 1; int MAX = 91; // Range of Bingo numbers.
bool getal [91]; //de array van de bingonummers heet getal
int mapnaam = 1 ; // taalkeuze
int teller;
int bits;
void setup() {
pinMode(mp3_player_busy, INPUT_PULLUP);
pinMode(CLK, OUTPUT);
pinMode(dataBit, OUTPUT); // Decoder grote displa
pinMode(dataBitA, OUTPUT); //Decoder 1ste 35 LEDs
pinMode(dataBitB, OUTPUT); //Decoder 2de 35 LEDs
pinMode(dataBitC, OUTPUT); //Decoder laatste 20 LEDS +14 voor cijferlampjes op paneel 1 over
digitalWrite(CLK, 0);
digitalWrite(dataBit, 0);
digitalWrite(dataBitA, 0);
digitalWrite(dataBitB, 0);
digitalWrite(dataBitC, 0);
Serial.begin(9600);
DFRobotDFPlayerMini myDFPlayer;
// Zero out array that will hold Bingo numbers.
for (teller = 0; teller < 91; teller++) {
getal[teller] = false;
}
delay (3000);
Serial.println ("bingo getallen clear");
teller = 0;
if (!myDFPlayer.begin(Serial)) { //Use softwareSerial to communicate with mp3.
Serial.println("Unable to begin:");
}
// myDFPlayer.EQ(DFPLAYER_EQ_BASS); /*----Set different EQ----*/
// delay(250);
myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); /*----Set device we use SD as default----*/
delay(250);
myDFPlayer.volume(40); //Volume 40
delay(250);
Serial.println("Initializing DFPlayer ... (May take 3~5 seconds)");
myDFPlayer.playFolder(1, 91); //"bingo computer ingesteld op 90"//
delay (1000);
while ((digitalRead(mp3_player_busy) == 0))
delay (300);
}
// the loop routine runs over and over again forever:
void loop() {
//Getalen generator
do
{ myCount = random( MIN, MAX );
}
while (getal[myCount] == true) ;
(getal[myCount] = true) ;
/////////////////
delay (1000);
///////ALS IN DE LOOP DE SPAAK AAN STAAT WORDT DIT NIET EENS ZICHTBAAR OP DE MONITOR
Serial.println(myCount);
///////HIER ZIT HET PROBLEEM
myDFPlayer.playFolder(1, myCount); //"bingo getal wordt uitgesproken 90"//
delay (1000);
while ((digitalRead(mp3_player_busy) == 0))
delay (300);
//////////////////
//tientallen en eenheden splitsen//
tienen = myCount / 10 ;
///////////////////////////////////////////
/////////////lampjes 1 tot 35//////////////
//////////////////////////////////////////
//Part A 1-35//
digitalWrite(dataBitA, 1);
digitalWrite(dataBitB, 0);
digitalWrite(dataBitC, 0);
pulseCLK(); //startbit
for (bits = 1; bits < 36; bits++) {
if (getal[bits] == true) {
digitalWrite(dataBitA, 1);
}
if (getal[bits] == false) {
digitalWrite(dataBitA, 0);
}
pulseCLK();
}
////////part B 36 - 70 ///////////////
digitalWrite(dataBitA, 0);
digitalWrite(dataBitB, 1 );
digitalWrite(dataBitC, 0 );
pulseCLK(); //startbit
for (bits = 36; bits < 71; bits++) {
if (getal[bits] == true) {
digitalWrite(dataBitB, 1);
}
if (getal[bits] == false) {
digitalWrite(dataBitB, 0);
}
pulseCLK();
}
//////////Part C 71-90 en cijferlampjes /////////////
digitalWrite(dataBitA, 0);
digitalWrite(dataBitB, 0 );
digitalWrite(dataBitC, 1);
pulseCLK(); //startbit
for (bits = 71; bits < 91; bits++) {
if (getal[bits] == true) {
digitalWrite(dataBitC, 1);
}
if (getal[bits] == false) {
digitalWrite(dataBitC, 0);
}
pulseCLK();
}
//Nog 15 pulsen over. 14 pulsen voor LED display
////////// output LED display////////////
ssrWriteLSBLED(segCode[myCount % 10]); // MOD myCount = 0-9
ssrWriteMSBLED(segCode[tienen % 10]); // MOD myCount = 0-9
//1 puls over
digitalWrite(dataBitC, 0);
pulseCLK();
pulseCLK();
////////// output grote display////////////
// start bit
digitalWrite(dataBit, 1);
pulseCLK();
ssrWriteLSB(segCode[myCount % 10]); // MOD myCount = 0-9
ssrWriteMSB(segCode[tienen % 10]); // MOD myCount = 0-9
zeroWrite(22);
randomSeed(micros()); // Reseed number generator.
} // end loop
///////////Clockpuls maken ////////////
void pulseCLK() {
digitalWrite(CLK, 1);
delay (2);
digitalWrite(CLK, 0);
}
//Voor output grote display //////
// LSB out first!
void ssrWriteLSB(byte value) {
for (int x = 0; x < 7; x++) {
byte temp = value & 0x01;
if (temp == 0x01) digitalWrite(dataBit, 1); // data bit HIGH
else digitalWrite(dataBit, 0); // data bit LOW
pulseCLK();
value = value >> 0x01; // shift left
}
}
// LSB out first!
void ssrWriteMSB(byte value) {
for (int x = 0; x < 7; x++) {
byte temp = value & 0x01;
if (temp == 0x01) digitalWrite(dataBit, 1); // data bit HIGH
else digitalWrite(dataBit, 0); // data bit LOW
pulseCLK();
value = value >> 0x01; // shift left
}
}
//voor output kleine display
void ssrWriteLSBLED(byte value) {
for (int x = 0; x < 7; x++) {
byte temp = value & 0x01;
if (temp == 0x01) digitalWrite(dataBitC, 1); // data bit HIGH
else digitalWrite(dataBitC, 0); // data bit LOW
pulseCLK();
value = value >> 0x01; // shift left
}
}
// LSB out first!
void ssrWriteMSBLED(byte value) {
for (int x = 0; x < 7; x++) {
byte temp = value & 0x01;
if (temp == 0x01) digitalWrite(dataBitC, 1); // data bit HIGH
else digitalWrite(dataBitC, 0); // data bit LOW
pulseCLK();
value = value >> 0x01; // shift left
}
}
void zeroWrite(byte num1) {
digitalWrite(dataBit, 0); // data bit LOW
for (int x = 0; x < num1; x++) pulseCLK();
}