monnayeur, lcd, servo

bonjourr
je suis sur un projet un peu compliqué, mais qui me tient a cœur ,
j'ai un monnayeur est jt voudrai que une pièce et égal a une action
exemple une pulsation et qui vaux a 10 cts et va me déclenché une bande son ..
dans le code que je vais vous fournir, je voudrai que lorsque l'on met 0.20 cts, un servo moteur s'active,
CA fait bientôt une semaine que je m'arrache les cheveux
merci pour votre aide et bonne fête a tous

// include the library code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
  #include <Servo.h>
Servo myservo;
int pos = 0;    // variable to store the servo position
volatile int pulse = 0;
void coin_value() {
  pulse = pulse + 1; 

}

void setup() {
  Serial.begin(9600);
 lcd.begin(16, 2);
 lcd.print("Planete Nature ");
 myservo.attach(10);
  pinMode(2, INPUT);
  attachInterrupt(0, coin_value, FALLING);
  
    Serial.begin(9600);
    

}
void loop() {

  if (pulse > 0)
    {
    delay (1000);   // let the other pulses arrive
        if (pulse == 6) {
          lcd.setCursor(0, 1);
    lcd.print("2Euros");
    }
    
    if (pulse == 5) {
      lcd.setCursor(0, 1);
    lcd.print("1 euros merci");
    }
    if (pulse == 4) {
      lcd.setCursor(0, 1);
     lcd.print("merci");
    }
    if (pulse == 3) {
myservo.write (50);
delay(2000);
    }else{
myservo.write (100);
}
     { lcd.setCursor(0, 1);
      lcd.print("0.20 Cts");
    }
    if (pulse == 2) {
      lcd.setCursor(0, 1);
      lcd.print("0.10 Cts");
    }
    if (pulse == 1) {
      lcd.setCursor(0, 1);
      lcd.print("0.5 Cts");
    }
    pulse = 0;  // clear for next time
    
  }

}

hello
bonne année et un test

// include the library code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
#include <Servo.h>
Servo myservo;
int pos = 0;    // variable to store the servo position
int memo_pulse = 0;
volatile int pulse = 0;
void coin_value()
{
  pulse = pulse + 1;
}
void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.print("Planete Nature ");
  myservo.attach(10);
  pinMode(2, INPUT);
  attachInterrupt(0, coin_value, FALLING);
  Serial.begin(9600);
}
void loop()
{
  if (pulse > 0)
  {
    memo_pulse = pulse;
    delay (1000);            // attente d'autres pulses
    if (memo_pulse != pulse) // un nouveau pulse est arrivé
    { // pendant le delai
      memo_pulse = pulse;    //on mémorise et on boucle en attente
    }
    else                     //sinon, cela fait 1 secondes sans nouveau pulse
    { //donc on traite en fonction de la valeur de pulse
      if (pulse == 6)
      {
        lcd.setCursor(0, 1);
        lcd.print("2Euros");
      }
      if (pulse == 5)
      {
        lcd.setCursor(0, 1);
        lcd.print("1 euros merci");
      }
      if (pulse == 4)
      {
        lcd.setCursor(0, 1);
        lcd.print("merci");
      }
      if (pulse == 3)
      {
        lcd.setCursor(0, 1);
        lcd.print("0.20 Cts");
        myservo.write (50);
        delay(2000);
      }
      else
      {
        lcd.setCursor(0, 1);
        lcd.print("0.20 Cts");
        myservo.write (100);
      }
      if (pulse == 2)
      {
        lcd.setCursor(0, 1);
        lcd.print("0.10 Cts");
      }
      if (pulse == 1)
      {
        lcd.setCursor(0, 1);
        lcd.print("0.5 Cts");
      }
      pulse = 0;  // on a traité pulse, on peux le razer
    }
  }
}

Cool.merci, je testerai ce soir!

hello, il faut nous en dire plus sur :
ta carte
ton lcd
ton monnayeur
ton servo et son alim
les branchements ( un petit schéma, même au crayon, à main levée)

as tu testé en mettant ton servo sur 3 ou 11

myservo.attach(3);
ou
myservo.attach(11);

hello
je t'avais mis un complément d'info hier soir et je ne voie pas ??? mystere

