Problème de programmation pour bouton poussoir

J' ai fait un test avec le code que j' ai fait et ... ça ne fonctionne pas correctement !
fonction souhaité:
poussoir 1 => son 1/ relais 1
poussoir 2 => son 2/ relais 2
poussoir 3 => son 3/ relais 3
poussoir 4 => son 4/ relais 4
fonction exécuté:
poussoir 1 => son 1/ relais 1 + son 2/ relais 2
poussoir 2 => -------------------
poussoir 3 => son 3/ relais 3
poussoir 4 => son 4/ relais 4
voici le projet:
3 boutons poussoirs + un capteur de conductivité qui servent à déclencher 4 chapitres musicaux ( via 1 mini module mp3 ) et lumineux ( via 4 relais 12v ) . les chapitres ne doivent être joué seulement dans l' ordre 1 2 3 4 1 2 3 4 ...
matériels:

  • arduino uno
  • lecteur de carte micro sd mp3 (dfplayeur)
  • capteur df robot sen0223
  • prise audio jack
  • relais 12v x8
  • relais 230v x1
  • câbles
  • planche de montage provisoire
  • boutons poussoirs
  • résistances 10k

#include <SD.h> // need to include the SD library
#define SD_ChipSelectPin 4 //connect pin 4 of arduino to cs pin of sd card
#include <TMRpcm.h> //Arduino library for asynchronous playback of PCM/WAV files
#include <SPI.h> // need to include the SPI library

TMRpcm tmrpcm; // create an object for use in this sketch
//variable
int play0=0; // les boutons poussoirs
int play1=1;
int play2=2;
int play3=3;

int lum0=4; // les lumières
int lum1=5;
int lum2=6;
int lum3=7;

int ordre=0; // ordre d' allumage

void setup()
{
pinMode(play0,INPUT_PULLUP);
pinMode(play1,INPUT_PULLUP);
pinMode(play2,INPUT_PULLUP);
pinMode(play3,INPUT_PULLUP);

pinMode(lum0,OUTPUT);
pinMode(lum1,OUTPUT);
pinMode(lum2,OUTPUT);
pinMode(lum3,OUTPUT);

tmrpcm.speakerPin = 9; pinMode(10,OUTPUT); //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc

Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) // returns 1 if the card is present
{
Serial.println("SD fail");
return;
}

tmrpcm.setVolume(5); //

}
void black() //eteindre les lumieres
{digitalWrite(lum0,LOW);
digitalWrite(lum1,LOW);
digitalWrite(lum2,LOW);
digitalWrite(lum3,LOW);

}
void loop()
{
while(digitalRead(play0)==0 || digitalRead(play1)==0 || digitalRead(play2)==0 || digitalRead(play3)==0)

{
if(digitalRead(play0)==0 && ordre==0)// bouton 0 appuyer
{
black();
tmrpcm.play("song0.wav"); // play son 0
digitalWrite(lum0,HIGH);
ordre=1;
}
else if(digitalRead(play1)==0 && ordre==1) // bouton 1 appuyer
{
black();
tmrpcm.play("song1.wav");
digitalWrite(lum1,HIGH);
ordre=2;
}
else if(digitalRead(play2)==0 && ordre==2) // bouton 2 appuyer
{
black();
tmrpcm.play("song2.wav");
digitalWrite(lum2,HIGH);
ordre=3;
}
else if(digitalRead(play3)==0 && ordre==3) // bouton 3 appuyer
{
black();
tmrpcm.play("song3.wav");
digitalWrite(lum3,HIGH);
ordre=0;
}
}
}

Bonjour et bienvenue

De toute urgence prendre connaissance des recomendations : "A lire IMPERATIVEMENT avant de poster..."

une fois fait :
-modifier le titre pour qu'il évoque le problème rencontré et non un vague 'besoin d'aide pour moi'
-corriger la présentation du code en apportant une indentation et l'utilisation du balisage destiné à un bloc de code

Oops

Merci cela ne m'aide pas trop merci encore

Quand le code aura meilleur aspect il y a aura de toute évidence plus de personnes pour le lire et proposer quelquechose..... en l'état j'en connais plus d'un qui passent leur chemin... il est dommage de ne pas avoir leur regard et leur expertise..... la balle est dans ton camp.....

A titre d'exemple voilà lavec Blink.ino l'allure que doit avoir du code dans les messages

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

Merci je corrige de suite

