Problème de comparaison d'un valeur actuelle avec une valeur précedente

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

Comme alreadyPlayed est une fonction, pour l'appeler il faut écrire alreadyPlayed() sinon dans vos if     if (alreadyPlayed == 0) {...vous comparez l'adresse de la fonction avec le pointeur nul..

C'est bon j'ai corrigé et mon programme fonctionne cependant j'ai essayé de crée une fonction pour simplifier la lecture du programme :

J'aimerai transformé ceci :

actualSongPlayed = 5;
    if (alreadyPlayed() == 0) {
 
        ss.write("#5\r\n");
        
      
      
      previousSongPlayed = actualSongPlayed;
    }

En :

playSong(5);

Pour cela j'ai crée une fonction :

void playSong(int trackNumber){
    actualSongPlayed = trackNumber;
    if (alreadyPlayed() == 0) {
      
      
      String instructionToSend = "#" + String(trackNumber) + "\r\n";
      ss.write(instructionToSend);       // Envoi de la commande pour jouer le son

      previousSongPlayed = trackNumber;
    }
}

A la compilation, j'obtient cette erreur no matching function for call to 'SoftwareSerial::write(String&)'
d'après ce que j'ai vu la fonction serial n'est pas capable de prendre en compte les concaténations, je ne vois pas comment faire.

Sur le forum internationnal certains expliquent qu'un faut réaliser le traitement des strings en C++ directement, comment est ce possible ?

PS :Le code fonctionne parfois mais il y a des erreurs inexpliquées avec ss.print(instructionToSend)

write ne prend pas d'instance de la classe String en effet et vous n'en avez pas besoin

soit vous faites

ss.write('#');
ss.println(trackNumber);

soit si vous tenez vraiment à perdre de la mémoire bêtement et utiliser une String, faites

      String instructionToSend = "#" + String(trackNumber);
      ss.println(instructionToSend);       // Envoi de la commande pour jouer le son

ma recommendation = ne pas utiliser la classe String

(println() se charge d'envoyer le CR et LF à la fin)