.
Dependencies: mbed C12832 LM75B
Diff: main.cpp
- Revision:
- 0:8bf954873391
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Oct 13 13:51:26 2021 +0000 @@ -0,0 +1,210 @@ +#include "mbed.h" +#include "C12832.h" +#include "pitchs.h" +#include "LM75B.h" + +LM75B sensor(D14, D15); +PwmOut spkr (D6); +DigitalIn up(A2); +DigitalIn down(A3); +DigitalIn left(A4); +DigitalIn right(A5); +DigitalIn center(D4); +C12832 lcd(D11, D13, D12, D7, D10); +enum {CLL,MARIO,JOUE,Sensor} etat = CLL; + +int menu_precedent = MARIO; +char message_precedent[]=" "; + +void mario(){ + +int melody[] = { + NOTE_E7, NOTE_E7, 0, NOTE_E7, + 0, NOTE_C7, NOTE_E7, 0, + NOTE_G7, 0, 0, 0, + NOTE_G6, 0, 0, 0, + + NOTE_C7, 0, 0, NOTE_G6, + 0, 0, NOTE_E6, 0, + 0, NOTE_A6, 0, NOTE_B6, + 0, NOTE_AS6, NOTE_A6, 0, + + NOTE_G6, NOTE_E7, NOTE_G7, + NOTE_A7, 0, NOTE_F7, NOTE_G7, + 0, NOTE_E7, 0,NOTE_C7, + NOTE_D7, NOTE_B6, 0, 0, + + NOTE_C7, 0, 0, NOTE_G6, + 0, 0, NOTE_E6, 0, + 0, NOTE_A6, 0, NOTE_B6, + 0, NOTE_AS6, NOTE_A6, 0, + + NOTE_G6, NOTE_E7, NOTE_G7, + NOTE_A7, 0, NOTE_F7, NOTE_G7, + 0, NOTE_E7, 0,NOTE_C7, + NOTE_D7, NOTE_B6, 0, 0 +}; + +int noteDurations[] = { + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 9, 9, 9, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, + 9, 9, 9, + 12, 12, 12, 12, + 12, 12, 12, 12, + 12, 12, 12, 12, +}; + + for (int thisNote = 0; thisNote < 52; thisNote++) { + int noteDuration = noteDurations[thisNote]; + spkr.period(1.0/melody[thisNote]); + spkr=0.25; + wait(1.0/noteDuration); + int pauseBetweenNotes = noteDuration * 1.30; + wait(1.0/pauseBetweenNotes); + spkr=0; + } +} + +void cll(){ +#define DO 262 +#define RE 294 +#define MI 330 + +int melody[] = {DO, DO, DO, RE, MI, RE, DO, MI, RE, RE, DO}; +int noteDurations[] = {4,4,4,8,8,4,4,4,4,12}; +for (int thisNote = 0; thisNote < 52; thisNote++) { + // to calculate the note duration, take one second + // divided by the note type. + //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. + int noteDuration = noteDurations[thisNote]; + //tone(8, melody[thisNote],noteDuration); + spkr.period(1.0/melody[thisNote]); + spkr=0.25; + wait(1.0/noteDuration); + //wait(1); + // to distinguish the notes, set a minimum time between them. + // the note's duration + 30% seems to work well: + int pauseBetweenNotes = noteDuration * 1.30; + //wait(pauseBetweenNotes/1000); + wait(1.0/pauseBetweenNotes); + // stop the tone playing: + //noTone(8); + spkr=0; +} +} + +void Afficher_Menu(int Menu) +{ + if (menu_precedent == Menu) return; + menu_precedent = Menu; + lcd.cls(); + lcd.locate(0,8); + //wait(0.050); + switch(Menu) { + case CLL : + lcd.printf("Claire de la lune"); + break; + case MARIO : + lcd.printf("Mario"); + break; + case JOUE : + lcd.printf("JOUE"); + break; + } +} + +void Afficher_Message(char *Message) +{ + if (strcmp(message_precedent,Message) ==0) return; + lcd.cls(); + lcd.locate(0,8); + lcd.printf(Message); + +} + +void Menu_CLL(int etat) +{ + bool Sortir = false; // On sort du sous-menu + while (!Sortir) { + Afficher_Menu(etat); + switch (etat) { + case JOUE : + // évèments + if (left) { + etat = CLL; + Sortir=true; + } + if (center)cll(); + break; + } + wait(0.125); + + } +} + + +void Menu_Mario(int etat) +{ + bool Sortir = false; // On sort du sous-menu + while (!Sortir) { + Afficher_Menu(etat); + switch (etat) { + case JOUE : + // évèments + if (left) { + etat = MARIO; + Sortir=true; + } + if (center)mario(); + break; + } + wait(0.125); + + } +} + + +int main() +{ + while (1) { + Afficher_Menu(etat); + switch (etat) { + case CLL : + // évèments + if (down) etat = MARIO; + if (right) Menu_CLL(JOUE); + break; + case MARIO : + if (up) etat=CLL; + if (right) Menu_Mario(JOUE); + if (down) etat = Sensor; + break; + case Sensor : + lcd.cls(); + lcd.printf(" "); + lcd.locate(0,8); + lcd.printf("Temp = %.3f\n\r", (float)sensor); + wait(0.5); + if (up) etat=MARIO; + break; + + } + wait(0.125); + + } + +}