Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | Prochaine révision Les deux révisions suivantes | ||
wiki:tutoriels:arduino:detecter_un_signal_electrique [2021/10/19 16:06] damien.muti [Schéma du montage] |
wiki:tutoriels:arduino:detecter_un_signal_electrique [2021/10/19 16:14] damien.muti [Programme Arduino 2 : Détection analogique] |
||
---|---|---|---|
Ligne 121: | Ligne 121: | ||
==== Programme Arduino 2 : Détection analogique ==== | ==== Programme Arduino 2 : Détection analogique ==== | ||
+ | |||
+ | Le programme est téléchargeable sur ce lien: Sonnerie_Aleatoire_WT2003S_9_Lecture_Analog.ino | ||
+ | |||
+ | < | ||
+ | #include " | ||
+ | |||
+ | #ifdef __AVR__ | ||
+ | #include < | ||
+ | SoftwareSerial SSerial(5, 6); // RX, TX | ||
+ | #define COMSerial SSerial | ||
+ | #define ShowSerial Serial | ||
+ | |||
+ | WT2003S< | ||
+ | #endif | ||
+ | |||
+ | #ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE | ||
+ | #define COMSerial Serial1 | ||
+ | #define ShowSerial SerialUSB | ||
+ | |||
+ | WT2003S< | ||
+ | #endif | ||
+ | |||
+ | #ifdef ARDUINO_ARCH_STM32F4 | ||
+ | #define COMSerial Serial | ||
+ | #define ShowSerial SerialUSB | ||
+ | |||
+ | WT2003S< | ||
+ | #endif | ||
+ | |||
+ | |||
+ | uint8_t vol = 10; | ||
+ | uint32_t spi_flash_songs = 0; | ||
+ | uint32_t sd_songs = 0; | ||
+ | STROAGE workdisk = SD; | ||
+ | struct Play_history { | ||
+ | uint8_t disk; | ||
+ | uint16_t index; | ||
+ | char name[8]; | ||
+ | } *SPISong, *SDSong; | ||
+ | |||
+ | //////////////////////////////////////////////// | ||
+ | #define BOUTON 2 | ||
+ | #define ENTREE_SIGNAL_DETECTION 4 // slot D3 (fil blanc) | ||
+ | #define LED 7 | ||
+ | uint8_t status; | ||
+ | boolean etat_entree_signal_ou_bouton = false; | ||
+ | |||
+ | // entrée analogique | ||
+ | #define ENTREE_DETECTEUR_SIGNAL A1 | ||
+ | #define SEUIL_DETECTION 100 // déclenchement du son si l' | ||
+ | int entreeDetecteur = 0; // variable de mémorisation du signal d' | ||
+ | |||
+ | |||
+ | // Defining some status codes from the WT2003S | ||
+ | #define STATUS_PLAY 0x01 | ||
+ | #define STATUS_STOP 0x02 | ||
+ | #define STATUS_PAUSE 0x03 | ||
+ | ////////////////////////////////////////// | ||
+ | |||
+ | /////////////////////////////// | ||
+ | void readSongName(struct Play_history* ph, uint32_t num, STROAGE disk) { | ||
+ | Mp3Player.volume(0); | ||
+ | delay(100); | ||
+ | switch (disk) { | ||
+ | case SPIFLASH: | ||
+ | Mp3Player.playSPIFlashSong(0x0001); | ||
+ | break; | ||
+ | case SD: | ||
+ | Mp3Player.playSDRootSong(0x0001); | ||
+ | break; | ||
+ | case UDISK: | ||
+ | Mp3Player.playUDiskRootSong(0x0001); | ||
+ | break; | ||
+ | } | ||
+ | ShowSerial.println(" | ||
+ | for (int i = 0; i < num ; i++) { | ||
+ | delay(300); | ||
+ | ph[i].disk = disk; | ||
+ | ph[i].index = Mp3Player.getTracks(); | ||
+ | Mp3Player.getSongName(ph[i].name); | ||
+ | Mp3Player.next(); | ||
+ | } | ||
+ | ShowSerial.println(" | ||
+ | Mp3Player.pause_or_play(); | ||
+ | Mp3Player.volume(14); | ||
+ | delay(100); | ||
+ | } | ||
+ | |||
+ | void getAllSong() { | ||
+ | uint8_t diskstatus = Mp3Player.getDiskStatus(); | ||
+ | ShowSerial.println(diskstatus); | ||
+ | spi_flash_songs = Mp3Player.getSPIFlashMp3FileNumber(); | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.println(spi_flash_songs); | ||
+ | if (spi_flash_songs > 0) { | ||
+ | SPISong = (struct Play_history*)malloc((spi_flash_songs + 1) * sizeof(struct Play_history)); | ||
+ | readSongName(SPISong, | ||
+ | } | ||
+ | if (diskstatus && 0x02) { // have SD | ||
+ | sd_songs = Mp3Player.getSDMp3FileNumber(); | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.println(sd_songs); | ||
+ | if (sd_songs > 0) { | ||
+ | SDSong = (struct Play_history*)malloc((sd_songs + 1) * sizeof(struct Play_history)); | ||
+ | ShowSerial.println(" | ||
+ | readSongName(SDSong, | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | void printSongs() { | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.print("< | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.println(); | ||
+ | ShowSerial.println(" | ||
+ | if (spi_flash_songs > 0) { | ||
+ | for (int i = 0 ; i < spi_flash_songs; | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.print(SPISong[i].index); | ||
+ | ShowSerial.print("< | ||
+ | ShowSerial.print(SPISong[i].name); | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.println(); | ||
+ | } | ||
+ | } | ||
+ | else { | ||
+ | ShowSerial.println(" | ||
+ | } | ||
+ | ShowSerial.println(" | ||
+ | for (int i = 0 ; i < sd_songs; i++) { | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.print(SDSong[i].index); | ||
+ | ShowSerial.print("< | ||
+ | ShowSerial.print(SDSong[i].name); | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.println(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void printMenu(void) { | ||
+ | ShowSerial.println(" | ||
+ | ShowSerial.println(" | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println("' | ||
+ | ShowSerial.println(" | ||
+ | ShowSerial.println(); | ||
+ | ShowSerial.println(" | ||
+ | ShowSerial.println(); | ||
+ | } | ||
+ | |||
+ | void audio(int cmd) { | ||
+ | ShowSerial.print(" | ||
+ | if (workdisk == SD) { | ||
+ | Mp3Player.playSDRootSong(cmd); | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.println(SDSong[cmd - ' | ||
+ | } | ||
+ | if (workdisk == SPIFLASH) { | ||
+ | Mp3Player.playSPIFlashSong(cmd - ' | ||
+ | ShowSerial.print(cmd + ": "); | ||
+ | ShowSerial.print(SPISong[cmd - ' | ||
+ | } | ||
+ | ShowSerial.println(); | ||
+ | } | ||
+ | |||
+ | void afficheSerialSon(int i) { | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.print(SPISong[i].index); | ||
+ | ShowSerial.print("< | ||
+ | ShowSerial.print(SPISong[i].name); | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.println(); | ||
+ | } | ||
+ | /////////////////////////////////////////////////////////////////////// | ||
+ | void setup() { | ||
+ | while (!ShowSerial); | ||
+ | ShowSerial.begin(9600); | ||
+ | COMSerial.begin(9600); | ||
+ | ShowSerial.println(" | ||
+ | Mp3Player.init(COMSerial); | ||
+ | |||
+ | |||
+ | ShowSerial.println(" | ||
+ | getAllSong(); | ||
+ | printMenu(); | ||
+ | printSongs(); | ||
+ | |||
+ | /// volume au max | ||
+ | Mp3Player.volume(32); | ||
+ | // pin du bouton | ||
+ | pinMode(BOUTON, | ||
+ | pinMode(ENTREE_SIGNAL_DETECTION, | ||
+ | pinMode(LED, | ||
+ | } | ||
+ | ///////////////////////////////////////////// | ||
+ | void loop() { | ||
+ | // tester le statut du lecteur : (1) est en train de jouer, (2): stop, (3): en pause | ||
+ | status = Mp3Player.getStatus(); | ||
+ | |||
+ | // lecture entrée analogique A0 -> signal de sortie du détecteur | ||
+ | entreeDetecteur = analogRead(ENTREE_DETECTEUR_SIGNAL); | ||
+ | |||
+ | |||
+ | etat_entree_signal_ou_bouton = (digitalRead(BOUTON) == HIGH || entreeDetecteur > SEUIL_DETECTION); | ||
+ | // debug | ||
+ | // ShowSerial.print(" | ||
+ | // ShowSerial.println(etat_entree_signal_ou_bouton); | ||
+ | |||
+ | if (etat_entree_signal_ou_bouton == true && (status == STATUS_STOP || status == STATUS_PAUSE) ) { | ||
+ | |||
+ | // debug | ||
+ | // | ||
+ | // | ||
+ | |||
+ | // debug | ||
+ | // | ||
+ | // debug | ||
+ | ShowSerial.print(" | ||
+ | ShowSerial.println(entreeDetecteur); | ||
+ | |||
+ | // si bouton appuyé ET que le son ne joue pas 0x02:stop, 0x03: pause | ||
+ | digitalWrite(LED, | ||
+ | // sélection aléatoire de l' | ||
+ | byte indexMusic = floor(random(0, | ||
+ | // debug | ||
+ | // affiche les caractéristiques de la musique | ||
+ | // | ||
+ | // | ||
+ | // joue la musique | ||
+ | Mp3Player.playMode(SINGLE_CYCLE);// | ||
+ | audio(indexMusic); | ||
+ | } | ||
+ | else if (etat_entree_signal_ou_bouton == false && status == STATUS_PLAY) { | ||
+ | // si le bouton est relâché et que le son joue : on l' | ||
+ | digitalWrite(LED, | ||
+ | // | ||
+ | Mp3Player.pause_or_play(); | ||
+ | |||
+ | } | ||
+ | |||
+ | // debug | ||
+ | // | ||
+ | } | ||
+ | </ |