Dernière révision : septembre 2023 |
Sommaire Introduction L’électronique et l’informatique ont profondément modifié notre société. C’est certainement la révolution industrielle la plus rapide de l’histoire de l’humanité. En effet, l’ordinateur que nous connaissons aujourd’hui était tout simplement inimaginable il y a seulement une cinquantaine d’années. Et avec les Arduino, les ESP8266 ou les Raspberry Pi Pico, l'aventure est loin d'être terminée. L’auteur ne pourra en aucun cas être tenu responsable des dommages qui résulteraient de l’utilisation des informations publiées sur ce site, sous licence Creative Commons BY-NC-SA. Toute reproduction ou modification d'un document, même partielle, est autorisée à condition que son origine et le nom de l'auteur soient clairement indiqués (BY), qu'il soit utilisé à des fins non commerciales (NC), que son mode de diffusion soit identique au document initial (SA), et que cela ne porte pas atteinte à l’auteur. Ce document présente un projet utilisant une carte Arduino, en espérant toujours être le plus clair et précis possible. Malgré tout le soin apporté à la rédaction, l'auteur vous remercie de bien vouloir le contacter si vous relevez la moindre erreur ou omission, et vous souhaite une agréable lecture. Si vous avez apprécié ce document, vous pouvez faire un don ici. Merci pour votre soutien. Objectif Gérer un lecteur MP3 (module YX5300) et un écran OLED 128 x 64 (module SSD1306), afficher un chenillard sur 4 leds RVB (module KY-009). Niveau Matériel utilisé
Programme (sketch) // gérer un lecteur MP3 (module YX5300) et un écran OLED 128 x 64 (module SSD1306), // afficher un chenillard sur quatre leds RVB (module KY-009) #include <Wire.h> #include <Adafruit_SSD1306.h> #define b1 13 #define r1 12 #define v1 11 #define b2 10 #define r2 9 #define v2 8 #define b3 7 #define r3 6 #define v3 5 #define b4 4 #define r4 3 #define v4 2 #define start_mp3 0x7E #define version_mp3 0xFF #define lon_cmd 0x06 #define stop_mp3 0xEF #define carte_sd 0x02 #define temps 75 Adafruit_SSD1306 aff_oled(128,64,&Wire); unsigned char play_pause=1; void setup() { int test_btn; pinMode(b1,OUTPUT); pinMode(r1,OUTPUT); pinMode(v1,OUTPUT); pinMode(b2,OUTPUT); pinMode(r2,OUTPUT); pinMode(v2,OUTPUT); pinMode(b3,OUTPUT); pinMode(r3,OUTPUT); pinMode(v3,OUTPUT); pinMode(b4,OUTPUT); pinMode(r4,OUTPUT); pinMode(v4,OUTPUT); Serial.begin(9600); commande_mp3(0x0C,0x00); // initialiser le module MP3 commande_mp3(0x09,carte_sd); // définir le support commande_mp3(0x1A,0x00); // autoriser la sortie audio commande_mp3(0x06,0x1E); // volume (0x00 <= volume <= 0x1E) Wire.begin(); aff_oled.begin(SSD1306_SWITCHCAPVCC,0x3C); aff_oled.display(); // afficher le motif intégré delay(1000); aff_oled.setTextColor(SSD1306_WHITE); // obligatoire ! aff_oled.setTextSize(2); // police 12 x 16 aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("Press a"); // ligne 2 aff_oled.setCursor(0,16); aff_oled.print("yellow"); // ligne 3 aff_oled.setCursor(0,32); aff_oled.print("button to"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("start..."); aff_oled.display(); do test_btn=analogRead(A0); while (test_btn>1013); commande_mp3(0x03,0x01); // lire le premier fichier commande_mp3(0x19,0x00); // lire le fichier en boucle aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Playing..."); aff_oled.display(); } void loop() { chenillard_bleu_droite(); chenillard_bleu_rouge_gauche(); chenillard_rouge_droite(); chenillard_rouge_vert_gauche(); chenillard_vert_droite(); chenillard_bleu_vert_gauche(); chenillard_bleu_vert_droite(); chenillard_vert_gauche(); chenillard_rouge_vert_droite(); chenillard_rouge_gauche(); chenillard_bleu_rouge_droite(); chenillard_bleu_gauche(); } void chenillard_bleu_droite() { digitalWrite(b1,HIGH); test_touche(); digitalWrite(b2,HIGH); test_touche(); digitalWrite(b3,HIGH); test_touche(); digitalWrite(b4,HIGH); test_touche(); digitalWrite(b1,LOW); test_touche(); digitalWrite(b2,LOW); test_touche(); digitalWrite(b3,LOW); test_touche(); digitalWrite(b4,LOW); test_touche(); } void chenillard_rouge_droite() { digitalWrite(r1,HIGH); test_touche(); digitalWrite(r2,HIGH); test_touche(); digitalWrite(r3,HIGH); test_touche(); digitalWrite(r4,HIGH); test_touche(); digitalWrite(r1,LOW); test_touche(); digitalWrite(r2,LOW); test_touche(); digitalWrite(r3,LOW); test_touche(); digitalWrite(r4,LOW); test_touche(); } void chenillard_vert_droite() { digitalWrite(v1,HIGH); test_touche(); digitalWrite(v2,HIGH); test_touche(); digitalWrite(v3,HIGH); test_touche(); digitalWrite(v4,HIGH); test_touche(); digitalWrite(v1,LOW); test_touche(); digitalWrite(v2,LOW); test_touche(); digitalWrite(v3,LOW); test_touche(); digitalWrite(v4,LOW); test_touche(); } void chenillard_bleu_rouge_droite() { digitalWrite(b1,HIGH); digitalWrite(r1,HIGH); test_touche(); digitalWrite(b2,HIGH); digitalWrite(r2,HIGH); test_touche(); digitalWrite(b3,HIGH); digitalWrite(r3,HIGH); test_touche(); digitalWrite(b4,HIGH); digitalWrite(r4,HIGH); test_touche(); digitalWrite(b1,LOW); digitalWrite(r1,LOW); test_touche(); digitalWrite(b2,LOW); digitalWrite(r2,LOW); test_touche(); digitalWrite(b3,LOW); digitalWrite(r3,LOW); test_touche(); digitalWrite(b4,LOW); digitalWrite(r4,LOW); test_touche(); } void chenillard_bleu_vert_droite() { digitalWrite(b1,HIGH); digitalWrite(v1,HIGH); test_touche(); digitalWrite(b2,HIGH); digitalWrite(v2,HIGH); test_touche(); digitalWrite(b3,HIGH); digitalWrite(v3,HIGH); test_touche(); digitalWrite(b4,HIGH); digitalWrite(v4,HIGH); test_touche(); digitalWrite(b1,LOW); digitalWrite(v1,LOW); test_touche(); digitalWrite(b2,LOW); digitalWrite(v2,LOW); test_touche(); digitalWrite(b3,LOW); digitalWrite(v3,LOW); test_touche(); digitalWrite(b4,LOW); digitalWrite(v4,LOW); test_touche(); } void chenillard_rouge_vert_droite() { digitalWrite(r1,HIGH); digitalWrite(v1,HIGH); test_touche(); digitalWrite(r2,HIGH); digitalWrite(v2,HIGH); test_touche(); digitalWrite(r3,HIGH); digitalWrite(v3,HIGH); test_touche(); digitalWrite(r4,HIGH); digitalWrite(v4,HIGH); test_touche(); digitalWrite(r1,LOW); digitalWrite(v1,LOW); test_touche(); digitalWrite(r2,LOW); digitalWrite(v2,LOW); test_touche(); digitalWrite(r3,LOW); digitalWrite(v3,LOW); test_touche(); digitalWrite(r4,LOW); digitalWrite(v4,LOW); test_touche(); } void chenillard_bleu_gauche() { digitalWrite(b4,HIGH); test_touche(); digitalWrite(b3,HIGH); test_touche(); digitalWrite(b2,HIGH); test_touche(); digitalWrite(b1,HIGH); test_touche(); digitalWrite(b4,LOW); test_touche(); digitalWrite(b3,LOW); test_touche(); digitalWrite(b2,LOW); test_touche(); digitalWrite(b1,LOW); test_touche(); } void chenillard_rouge_gauche() { digitalWrite(r4,HIGH); test_touche(); digitalWrite(r3,HIGH); test_touche(); digitalWrite(r2,HIGH); test_touche(); digitalWrite(r1,HIGH); test_touche(); digitalWrite(r4,LOW); test_touche(); digitalWrite(r3,LOW); test_touche(); digitalWrite(r2,LOW); test_touche(); digitalWrite(r1,LOW); test_touche(); } void chenillard_vert_gauche() { digitalWrite(v4,HIGH); test_touche(); digitalWrite(v3,HIGH); test_touche(); digitalWrite(v2,HIGH); test_touche(); digitalWrite(v1,HIGH); test_touche(); digitalWrite(v4,LOW); test_touche(); digitalWrite(v3,LOW); test_touche(); digitalWrite(v2,LOW); test_touche(); digitalWrite(v1,LOW); test_touche(); } void chenillard_bleu_rouge_gauche() { digitalWrite(b4,HIGH); digitalWrite(r4,HIGH); test_touche(); digitalWrite(b3,HIGH); digitalWrite(r3,HIGH); test_touche(); digitalWrite(b2,HIGH); digitalWrite(r2,HIGH); test_touche(); digitalWrite(b1,HIGH); digitalWrite(r1,HIGH); test_touche(); digitalWrite(b4,LOW); digitalWrite(r4,LOW); test_touche(); digitalWrite(b3,LOW); digitalWrite(r3,LOW); test_touche(); digitalWrite(b2,LOW); digitalWrite(r2,LOW); test_touche(); digitalWrite(b1,LOW); digitalWrite(r1,LOW); test_touche(); } void chenillard_bleu_vert_gauche() { digitalWrite(b4,HIGH); digitalWrite(v4,HIGH); test_touche(); digitalWrite(b3,HIGH); digitalWrite(v3,HIGH); test_touche(); digitalWrite(b2,HIGH); digitalWrite(v2,HIGH); test_touche(); digitalWrite(b1,HIGH); digitalWrite(v1,HIGH); test_touche(); digitalWrite(b4,LOW); digitalWrite(v4,LOW); test_touche(); digitalWrite(b3,LOW); digitalWrite(v3,LOW); test_touche(); digitalWrite(b2,LOW); digitalWrite(v2,LOW); test_touche(); digitalWrite(b1,LOW); digitalWrite(v1,LOW); test_touche(); } void chenillard_rouge_vert_gauche() { digitalWrite(r4,HIGH); digitalWrite(v4,HIGH); test_touche(); digitalWrite(r3,HIGH); digitalWrite(v3,HIGH); test_touche(); digitalWrite(r2,HIGH); digitalWrite(v2,HIGH); test_touche(); digitalWrite(r1,HIGH); digitalWrite(v1,HIGH); test_touche(); digitalWrite(r4,LOW); digitalWrite(v4,LOW); test_touche(); digitalWrite(r3,LOW); digitalWrite(v3,LOW); test_touche(); digitalWrite(r2,LOW); digitalWrite(v2,LOW); test_touche(); digitalWrite(r1,LOW); digitalWrite(v1,LOW); test_touche(); } // envoyer une commande au module MP3 via la liaison série de l'Arduino (broche TX1) void commande_mp3(byte commande,byte par) { Serial.write(start_mp3); Serial.write(version_mp3); Serial.write(lon_cmd); // longueur (en octets) de la commande, sans compter "start_mp3" et "stop_mp3" Serial.write(commande); Serial.write(0); // pas d'information en retour (broche TX du module MP3 non connectée à la broche RX0 de l'Arduino) Serial.write(0); // premier paramètre (poids fort) Serial.write(par); // deuxième paramètre (poids faible) Serial.write(stop_mp3); delay(200); } // tester l'appui sur une touche void test_touche() { int test_btn; test_btn=analogRead(A0); // bouton gauche (previous song) if ((test_btn>77) && (test_btn<98)) { commande_mp3(0x02,0x00); commande_mp3(0x19,0x00); // lire le fichier en boucle aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Prev. song"); aff_oled.display(); delay(500); aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Playing..."); aff_oled.display(); } // bouton droit (next song) if ((test_btn>21) && (test_btn<42)) { commande_mp3(0x01,0x00); commande_mp3(0x19,0x00); // lire le fichier en boucle aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Next song"); aff_oled.display(); delay(500); aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Playing..."); aff_oled.display(); } // bouton haut (volume up) if (test_btn<10) { commande_mp3(0x04,0x00); aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Volume up"); aff_oled.display(); delay(500); aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Playing..."); aff_oled.display(); } // bouton bas (volume down) if ((test_btn>155) && (test_btn<176)) { commande_mp3(0x05,0x00); aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Vol. down"); aff_oled.display(); delay(500); aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Playing..."); aff_oled.display(); } // bouton décalé (play/pause) if ((test_btn>340) && (test_btn<361)) { // play if (play_pause==0) { commande_mp3(0x0D,0x00); aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Playing..."); aff_oled.display(); play_pause=1; } // pause else { commande_mp3(0x0E,0x00); aff_oled.clearDisplay(); // ligne 1 aff_oled.setCursor(0,0); aff_oled.print("MP3 PLAYER"); // ligne 2 aff_oled.setCursor(12,16); aff_oled.print("--------"); // ligne 4 aff_oled.setCursor(0,48); aff_oled.print("Pause"); aff_oled.display(); play_pause=0; } } // aucun bouton appuyé if (test_btn>1013) delay(temps); } Documentation complémentaire |
Haut de page |