moi j'ai passé mon chemin... mais peut-être je regarderai à nouveau si le post initial change de look

/*
Voila j'ai rangé mon code
fonction souhaité:
poussoir 1 => son 1/ relais 1
poussoir 2 => son 2/ relais 2
poussoir 3 => son 3/ relais 3
poussoir 4 => son 4/ relais 4
fonction exécuté:
poussoir 1 => son 1/ relais 1 + son 2/ relais 2
poussoir 2 => -------------------
poussoir 3 => son 3/ relais 3
poussoir 4 => son 4/ relais 4
voici le projet:
3 boutons poussoirs + un capteur de conductivité qui servent à déclencher 4 chapitres musicaux ( via 1 mini module mp3 ) et lumineux ( via 4 relais 12v ) . les chapitres ne doivent être joué seulement dans l' ordre 1 2 3 4 1 2 3 4 ...

matériels:

  • arduino uno
  • lecteur de carte micro sd mp3 (dfplayeur)
  • capteur df robot sen0223
  • prise audio jack
  • relais 12v x8
  • relais 230v x1
  • câbles
  • planche de montage provisoire
  • boutons poussoirs
  • résistances 10k
    */

#include <SD.h> // need to include the SD library
#define SD_ChipSelectPin 4 //connect pin 4 of arduino to cs pin of sd card
#include <TMRpcm.h> //Arduino library for asynchronous playback of PCM/WAV files
#include <SPI.h> // need to include the SPI library

TMRpcm tmrpcm; // create an object for use in this sketch
//variable
int play0 = 0; // les boutons poussoirs
int play1 = 1;
int play2 = 2;
int play3 = 3;

int lum0 = 4; // les lumières
int lum1 = 5;
int lum2 = 6;
int lum3 = 7;

int ordre = 0; // ordre d' allumage

// the setup function runs once when you press reset or power the board
void setup()
{
pinMode(play0, INPUT_PULLUP);
pinMode(play1, INPUT_PULLUP);
pinMode(play2, INPUT_PULLUP);
pinMode(play3, INPUT_PULLUP);

pinMode(lum0, OUTPUT);
pinMode(lum1, OUTPUT);
pinMode(lum2, OUTPUT);
pinMode(lum3, OUTPUT);

tmrpcm.speakerPin = 9; pinMode(10, OUTPUT); //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc

Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) // returns 1 if the card is present
{
Serial.println("SD fail");
return;
}

tmrpcm.setVolume(5); //

}
void black() //eteindre les lumieres
{ digitalWrite(lum0, LOW);
digitalWrite(lum1, LOW);
digitalWrite(lum2, LOW);
digitalWrite(lum3, LOW);
}

// the loop function runs over and over again forever
void loop()
{
while (digitalRead(play0) == 0 || digitalRead(play1) == 0 || digitalRead(play2) == 0 || digitalRead(play3) == 0)

{
if (digitalRead(play0) == 0 && ordre == 0) // bouton 0 appuyer
{
black();
tmrpcm.play("song0.wav"); // play son 0
digitalWrite(lum0, HIGH);
ordre = 1;
}
else if (digitalRead(play1) == 0 && ordre == 1) // bouton 1 appuyer
{
black();
tmrpcm.play("song1.wav");
digitalWrite(lum1, HIGH);
ordre = 2;
}
else if (digitalRead(play2) == 0 && ordre == 2) // bouton 2 appuyer
{
black();
tmrpcm.play("song2.wav");
digitalWrite(lum2, HIGH);
ordre = 3;
}
else if (digitalRead(play3) == 0 && ordre == 3) // bouton 3 appuyer
{
black();
tmrpcm.play("song3.wav");
digitalWrite(lum3, HIGH);
ordre = 0;
}
}
}

perdu :wink:

Pour rajouter les balises de de code:

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l'icône </> dans la barre d'outils pour indiquer que c'est du code