c'était pour te signaler que dans ta dernière version de prg, tu as supprimé la ligne de commande du servo
donc, sur 10, 3 ou 11 le servo ne bougera pas.

 [
    if (pulse == 3) {
myservo.write (50);
delay(2000);
    }else{
myservo.write (100);
}

un lien sur ton monnayeur?

j'ai fais plein de test hier soir pour savoir ou venais le problème, j'en avais conclu que lorsque je m'étais servo.myservo ou myservo.attach(10);dans void setup y'a plus de valeur qui apparié sur l'ecran LCD
c celui la !

je l'ai bien programme
0.05 cts = 1 pulse
.10 cts = 2 pulses .....
2 euros = 6 pulses

hello
chez moi
une UNO
un BP monté entre D2 et GND avec un condo en parallèle sur les contacts du BP
le moniteur ouvert sur 1000000 Bauds
joue du BP et regarde ce qui se passe sur le moniteur

#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
#include <Servo.h>
Servo myservo;
int pos            = 0;    // variable to store the servo position
int memo_pulse     = 0;
float somme        = 0;
volatile int pulse = 0;

void isr_coin_value()
{
   SREG &= 0b01111111;                       //reset le bit 7 de sreg
   EIFR  = 0b00000001;
   pulse = pulse+=1;Serial.println(pulse);
   EIFR  = 0b00000001;                      //acquitte demande d'interruption par rebonds (200ms)
   SREG |= 0b10000000;                      //ré-autorise les interruptions
}

void setup()
{
  Serial.begin(1000000);
  lcd.begin(16, 2);
  lcd.print("Planete Nature ");
  myservo.attach(10);
  pinMode(2, INPUT_PULLUP);
  attachInterrupt(0, isr_coin_value, FALLING);
  memo_pulse = pulse;
  Serial.println(" pret");
}

void loop()
{
  if (pulse > 0)
  {
    delay (1000);            // attente d'autres pulses
    if (memo_pulse != pulse) // un nouveau pulse est arrivé
    {                        // pendant le delai
      memo_pulse = pulse;    //on mémorise et on boucle en attente
    }
    else                     //sinon, cela fait 1 secondes sans nouveau pulse
    {                        //donc on traite en fonction de la valeur de pulse
      if (pulse == 6)
      {
        somme += 2;
        lcd.setCursor(0, 1);
        lcd.print("2 Euros meri");Serial.println(" + 2 euros");
      }
      if (pulse == 5)
      {
        somme += 1;
        lcd.setCursor(0, 1);
        lcd.print("1 euro merci");Serial.println(" + 1 euros");
      }
      if (pulse == 4)
      {
        somme += 0.50;
        lcd.setCursor(0, 1);
        lcd.print("0.50 euro merci");Serial.println(" + 0.50 euro");
      }
      if (pulse == 3)
      {
        somme += 0.20;
        lcd.setCursor(0, 1);
        lcd.print("0.20 euro  merci");Serial.println(" + 0.20 euro");
        myservo.write (50);           Serial.println(" servo a 50");
                                      Serial.println(" tempo 2 S");
        delay(2000);
      } 
      if (pulse == 2)
      {
        somme += 0.10;
        lcd.setCursor(0, 1);
        lcd.print("0.10 euro merci");Serial.println(" + 0.10 euro");
      }
      if (pulse == 1)
      {
        somme += 0.05;
        lcd.setCursor(0, 1);
        lcd.print("0.05 euro merci");Serial.println(" + 0.05 euro");
      }
      pulse = 0;  // on a traité pulse, on peux le razer
      Serial.print("somme = ");Serial.println(somme);
    }
  }
}

salut dfgh, merci pour ta participation a mon projet
dsl pour l'autre poste, j'ai passé la journée entière a essayer de résoudre ce satané problème, sans résultat.. >:(
j'ai essayer de faire ton exercice, sans résultat non plus j'ai branché une patte du bouton poussoir sur le pin 12, l'autre sur le GND et les 2 autres sur un condensateur 16v 22uf ... du surement a un mauvais branchement mais lequel.... :o
sinon, ...ont continue sur les bonnes nouvelles, ton nouveau code m'indique pas la valeur sur le LCD, et le servo ne démarre toujours pas,c peut etre normal,ou alors mon branchement est pas bon.. :confused:
a force on va y arrivé :slight_smile:

le BP pour simuler l'info du monnayeur doit etre branché sur D2 et pas sur D12
comme defini dans le prg
pinMode(2, INPUT_PULLUP);

pour ton lcd, as tu testé avec le prog d'exemple "hello Word" ?

tu ne nous as pas donné ton schéma de cablage
( il y a 15 branchements sur le lcd, j'aimerai savoir comment tu as cablé ces 15 fils)
tu as bien mis un potar pour le contraste?