Bonjour à tous,
Je me suis replongé dans l'arduino récemment et je recontre un problème que je n'arrive pas a déboguer, je souhaite lire une une seule fois une mélodie à l'aide d'un réglage par potentiomètre.
Ainsi quand on tourne le potentomètre dans un intervalle de valeur donnée la carte arduino envoye l'information pour lire le fichier correspondant à la carte son une seule fois puis quand on tourne le potentomètre la carte envoye une instruction si on a changé d'intervale.
Il s'agit de la détection du changement d'intervalle que je n'arrive pas a réaliser, le code se compile pourtant sans problèmes :
#include <SoftwareSerial.h>
#include "Adafruit_Soundboard.h" // Librairie Carte Son
#define SFX_TX 5
#define SFX_RX 6
#define SFX_RST 4
SoftwareSerial ss = SoftwareSerial(SFX_TX, SFX_RX);
Adafruit_Soundboard sfx = Adafruit_Soundboard(&ss, NULL, SFX_RST);
int previousSongPlayed = 0; // Variable du son précédent utilisé pour la comparaison
int actualSongPlayed = 0; // Variable du son actuel utilisé pour la comparaision
void setup() {
ss.begin(9600); // Début de la communication série avec la carte son
Serial.begin(9600); // Début de la communication avec le pc pour débogage
}
void loop() {
int sensorValue = analogRead(A5); // Variable de la valeur du potentometre
Serial.println("SensorValue :");
Serial.println(sensorValue);
Serial.println("previousSongPlayed :");
Serial.println(previousSongPlayed);
Serial.println("actualSongPlayed : ");
Serial.println(actualSongPlayed);
// Il existe plusieurs intervalles qui correspondent respectivement a une musique
if (sensorValue > 0 && sensorValue < 108) {
actualSongPlayed = 2;
if (alreadyPlayed == 0) { // Le son a t-il déjà été joué ?
ss.write("#2\r\n"); // Envoi de la commande permettant de jouer le son n°2 stocker sur la carte son adafruit
Serial.println("En train d'envoyer la commande 2");
previousSongPlayed = actualSongPlayed; // Le son actuel devient le son précédent pour les futures comparaisons
}
}
else if (sensorValue > 108 && sensorValue < 217) {
actualSongPlayed = 3;
if (alreadyPlayed == 0) {
ss.write("#3\r\n");
Serial.println("En train d'envoyer la commande 3");
previousSongPlayed = actualSongPlayed;
}
}
else if (sensorValue > 217 && sensorValue < 326) {
actualSongPlayed = 4;
if (alreadyPlayed == 0) {
ss.write("#4\r\n");
Serial.println("En train d'envoyer la commande 4");
previousSongPlayed = actualSongPlayed;
}
}
else if (sensorValue > 326 && sensorValue < 435) {
actualSongPlayed = 5;
if (alreadyPlayed == 0) {
ss.write("#5\r\n");
Serial.println("En train d'envoyer la commande 5");
previousSongPlayed = actualSongPlayed;
}
}
delay (3000); // Delai permettant l'analyse à terme il disparaitra
}
boolean alreadyPlayed () {
int toreturn; // Variable à renvoyer
if (actualSongPlayed != previousSongPlayed) { // Si le son actuel est différent du précédent alors il n'a pas déjà été joué
// Ce test conditionnel ne semble pas marcher pour une raison inconnue
toreturn = 0;
Serial.println("Son différent");
}
else if (actualSongPlayed == previousSongPlayed) {
toreturn = 1;
Serial.println("Son identique");
}
return toreturn;
}
Merci