(Assurez vous aussi d'indenter le code correctement dans l'IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

non , tu n'y es pas enncore.

le code n'es pas indenté et n'apparait pas avec le balisage approprié

Regardes bien ce qui est indiqué içi concernant l'indentation préalable et l'utilisation du balisage. (Utilsation de quelques outils)

Il t'es également d emandé de ré-éditer dans ce sens ton message [quote="al1fch, post:10, topic:894581, full:true"]
non , tu n'y es pas enncore.

le code n'es pas indenté et n'apparait pas avec le balisage approprié

Regardes bien ce qui est indiqué içi concernant l'indentation préalable et l'utilisation du balisage. (Utilsation de quelques outils) Il t'es également d emandé de ré-éditer dans ce sens ton message intitial, pas de reproduire le code dans un second message
[/quote]

/*
Voila j'ai rangé mon code
fonction souhaité:
poussoir 1 => son 1/ relais 1
poussoir 2 => son 2/ relais 2
poussoir 3 => son 3/ relais 3
poussoir 4 => son 4/ relais 4
fonction exécuté:
poussoir 1 => son 1/ relais 1 + son 2/ relais 2
poussoir 2 => -------------------
poussoir 3 => son 3/ relais 3
poussoir 4 => son 4/ relais 4
voici le projet:
3 boutons poussoirs + un capteur de conductivité qui servent à déclencher 4 chapitres musicaux ( via 1 mini module mp3 ) et lumineux ( via 4 relais 12v ) . les chapitres ne doivent être joué seulement dans l' ordre 1 2 3 4 1 2 3 4 ...

matériels:

arduino uno
lecteur de carte micro sd mp3 (dfplayeur)
capteur df robot sen0223
prise audio jack
relais 12v x8
relais 230v x1
câbles
planche de montage provisoire
boutons poussoirs
résistances 10k
*/
#include <SD.h> // need to include the SD library
#define SD_ChipSelectPin 4 //connect pin 4 of arduino to cs pin of sd card
#include <TMRpcm.h> //Arduino library for asynchronous playback of PCM/WAV files
#include <SPI.h> // need to include the SPI library

TMRpcm tmrpcm; // create an object for use in this sketch
//variable
int play0 = 0; // les boutons poussoirs
int play1 = 1;
int play2 = 2;
int play3 = 3;

int lum0 = 4; // les lumières
int lum1 = 5;
int lum2 = 6;
int lum3 = 7;

int ordre = 0; // ordre d' allumage

// the setup function runs once when you press reset or power the board
void setup()
{
pinMode(play0, INPUT_PULLUP);
pinMode(play1, INPUT_PULLUP);
pinMode(play2, INPUT_PULLUP);
pinMode(play3, INPUT_PULLUP);

pinMode(lum0, OUTPUT);
pinMode(lum1, OUTPUT);
pinMode(lum2, OUTPUT);
pinMode(lum3, OUTPUT);

tmrpcm.speakerPin = 9; pinMode(10, OUTPUT); //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc

Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) // returns 1 if the card is present
{
Serial.println("SD fail");
return;
}

tmrpcm.setVolume(5); //

}
void black() //eteindre les lumieres
{ digitalWrite(lum0, LOW);
digitalWrite(lum1, LOW);
digitalWrite(lum2, LOW);
digitalWrite(lum3, LOW);
}

// the loop function runs over and over again forever
void loop()
{
while (digitalRead(play0) == 0 || digitalRead(play1) == 0 || digitalRead(play2) == 0 || digitalRead(play3) == 0)

{
if (digitalRead(play0) == 0 && ordre == 0) // bouton 0 appuyer
{
black();
tmrpcm.play("song0.wav"); // play son 0
digitalWrite(lum0, HIGH);
ordre = 1;
}
else if (digitalRead(play1) == 0 && ordre == 1) // bouton 1 appuyer
{
black();
tmrpcm.play("song1.wav");
digitalWrite(lum1, HIGH);
ordre = 2;
}
else if (digitalRead(play2) == 0 && ordre == 2) // bouton 2 appuyer
{
black();
tmrpcm.play("song2.wav");
digitalWrite(lum2, HIGH);
ordre = 3;
}
else if (digitalRead(play3) == 0 && ordre == 3) // bouton 3 appuyer
{
black();
tmrpcm.play("song3.wav");
digitalWrite(lum3, HIGH);
ordre = 0;
}
}
}

Ah ok

/*
Voila j'ai rangé mon code
fonction souhaité:
poussoir 1 => son 1/ relais 1
poussoir 2 => son 2/ relais 2
poussoir 3 => son 3/ relais 3
poussoir 4 => son 4/ relais 4
fonction exécuté:
poussoir 1 => son 1/ relais 1 + son 2/ relais 2
poussoir 2 => -------------------
poussoir 3 => son 3/ relais 3
poussoir 4 => son 4/ relais 4
voici le projet:
3 boutons poussoirs + un capteur de conductivité qui servent à déclencher 4 chapitres musicaux ( via 1 mini module mp3 ) et lumineux ( via 4 relais 12v ) . les chapitres ne doivent être joué seulement dans l' ordre 1 2 3 4 1 2 3 4 ...

matériels:

  • arduino uno
  • lecteur de carte micro sd mp3 (dfplayeur)
  • capteur df robot sen0223
  • prise audio jack
  • relais 12v x8
  • relais 230v x1
  • câbles
  • planche de montage provisoire
  • boutons poussoirs
  • résistances 10k
    */
