« Art Sciences 2024/2025 E2 » : différence entre les versions
(5 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 2 : | Ligne 2 : | ||
== Présentation du projet == | == Présentation du projet == | ||
''Wisky'' interroge la mémoire et l’enfance, la façon dont le langage détermine notre éducation. Ici, l'intérêt est porté sur les injonctions que nous recevons étant enfant, celles qui nous contraignent et le souvenir que nous en gardons. Ces phrases perçues comme anodines ont un réel impact sur notre développement et sur la division des rôles sociaux selon le genre et la classe. Ce projet convoque ainsi une mémoire à la fois commune et fictive en une forme absurde. | |||
Wisky est un jouet, le chien en bois Snoopy de Fisher Price commercialisé dans les années 60. Nous l’avons retravaillé en une forme à performée, sa laisse fera office de casque et le.a spectateurice pourra la tirée tout en écoutant les mots du petit chien. En le promenant, Wisky prononcera aléatoirement des phrases culpabilisantes et des petites histoires sordides sur sa vie de jouet chien, et une fois immobile il se taira.[[Fichier:Wisky.png|vignette| '''Wisky'''|157x157px|centré]] | |||
== Suivi jour par jour == | == Suivi jour par jour == | ||
Ligne 44 : | Ligne 41 : | ||
=== Jour 2 : Mercredi 22 janvier === | === Jour 2 : Mercredi 22 janvier === | ||
==== <u>'' | ==== <u>''Programmation du capteur :''</u> ==== | ||
Avant de commencer | Avant de commencer à programmer l'ensemble du système, nous avons décidé de diviser le projet en plusieurs sous-programmes. Nous avons tout d'abord commencé par la programmation du capteur. L'ajout d'une LED nous a permis d'améliorer la visualisation des événements et de savoir à quel moment le capteur envoie un signal. | ||
[[Fichier:Installation pour programmer le capteur .png|vignette|Installation pour programmer le capteur|434x434px]]<syntaxhighlight lang="c++"> | |||
#include <SoftwareSerial.h> | |||
int ledPin = 4; | //définition des pins pour le capteur et la LED | ||
int sensorPin = A0; //pin du capteur | |||
int val; //variable pour stocker la valeur lue par le capteur | |||
int ledPin = 4; //pin de la LED | |||
void setup() { | void setup() { | ||
//initialisation des pins : capteur en entrée et LED en sortie | |||
pinMode(sensorPin, INPUT); | |||
pinMode(ledPin, OUTPUT); | |||
Serial.begin(9600); //initialisation de la communication série pour le débogage | |||
digitalWrite(ledPin, LOW); //éteindre la LED au démarrage | |||
} | |||
void loop() { | |||
//lecture de la valeur du capteur | |||
val = analogRead(sensorPin); | |||
//si le capteur détecte quelque chose (valeur inférieure à 1023), allumer la LED | |||
if (val < 1023) { | |||
digitalWrite(ledPin, HIGH); //allumer la LED | |||
} else { | |||
digitalWrite(ledPin, LOW); //éteindre la LED si la valeur est égale à 1023 | |||
} | |||
} | |||
</syntaxhighlight> | |||
==== <u>''Impression 3D :''</u> ==== | |||
L'impression 3D a joué un rôle essentiel dans la fabrication du prototype du casque. Elle a permis de transformer la modélisation 3D en un objet tangible, facilitant ainsi la création rapide et économique du modèle. Le matériau utilisé pour l'impression étaie principalement le '''PLA''' (facile à imprimer) qui est adapté aux besoins du projet. | |||
Une fois le modèle 3D conçu, il a été préparé pour l'impression en ajustant les paramètres comme la résolution et le remplissage. Les différentes pièces du casque ont été imprimées séparément, puis assemblées pour tester l'intégration des haut-parleurs et du passage du câble. | |||
L'impression 3D a permis de réaliser un prototype fonctionnel en peu de temps, facilitant ainsi les tests et les ajustements nécessaires avant la fabrication finale. Cette méthode a aussi réduit les coûts de production tout en offrant une grande flexibilité dans la conception du casque.[[Fichier:Imprimante 1.png|centré|vignette]] | |||
[[Fichier:Préparation d'imprimer.png|centré|vignette|Préparation d'imprimer ]] | |||
=== Jour 3 : Jeudi 23 janvier === | |||
==== <u>''Programmation du lecteur mp3 :''</u> ==== | |||
Dans cette étape, nous avons programmé le lecteur MP3, qui permet de lire des fichiers audio MP3 stockés sur une carte SD insérée dans le lecteur. Le capteur a également été intégré dans cette phase, afin de visualiser l'interaction entre les deux éléments : lorsque le capteur détecte un aimant, le lecteur MP3 se met en marche. | |||
Nous avons consulté la datasheet du lecteur pour comprendre son fonctionnement et les commandes à utiliser pour l'intégrer correctement à notre projet. Ce lecteur fonctionne avec des commandes hexadécimales pour chaque tâche spécifique. Pour notre projet, nous avons utilisé des commandes permettant de sélectionner un fichier, de le lire, de l'arrêter et de régler le volume. Après avoir testé le fonctionnement avec des écouteurs, nous avons validé la lecture audio, puis soudé des haut-parleurs que nous avons installés dans les oreillettes du casque. | |||
[[Fichier:Installation pour programmer le player mp3.png|vignette|Installation pour programmer le player mp3|340x340px]]<syntaxhighlight lang="c++"> | |||
#include <SoftwareSerial.h> | |||
int sensorPin = A0; //pin du capteur | |||
int val; //variable pour la valeur lue par le capteur | |||
bool isPlaying = false; //variable pour vérifier si un fichier est en lecture | |||
SoftwareSerial mp3Serial(5, 6); //communication série avec le lecteur MP3 (broches 5 et 6) | |||
void setup() { | |||
pinMode(sensorPin, INPUT); //initialisation du capteur en entrée | |||
Serial.begin(9600); //initialisation de la communication série pour le débogage | |||
mp3Serial.begin(9600); //initialisation de la communication avec le lecteur MP3 | |||
delay(1000); //attente pour s'assurer que le lecteur MP3 est prêt | |||
select(); //sélection du fichier à lire | |||
delay(200); | |||
volume(); //réglage du volume | |||
} | |||
void loop() { | |||
val = analogRead(sensorPin); //lecture de la valeur du capteur | |||
if (val < 1023) { //si le capteur détecte l'aimant | |||
if (!isPlaying) { //si la lecture n'est pas déjà en cours | |||
play(); //lancer la lecture | |||
isPlaying = true; //marquer que la lecture est en cours | |||
} else { | |||
resume(); //reprendre la lecture | |||
} | |||
delay(1000); //attendre un peu avant de vérifier à nouveau | |||
} else { //si aucun signal n'est détecté par le capteur | |||
stopplay(); //arrêter la lecture du fichier MP3 | |||
isPlaying = false; //marquer que la lecture est arrêtée | |||
} | |||
} | |||
//commande pour sélectionner le fichier à lire | |||
void select() { | |||
mp3Serial.write(0x7E); | |||
mp3Serial.write(0xFF); | |||
mp3Serial.write(0x06); | |||
mp3Serial.write(0x09); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write(0x02); | |||
mp3Serial.write(0xEF); | |||
} | |||
} | //commande pour régler le volume | ||
void volume() { | |||
mp3Serial.write(0x7E); | |||
mp3Serial.write(0xFF); | |||
mp3Serial.write(0x06); | |||
mp3Serial.write(0x06); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write(0x64); // Volume à 100 | |||
mp3Serial.write(0xEF); | |||
} | |||
//commande pour démarrer la lecture du fichier | |||
void play() { | |||
mp3Serial.write(0x7E); | |||
mp3Serial.write(0xFF); | |||
mp3Serial.write(0x06); | |||
mp3Serial.write(0x03); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write(0x01); | |||
mp3Serial.write(0xEF); | |||
} | |||
//commande pour reprendre la lecture | |||
void resume() { | |||
mp3Serial.write(0x7E); | |||
mp3Serial.write(0xFF); | |||
mp3Serial.write(0x06); | |||
mp3Serial.write(0x0D); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write(0xEF); | |||
} | |||
//commande pour arrêter la lecture | |||
void stopplay() { | |||
mp3Serial.write(0x7E); | |||
mp3Serial.write(0xFF); | |||
mp3Serial.write(0x06); | |||
mp3Serial.write(0x16); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write((uint8_t)0x00); | |||
mp3Serial.write(0xEF); | |||
} | |||
</syntaxhighlight> | |||
==== | ==== ''<u>Finir impression :</u>'' ==== | ||
[[Fichier:Le casque imprimer .png|centré|vignette|[[Fichier:Ensemble de casque .png|centré|vignette|Ensemble de casque]]Casque en plastique ]] | |||
[[Fichier: | |||
[[Fichier: | |||
=== Jour 4 : Vendredi 24 janvier === | === Jour 4 : Vendredi 24 janvier === | ||
Nous avons finalisé et ajouté des fonctions à notre programme pour mieux répondre aux exigences du cahier des charges. En résumé, dès que le capteur détecte la présence de l'aimant, un son est joué pendant que le capteur continue d’émettre des signaux. Cette lecture dure pendant un laps de temps défini, que nous avons estimé à 2 secondes. Une fois ces 2 secondes écoulées, le son s'arrête. Dès que le capteur détecte à nouveau un aimant, un autre son, différent du précédent, est joué.<syntaxhighlight lang="cpp"> | |||
#include <SoftwareSerial.h> | #include <SoftwareSerial.h> | ||
Ligne 109 : | Ligne 199 : | ||
bool isPlaying = false; | bool isPlaying = false; | ||
unsigned long lastStopTime = 0; // | unsigned long lastStopTime = 0; //variable pour suivre le temps d'arrêt | ||
unsigned long stopDelay = 2000; | unsigned long stopDelay = 2000; | ||
int lastTrack = 0; // | int lastTrack = 0; //pour mémoriser le dernier fichier joué | ||
SoftwareSerial mp3Serial(5, 6); | SoftwareSerial mp3Serial(5, 6); | ||
Ligne 131 : | Ligne 221 : | ||
val = analogRead(sensorPin); | val = analogRead(sensorPin); | ||
if (val < 1023) { // | if (val < 1023) { //le capteur détecte un signal | ||
digitalWrite(ledPin, HIGH); | digitalWrite(ledPin, HIGH); | ||
if (!isPlaying) { // | if (!isPlaying) { //si la musique ne joue pas encore | ||
playRandomTrack(); // | playRandomTrack(); //joue un fichier aléatoire différent de l'ancien | ||
isPlaying = true; | isPlaying = true; | ||
lastStopTime = millis(); // | lastStopTime = millis(); //réinitialise le temps d'arrêt | ||
} | } | ||
else { | else { | ||
resume(); // | resume(); //reprend la musique si elle est déjà en train de jouer | ||
} | } | ||
} else { // | } else { //le capteur ne détecte pas de signal | ||
digitalWrite(ledPin, LOW); | digitalWrite(ledPin, LOW); | ||
// | //vérifie si 2 secondes sont écoulées sans signal du capteur | ||
if (isPlaying && (millis() - lastStopTime >= stopDelay)) { | if (isPlaying && (millis() - lastStopTime >= stopDelay)) { | ||
stopplay(); | stopplay(); | ||
Ligne 153 : | Ligne 243 : | ||
} | } | ||
// | //si pendant ces 2 secondes, un signal est détecté, on garde la musique en cours | ||
if (val < 1023 && isPlaying && (millis() - lastStopTime < stopDelay)) { | if (val < 1023 && isPlaying && (millis() - lastStopTime < stopDelay)) { | ||
lastStopTime = millis(); // | lastStopTime = millis(); //réinitialise le temps d'attente d'arrêt pour les 2 secondes | ||
} | } | ||
Ligne 219 : | Ligne 309 : | ||
int trackNumber; | int trackNumber; | ||
// | //choisir un fichier aléatoire différent du précédent | ||
do { | do { | ||
trackNumber = random(1, 4); // | trackNumber = random(1, 4); //génère un nombre entre 1 et 3 | ||
} while (trackNumber == lastTrack); // | } while (trackNumber == lastTrack); //tant que c'est le même que le dernier, on regénère | ||
// | //mémorise le dernier fichier joué | ||
lastTrack = trackNumber; | lastTrack = trackNumber; | ||
// | //joue le fichier choisi | ||
mp3Serial.write(0x7E); | mp3Serial.write(0x7E); | ||
mp3Serial.write(0xFF); | mp3Serial.write(0xFF); | ||
Ligne 234 : | Ligne 324 : | ||
mp3Serial.write((uint8_t)0x00); | mp3Serial.write((uint8_t)0x00); | ||
mp3Serial.write((uint8_t)0x00); | mp3Serial.write((uint8_t)0x00); | ||
mp3Serial.write(trackNumber); // | mp3Serial.write(trackNumber); //envoie le numéro du fichier | ||
mp3Serial.write(0xEF); | mp3Serial.write(0xEF); | ||
} | } | ||
Ligne 240 : | Ligne 330 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Conclusion == | ||
le résultat | |||
ce qui reste à faire (assemblage sur le chien)[[Fichier:Chien.png|centré|vignette|Fisher Price Toy]] |
Version actuelle datée du 30 janvier 2025 à 20:01
Projet : WISKY
Présentation du projet
Wisky interroge la mémoire et l’enfance, la façon dont le langage détermine notre éducation. Ici, l'intérêt est porté sur les injonctions que nous recevons étant enfant, celles qui nous contraignent et le souvenir que nous en gardons. Ces phrases perçues comme anodines ont un réel impact sur notre développement et sur la division des rôles sociaux selon le genre et la classe. Ce projet convoque ainsi une mémoire à la fois commune et fictive en une forme absurde.
Wisky est un jouet, le chien en bois Snoopy de Fisher Price commercialisé dans les années 60. Nous l’avons retravaillé en une forme à performée, sa laisse fera office de casque et le.a spectateurice pourra la tirée tout en écoutant les mots du petit chien. En le promenant, Wisky prononcera aléatoirement des phrases culpabilisantes et des petites histoires sordides sur sa vie de jouet chien, et une fois immobile il se taira.
Suivi jour par jour
Jour 1 : Mardi 21 janvier
Composants utilisés :
Modélisation 3D du casque :
Le projet de création d’un casque audio personnalisé pour l’expérience sonore a nécessité une modélisation minutieuse des différents éléments du casque, en particulier pour intégrer les haut-parleurs et gérer le passage des câbles. La conception 3D a été utilisée pour élaborer un modèle précis et fonctionnel qui puisse être imprimé en 3D.
Un modèle a été conçu avec les éléments suivants :
- Haut-parleurs intégrés : Des emplacements ont été prévus pour loger des haut-parleurs de petite taille, permettant une transmission claire du son. Leur placement a été étudié pour assurer une bonne qualité acoustique, tout en minimisant l’encombrement à l’intérieur du casque.
- Passage du câble : Le câble devant relier le casque au dispositif externe (le chien) a été intégré à l’intérieur de la structure du casque. Pour ce faire, un système de conduits a été conçu, permettant de faire passer le câble de manière sécurisée et discrète, tout en évitant les risques d’accrochage ou de dégradation.
Jour 2 : Mercredi 22 janvier
Programmation du capteur :
Avant de commencer à programmer l'ensemble du système, nous avons décidé de diviser le projet en plusieurs sous-programmes. Nous avons tout d'abord commencé par la programmation du capteur. L'ajout d'une LED nous a permis d'améliorer la visualisation des événements et de savoir à quel moment le capteur envoie un signal.
#include <SoftwareSerial.h>
//définition des pins pour le capteur et la LED
int sensorPin = A0; //pin du capteur
int val; //variable pour stocker la valeur lue par le capteur
int ledPin = 4; //pin de la LED
void setup() {
//initialisation des pins : capteur en entrée et LED en sortie
pinMode(sensorPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600); //initialisation de la communication série pour le débogage
digitalWrite(ledPin, LOW); //éteindre la LED au démarrage
}
void loop() {
//lecture de la valeur du capteur
val = analogRead(sensorPin);
//si le capteur détecte quelque chose (valeur inférieure à 1023), allumer la LED
if (val < 1023) {
digitalWrite(ledPin, HIGH); //allumer la LED
} else {
digitalWrite(ledPin, LOW); //éteindre la LED si la valeur est égale à 1023
}
}
Impression 3D :
L'impression 3D a joué un rôle essentiel dans la fabrication du prototype du casque. Elle a permis de transformer la modélisation 3D en un objet tangible, facilitant ainsi la création rapide et économique du modèle. Le matériau utilisé pour l'impression étaie principalement le PLA (facile à imprimer) qui est adapté aux besoins du projet.
Une fois le modèle 3D conçu, il a été préparé pour l'impression en ajustant les paramètres comme la résolution et le remplissage. Les différentes pièces du casque ont été imprimées séparément, puis assemblées pour tester l'intégration des haut-parleurs et du passage du câble.
L'impression 3D a permis de réaliser un prototype fonctionnel en peu de temps, facilitant ainsi les tests et les ajustements nécessaires avant la fabrication finale. Cette méthode a aussi réduit les coûts de production tout en offrant une grande flexibilité dans la conception du casque.
Jour 3 : Jeudi 23 janvier
Programmation du lecteur mp3 :
Dans cette étape, nous avons programmé le lecteur MP3, qui permet de lire des fichiers audio MP3 stockés sur une carte SD insérée dans le lecteur. Le capteur a également été intégré dans cette phase, afin de visualiser l'interaction entre les deux éléments : lorsque le capteur détecte un aimant, le lecteur MP3 se met en marche.
Nous avons consulté la datasheet du lecteur pour comprendre son fonctionnement et les commandes à utiliser pour l'intégrer correctement à notre projet. Ce lecteur fonctionne avec des commandes hexadécimales pour chaque tâche spécifique. Pour notre projet, nous avons utilisé des commandes permettant de sélectionner un fichier, de le lire, de l'arrêter et de régler le volume. Après avoir testé le fonctionnement avec des écouteurs, nous avons validé la lecture audio, puis soudé des haut-parleurs que nous avons installés dans les oreillettes du casque.
#include <SoftwareSerial.h>
int sensorPin = A0; //pin du capteur
int val; //variable pour la valeur lue par le capteur
bool isPlaying = false; //variable pour vérifier si un fichier est en lecture
SoftwareSerial mp3Serial(5, 6); //communication série avec le lecteur MP3 (broches 5 et 6)
void setup() {
pinMode(sensorPin, INPUT); //initialisation du capteur en entrée
Serial.begin(9600); //initialisation de la communication série pour le débogage
mp3Serial.begin(9600); //initialisation de la communication avec le lecteur MP3
delay(1000); //attente pour s'assurer que le lecteur MP3 est prêt
select(); //sélection du fichier à lire
delay(200);
volume(); //réglage du volume
}
void loop() {
val = analogRead(sensorPin); //lecture de la valeur du capteur
if (val < 1023) { //si le capteur détecte l'aimant
if (!isPlaying) { //si la lecture n'est pas déjà en cours
play(); //lancer la lecture
isPlaying = true; //marquer que la lecture est en cours
} else {
resume(); //reprendre la lecture
}
delay(1000); //attendre un peu avant de vérifier à nouveau
} else { //si aucun signal n'est détecté par le capteur
stopplay(); //arrêter la lecture du fichier MP3
isPlaying = false; //marquer que la lecture est arrêtée
}
}
//commande pour sélectionner le fichier à lire
void select() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x09);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0x02);
mp3Serial.write(0xEF);
}
//commande pour régler le volume
void volume() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x06);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0x64); // Volume à 100
mp3Serial.write(0xEF);
}
//commande pour démarrer la lecture du fichier
void play() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x03);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0x01);
mp3Serial.write(0xEF);
}
//commande pour reprendre la lecture
void resume() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x0D);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0xEF);
}
//commande pour arrêter la lecture
void stopplay() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x16);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0xEF);
}
Finir impression :
Jour 4 : Vendredi 24 janvier
Nous avons finalisé et ajouté des fonctions à notre programme pour mieux répondre aux exigences du cahier des charges. En résumé, dès que le capteur détecte la présence de l'aimant, un son est joué pendant que le capteur continue d’émettre des signaux. Cette lecture dure pendant un laps de temps défini, que nous avons estimé à 2 secondes. Une fois ces 2 secondes écoulées, le son s'arrête. Dès que le capteur détecte à nouveau un aimant, un autre son, différent du précédent, est joué.
#include <SoftwareSerial.h>
int sensorPin = A0;
int val;
int ledPin = 4;
bool isPlaying = false;
unsigned long lastStopTime = 0; //variable pour suivre le temps d'arrêt
unsigned long stopDelay = 2000;
int lastTrack = 0; //pour mémoriser le dernier fichier joué
SoftwareSerial mp3Serial(5, 6);
void setup() {
pinMode(sensorPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
mp3Serial.begin(9600);
delay(1000);
select();
delay(200);
volume();
}
void loop() {
val = analogRead(sensorPin);
if (val < 1023) { //le capteur détecte un signal
digitalWrite(ledPin, HIGH);
if (!isPlaying) { //si la musique ne joue pas encore
playRandomTrack(); //joue un fichier aléatoire différent de l'ancien
isPlaying = true;
lastStopTime = millis(); //réinitialise le temps d'arrêt
}
else {
resume(); //reprend la musique si elle est déjà en train de jouer
}
} else { //le capteur ne détecte pas de signal
digitalWrite(ledPin, LOW);
//vérifie si 2 secondes sont écoulées sans signal du capteur
if (isPlaying && (millis() - lastStopTime >= stopDelay)) {
stopplay();
isPlaying = false;
}
}
//si pendant ces 2 secondes, un signal est détecté, on garde la musique en cours
if (val < 1023 && isPlaying && (millis() - lastStopTime < stopDelay)) {
lastStopTime = millis(); //réinitialise le temps d'attente d'arrêt pour les 2 secondes
}
delay(100);
}
void select() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x09);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0x02);
mp3Serial.write(0xEF);
}
void volume() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x06);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0x64);
mp3Serial.write(0xEF);
}
void play() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x03);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0x01);
mp3Serial.write(0xEF);
}
void resume() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x0D);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0xEF);
}
void stopplay() {
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x16);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(0xEF);
}
void playRandomTrack() {
int trackNumber;
//choisir un fichier aléatoire différent du précédent
do {
trackNumber = random(1, 4); //génère un nombre entre 1 et 3
} while (trackNumber == lastTrack); //tant que c'est le même que le dernier, on regénère
//mémorise le dernier fichier joué
lastTrack = trackNumber;
//joue le fichier choisi
mp3Serial.write(0x7E);
mp3Serial.write(0xFF);
mp3Serial.write(0x06);
mp3Serial.write(0x03);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write((uint8_t)0x00);
mp3Serial.write(trackNumber); //envoie le numéro du fichier
mp3Serial.write(0xEF);
}
Conclusion
le résultat
ce qui reste à faire (assemblage sur le chien)