Outils pour utilisateurs

Outils du site


wiki:tutoriels:arduino:detecter_un_signal_electrique

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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:14]
damien.muti [Programme Arduino 2 : Détection analogique]
wiki:tutoriels:arduino:detecter_un_signal_electrique [2021/10/19 16:21]
damien.muti
Ligne 119: Ligne 119:
  
 ==== Programme Arduino 1 : Détection digitale ==== ==== Programme Arduino 1 : Détection digitale ====
 +
 +Le programme est téléchargeable sur ce lien: [[https://fr.farnell.com/|Sonnerie_Aleatoire_WT2003S_8.ino]] 
 +<code>
 +#include "WT2003S_Player.h"
 +
 +#ifdef __AVR__
 +#include <SoftwareSerial.h>
 +SoftwareSerial SSerial(5, 6); // RX, TX
 +#define COMSerial SSerial
 +#define ShowSerial Serial
 +
 +WT2003S<SoftwareSerial> Mp3Player;
 +#endif
 +
 +#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
 +#define COMSerial Serial1
 +#define ShowSerial SerialUSB
 +
 +WT2003S<Uart> Mp3Player;
 +#endif
 +
 +#ifdef ARDUINO_ARCH_STM32F4
 +#define COMSerial Serial
 +#define ShowSerial SerialUSB
 +
 +WT2003S<HardwareSerial> Mp3Player;
 +#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;
 +
 +//////////////////////////////////////////////// mes variables globales et définitions /////////////////
 +#define BOUTON 2
 +#define ENTREE_DETECTEUR_SIGNAL A0
 +#define SEUIL_DETECTION 300 // déclenchement du son si l'entrée A0 > 0,5V soit une valeur de 1023/10 ~ 100
 +uint8_t status;
 +int entreeDetecteur =0;
 +// Defining some status codes from the WT2003S
 +#define STATUS_PLAY 0x01
 +#define STATUS_STOP 0x02
 +#define STATUS_PAUSE 0x03
 +//////////////////////////////////////////
 +
 +/////////////////////////////// Méthodes utilisées dans le setup() et le loop()
 +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("2...");
 +  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("4...");
 +  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("SPIFlash:");
 +  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, spi_flash_songs, SPIFLASH);
 +  }
 +  if (diskstatus && 0x02) { // have SD
 +    sd_songs = Mp3Player.getSDMp3FileNumber();
 +    ShowSerial.print("SD:");
 +    ShowSerial.println(sd_songs);
 +    if (sd_songs > 0) {
 +      SDSong = (struct Play_history*)malloc((sd_songs + 1) * sizeof(struct Play_history));
 +      ShowSerial.println("1...");
 +      readSongName(SDSong, sd_songs, SD);
 +    }
 +  }
 +}
 +void printSongs() {
 +  ShowSerial.print("-------------------");
 +  ShowSerial.print("index");
 +  ShowSerial.print("<-------->");
 +  ShowSerial.print("name");
 +  ShowSerial.print("-------------------");
 +  ShowSerial.println();
 +  ShowSerial.println("-------------------spi flash-------------------------------");
 +  for (int i = 0 ; i < spi_flash_songs; i++) {
 +    ShowSerial.print("-------------------");
 +    ShowSerial.print(SPISong[i].index);
 +    ShowSerial.print("<-------->");
 +    ShowSerial.print(SPISong[i].name);
 +    ShowSerial.print("-------------------");
 +    ShowSerial.println();
 +  }
 +  ShowSerial.println("-------------------sd card-------------------------------");
 +  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("MP3 Command List:");
 +  ShowSerial.println("-----------------");
 +  ShowSerial.println("'+' or '-'  : raise/lower volume");
 +  ShowSerial.println("'1' ~ '9'   : select a song");
 +  ShowSerial.println("'n'         : next song");
 +  ShowSerial.println("'s'         : switch play disk, spi flash");
 +  ShowSerial.println("'p'         : play or pause");
 +  ShowSerial.println("'w'         : set playmode single no loop");
 +  ShowSerial.println("'x'         : set playmode single loop");
 +  ShowSerial.println("'y'         : set playmode all loop");
 +  ShowSerial.println("'z'         : set playmode random");
 +  ShowSerial.println("'c'         : Copy mp3 to SPIFlash");
 +  ShowSerial.println("             (Yes, this really does go by copy order.)");
 +  ShowSerial.println();
 +  ShowSerial.println("Any other key to show this menu");
 +  ShowSerial.println();
 +}
 +
 +void audio(int cmd) {
 +  ShowSerial.print("play:");
 +  if (workdisk == SD) {
 +    Mp3Player.playSDRootSong(cmd);
 +    ShowSerial.print("Son joué : ");
 +    ShowSerial.println(SDSong[cmd - '0'].name);
 +  }
 +  if (workdisk == SPIFLASH) {
 +    Mp3Player.playSPIFlashSong(cmd - '0' - 1);
 +    ShowSerial.print(cmd + ": ");
 +    ShowSerial.print(SPISong[cmd - '0'].name);
 +  }
 +  ShowSerial.println();
 +}
 +
 +void afficheSerialSon(int i) {
 +  ShowSerial.print("-------------------");
 +  ShowSerial.print(SPISong[i].index);
 +  ShowSerial.print("<-------->");
 +  ShowSerial.print(SPISong[i].name);
 +  ShowSerial.print("-------------------");
 +  ShowSerial.println();
 +}
 +/////////////////////////////////////////////////////////////////////// setup ///////////////////////
 +void setup() {
 +  while (!ShowSerial);
 +  ShowSerial.begin(9600);
 +  COMSerial.begin(9600);
 +  ShowSerial.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++");
 +  Mp3Player.init(COMSerial);
 +
 +
 +  ShowSerial.println("0...");
 +  getAllSong();
 +  printMenu();
 +  printSongs();
 +
 +  /// volume au max
 +  Mp3Player.volume(32);
 +  // pin du bouton
 +  pinMode(BOUTON, INPUT);
 +}
 +///////////////////////////////////////////// Loop ///////////////////////////////////
 +void loop() {
 +  // tester le statut du lecteur : (1) est en train de jouer, (2): stop, (3): en pause
 +  status = Mp3Player.getStatus();
 +  entreeDetecteur = analogRead(ENTREE_DETECTEUR_SIGNAL);
 +  if ( entreeDetecteur > SEUIL_DETECTION && (status == STATUS_STOP || status == STATUS_PAUSE)) { // si la tension en A0 est supéreure au seuil ET que le son ne joue pas 0x02:stop, 0x03: pause
 +    // debug
 +    ShowSerial.print("ENTREE_DETECTEUR_SIGNAL (A0) : ");
 +    ShowSerial.println(entreeDetecteur);
 +
 +    digitalWrite(13, HIGH); // allumer la led LEDBUILTIN
 +    // sélection aléatoire de l'indice de la musique
 +    byte indexMusic = floor(random(0, sd_songs));
 +    // affiche les caractéristiques de la musique
 +    //afficheSerialSon(indexMusic);
 +    ShowSerial.print("indice musique : ");
 +    ShowSerial.println(indexMusic);
 +    // joue la musique
 +    Mp3Player.playMode(SINGLE_CYCLE);// joue la même musique en boucle
 +    audio(indexMusic); // lance le son
 +  }
 +  else if (entreeDetecteur < SEUIL_DETECTION && status == STATUS_PLAY) { // OU si la tension en A0 est inférieure au seuil ET que le son joue : on l'arrête
 +    // si le bouton est relâché et que le son joue : on l'arrête
 +    digitalWrite(13, LOW);
 +    //Mp3Player.stopPlaying(); // avec la librairie Sparkfun
 +    Mp3Player.pause_or_play();
 +
 +  }
 +}
 +</code>
 +
  
 ==== 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+Le programme est téléchargeable sur ce lien: [[https://fr.farnell.com/|Sonnerie_Aleatoire_WT2003S_9_Lecture_Analog.ino]]  
 + 
  
 <code> <code>
wiki/tutoriels/arduino/detecter_un_signal_electrique.txt · Dernière modification: 2024/05/13 17:49 de damien.muti