#include <SD.h> // need to include the SD library
#define SD_ChipSelectPin 4 //connect pin 4 of arduino to cs pin of sd card
#include <TMRpcm.h> //Arduino library for asynchronous playback of PCM/WAV files
#include <SPI.h> // need to include the SPI library

TMRpcm tmrpcm; // create an object for use in this sketch
//variable
int play0 = 0; // les boutons poussoirs
int play1 = 1;
int play2 = 2;
int play3 = 3;

int lum0 = 4; // les lumières
int lum1 = 5;
int lum2 = 6;
int lum3 = 7;

int ordre = 0; // ordre d' allumage

// the setup function runs once when you press reset or power the board
void setup()
{
pinMode(play0, INPUT_PULLUP);
pinMode(play1, INPUT_PULLUP);
pinMode(play2, INPUT_PULLUP);
pinMode(play3, INPUT_PULLUP);

pinMode(lum0, OUTPUT);
pinMode(lum1, OUTPUT);
pinMode(lum2, OUTPUT);
pinMode(lum3, OUTPUT);

tmrpcm.speakerPin = 9; pinMode(10, OUTPUT); //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc

Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) // returns 1 if the card is present
{
Serial.println("SD fail");
return;
}

tmrpcm.setVolume(5); //

}
void black() //eteindre les lumieres
{ digitalWrite(lum0, LOW);
digitalWrite(lum1, LOW);
digitalWrite(lum2, LOW);
digitalWrite(lum3, LOW);
}

// the loop function runs over and over again forever
void loop()
{
while (digitalRead(play0) == 0 || digitalRead(play1) == 0 || digitalRead(play2) == 0 || digitalRead(play3) == 0)

{
if (digitalRead(play0) == 0 && ordre == 0) // bouton 0 appuyer
{
black();
tmrpcm.play("song0.wav"); // play son 0
digitalWrite(lum0, HIGH);
ordre = 1;
}
else if (digitalRead(play1) == 0 && ordre == 1) // bouton 1 appuyer
{
black();
tmrpcm.play("song1.wav");
digitalWrite(lum1, HIGH);
ordre = 2;
}
else if (digitalRead(play2) == 0 && ordre == 2) // bouton 2 appuyer
{
black();
tmrpcm.play("song2.wav");
digitalWrite(lum2, HIGH);
ordre = 3;
}
else if (digitalRead(play3) == 0 && ordre == 3) // bouton 3 appuyer
{
black();
tmrpcm.play("song3.wav");
digitalWrite(lum3, HIGH);
ordre = 0;
}
}
}

Hello
comme déjà dit,

il y a incompatibilité:

int play0 = 0; // les boutons poussoirs
int play1 = 1;
pinMode(play0, INPUT_PULLUP);
pinMode(play1, INPUT_PULLUP);
Serial.begin(9600);
Serial.println("SD fail");

-> déplacer les deux premiers boutons poussoirs qui en l'état sont en conflit avec le port série, d'où le comportement constaté

Indentation qu'est-ce que c'est ?
Déjà cela s'obtient en faisant ctrl T dans l'IDE arduino avant de copier le code:

Code non indenté :

While (condition1){
if (condition2){
machin();
truc();
}
else{
re-truc();
}
}

Code indenté : les blocs sont décalés pour plus de clarté :

While (condition){
    if (condition){
     machin();
     truc();
    }
    else{
     re-truc();
   }
}

C'est quand même plus clair, cela aide fortement à trouver les erreurs d'accolades et les possibles aidants sont plus enclins à le regarder de près.

1 Like

j' ai essayé de déplacer les 2 premiers boutons mais j' arrive plus à faire les tests j' ai sd fail puis sur le pin 3 ( bouton poussoir 1 ) j' ai un ?

#include <SD.h> // need to include the SD library
#define SD_ChipSelectPin 4 //connect pin 4 of arduino to cs pin of sd card
#include <TMRpcm.h> //Arduino library for asynchronous playback of PCM/WAV files
#include <SPI.h> //  need to include the SPI library

TMRpcm tmrpcm; // create an object for use in this sketch
//variable
int play0 = 0; // les boutons poussoirs
int play1 = 1;
int play2 = 2;
int play3 = 3;

int lum0 = 4; // les lumières
int lum1 = 5;
int lum2 = 6;
int lum3 = 7;

int ordre = 0; // ordre d' allumage

// the setup function runs once when you press reset or power the board
void setup()
{
  pinMode(play0, INPUT_PULLUP);
  pinMode(play1, INPUT_PULLUP);
  pinMode(play2, INPUT_PULLUP);
  pinMode(play3, INPUT_PULLUP);

  pinMode(lum0, OUTPUT);
  pinMode(lum1, OUTPUT);
  pinMode(lum2, OUTPUT);
  pinMode(lum3, OUTPUT);

  tmrpcm.speakerPin = 9; pinMode(10, OUTPUT); //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc

  Serial.begin(9600);
  if (!SD.begin(SD_ChipSelectPin)) // returns 1 if the card is present
  {
    Serial.println("SD fail");
    return;
  }

  tmrpcm.setVolume(5); //


}
void black() //eteindre les lumieres
{ digitalWrite(lum0, LOW);
  digitalWrite(lum1, LOW);
  digitalWrite(lum2, LOW);
  digitalWrite(lum3, LOW);
}

// the loop function runs over and over again forever
void loop()
{
  while (digitalRead(play0) == 0 || digitalRead(play1) == 0 || digitalRead(play2) == 0 || digitalRead(play3) == 0)

  {
    if (digitalRead(play0) == 0 && ordre == 0) // bouton 0 appuyer
    {
      black();
      tmrpcm.play("song0.wav"); // play son 0
      digitalWrite(lum0, HIGH);
      ordre = 1;
    }
    else if (digitalRead(play1) == 0 && ordre == 1) // bouton 1 appuyer
    {
      black();
      tmrpcm.play("song1.wav");
      digitalWrite(lum1, HIGH);
      ordre = 2;
    }
    else if (digitalRead(play2) == 0 && ordre == 2) // bouton 2 appuyer
    {
      black();
      tmrpcm.play("song2.wav");
      digitalWrite(lum2, HIGH);
      ordre = 3;
    }
    else if (digitalRead(play3) == 0 && ordre == 3) // bouton 3 appuyer
    {
      black();
      tmrpcm.play("song3.wav");
      digitalWrite(lum3, HIGH);
      ordre = 0;
    }
  }
}

Ici il y a des personnes de bonne volonté mais tu vas finir par les décourager.

Tu dis que ce tu as fait ne fonctionne pas mais tu ne donnes pas le code corespondant : réfléchis un peu, à part prendre une boule de cristal, comment peut-on savoir ce que tu as fait ?

Il t'a déjà été dit que les titres doivent renseigner sur le problème, c'est parce que les titres sont utilisés par le moteur de recherche du forum.

Avec le titre actuel les réponses qui pourraient être données sont perdues pour les autres : c'est contraire au but du forum qui est un forum d'entraide.

Si les règles avaient été appliquées stictement ton message serait déjà parti à la poubelle, pour le moment la modération est sympa avec toi mais cela pourrait ne pas durer si tu ne fais pas d'effort.

Conséquence : si tu ne modifies pas (avec l'icone en forme de crayon) le titre DU
TOUT PREMIER message et si tu donnes pas plus de renseignements sur ce que tu as fait, tu verras les aidants quitter ce sujet.

1 Like

Bonjour idefix24

Je plussoie totalement @68tjs, mets ton programme modifié en ligne et même un schéma ou une photo en gros plan de ton montage.

Tu as:

#define SD_ChipSelectPin 4 //connect pin 4 of arduino to cs pin of sd card
// et
int lum0 = 4; // les lumières

D'où, peut-être, la raison du "sd fail"
Déplaces lum0

Cordialement
jpbbricole

Pour éviter ce genre de problème, on fait la déclaration de toutes les I/Os au même endroit. Comme ça on a une vue d'ensemble et on s'évite des recherches fastidieuses de double déclarations d'I/Os.
Et on fait un schéma de l'interconnexion des sous-ensembles, avant de taper son code, pour les mêmes raisons.

1 Like

Et en utilisant const byte Comme type