[débutant ] un BP, une led mais deux modes pour deux programme

Salut à tous, je m'explique :

Je voudrais donc utiliser un seul poussoir pour allumer une led selon deux mode différent pour ensuite séparer mon programme en deux partit :

  • 1er impulsion pour faire clignoter L1 jusqu’à déclenchement du prog 1
  • 2éme impulsion pour que L1 passe au fixe jusqu’à déclenchement du prog 2

Ceci servirait à sélectionner le programme voulu.
Possible ? Car j'ai essayer quelque code mais j’arrive pas à obtenir ce que je veux !
Merci de m'avoir lu.

bonjour,
possible.

compteur appui=0

dans le loop
si appui bouton==>compteur++
si compteur=1===> on fait clignoter
si compteur = 2===> led fixe

Salut,

et bien décidement c'est le jour des LEDs et des boutons As tu chercher sur le forum ? par exemple ici.
Et parcouru Internet par exemple là

Car j'ai essayer quelque code

Il serait bien pour partir sur quelque chose de concret que tu nous le poste en utilisant la balise code qui va bien

Merci pour vos réponses ! J'ai donc pousser mes recherches un peut plus loin et j'en suis arriver à ce code:
et maintenant mon problème et de faire revenir le compteur à 1 quand il arrive à 4 ! Comment faire ?

const int buttonPin = 2;     
const int ledPin = 13;       

int buttonPushCounter = 0;   
int buttonState = 0;         
int lastButtonState = 0;     

void setup() {
  
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}


void loop() {
  
  buttonState = digitalRead(buttonPin);

  
  if (buttonState != lastButtonState) {
    
    if (buttonState == HIGH){
        buttonPushCounter++;

      Serial.println("APPUI"); 
      Serial.print("nombre d'appuis:  ");
      Serial.println(buttonPushCounter, DEC); 
    }
    else {
      
      Serial.println("PAS D'APPUI");
    }

     lastButtonState = buttonState;
  }

  if (buttonPushCounter  == 2) { 
    digitalWrite(ledPin, HIGH); 
    delay(50);
    digitalWrite(ledPin, LOW);
    delay(50); }
  if (buttonPushCounter == 3)
    digitalWrite(ledPin, HIGH);
  else if (buttonPushCounter  == 4)
      buttonPushCounter == 1;
      
      }

Merci pour vos réponses ! J'ai donc pousser mes recherches un peut plus loin et j'en suis arriver à ce code:
et maintenant mon problème et de faire revenir le compteur à 1 quand il arrive à 4 ! Comment faire ?

pas très compliqué
si compteur==4 alors compteur=1

Bonjour,

Pour compléter la réponse de infobarquee, il y a un == à la place du =
buttonPushCounter == 1; => buttonPushCounter = 1;

infobarquee:
pas très compliqué
si compteur==4 alors compteur=1

c'est pourtant ce que j'ai fait non ?

kamill:
Bonjour,

Pour compléter la réponse de infobarquee, il y a un == à la place du =
buttonPushCounter == 1; => buttonPushCounter = 1;

merci ça marche nickel, c’été sous mais yeux p**** !!!

j'ai mis compteur car la flemme de relire le code :slight_smile:
tu as trouvé donc ca va

infobarquee:
j'ai mis compteur car la flemme de relire le code :slight_smile:
tu as trouvé donc ca va

oui au top encore merci !!!

impossible maintenant d’intégrer mon programme a celui que je viens de faire >:( ! pourquoi il veut pas me le prendre alors que les deux marche tres bien tout seul :

const int buttonPin = 2;     
const int ledPin = 13;
int L1 = 8;
int L2 = 9;
int L3 = 10;
int L4 = 11;
int L5 = 12;
int EP = 7;       

int buttonPushCounter = 0;   
int buttonState = 0;         
int lastButtonState = 0;     



void setup() {
  pinMode(L1, OUTPUT);
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
  pinMode(L5, OUTPUT);
  pinMode(EP, INPUT); 
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("----------------------Vibration demo------------------------");

}


void loop() {
  
  buttonState = digitalRead(buttonPin);

  
  if (buttonState != lastButtonState) {
    
    if (buttonState == HIGH){
        buttonPushCounter++;
        delay(500);
    }

     lastButtonState = buttonState;
  }

  if (buttonPushCounter  == 1 ) { 
    digitalWrite(ledPin, HIGH); 
    delay(50);
    digitalWrite(ledPin, LOW);
    delay(50); }
  if (buttonPushCounter == 2)
    digitalWrite(ledPin, HIGH);
  else if (buttonPushCounter  == 3)
      buttonPushCounter = 1;

      {
  long measurement =TP_init();
  delay(10);
  Serial.print("measurment = ");
  Serial.println(measurement);
  if (measurement > 1500){
    delay(3000);
    digitalWrite(L1, HIGH);
    digitalWrite(L2, HIGH);
    digitalWrite(L3, HIGH);
    digitalWrite(L4, HIGH);
    digitalWrite(L5, HIGH);
    delay(40);
    digitalWrite(L1, LOW);
    digitalWrite(L2, LOW);
    digitalWrite(L3, LOW);
    digitalWrite(L4, LOW);
    digitalWrite(L5, LOW);
    delay(40);
    
  }


long TP_init()
  delay(10);
  long measurement=pulseIn (EP, HIGH); 
  return measurement;

      
      
      }

voici les messages d’erreur :

Blink.ino: In function 'void loop()':
Blink:57: error: 'TP_init' was not declared in this scope
Blink:80: error: expected initializer before 'delay'
Blink:81: error: redeclaration of 'long int measurement'
Blink:57: error: 'long int measurement' previously declared here
Blink:82: error: return-statement with a value, in function returning 'void' [-fpermissive]
Blink:86: error: expected '}' at end of input
'TP_init' was not declared in this scope

Indente correctement ton programme et tu verras que TP_Init() se retrouve dans loop()

ce que je comprend pas c'est que ce programme :

int ledPin = 13;
int EP =9;

void setup(){
  pinMode(ledPin, OUTPUT);
  pinMode(EP, INPUT); 
  Serial.begin(9600); 
  Serial.println("----------------------Vibration demo------------------------");
}
void loop(){
  long measurement =TP_init();
  delay(50);
  Serial.print("measurment = ");
  Serial.println(measurement);
  if (measurement > 1000){
    digitalWrite(ledPin, HIGH);
  }
  else{
    digitalWrite(ledPin, LOW); 
  }
}

long TP_init(){
  delay(10);
  long measurement=pulseIn (EP, HIGH); 
  return measurement;
}

marche très bien comme sa !!!

Peut être, mais dans ton programme fusionné TP_Init se retrouve dans loop()

j'ai bien essayer de le mettre plus haut mais rien y fait y'a toujours des erreurs :frowning:

il faut formater correctement ton programme et voir ce qui est mal placé.

il manque déjà plusieurs [ et }

allez soir de bonté, pas testé si ca fonctionne ou non, mais ca compile

const int buttonPin = 2;
const int ledPin = 13;
int L1 = 8;
int L2 = 9;
int L3 = 10;
int L4 = 11;
int L5 = 12;
int EP = 7;

int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;



void setup() {
  pinMode(L1, OUTPUT);
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
  pinMode(L5, OUTPUT);
  pinMode(EP, INPUT);
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("----------------------Vibration demo------------------------");

}


  long TP_init() {
    delay(10);
    long measurement = pulseIn (EP, HIGH);
    return measurement;
  }

void loop() {

  buttonState = digitalRead(buttonPin);


  if (buttonState != lastButtonState) {

    if (buttonState == HIGH) {
      buttonPushCounter++;
      delay(500);
    }

    lastButtonState = buttonState;
  }

  if (buttonPushCounter  == 1 ) {
    digitalWrite(ledPin, HIGH);
    delay(50);
    digitalWrite(ledPin, LOW);
    delay(50);
  }
  if (buttonPushCounter == 2)
    digitalWrite(ledPin, HIGH);
  else if (buttonPushCounter  == 3)
    buttonPushCounter = 1;

  {
    long measurement = TP_init();
    delay(10);
    Serial.print("measurment = ");
    Serial.println(measurement);
    if (measurement > 1500) {
      delay(3000);
      digitalWrite(L1, HIGH);
      digitalWrite(L2, HIGH);
      digitalWrite(L3, HIGH);
      digitalWrite(L4, HIGH);
      digitalWrite(L5, HIGH);
      delay(40);
      digitalWrite(L1, LOW);
      digitalWrite(L2, LOW);
      digitalWrite(L3, LOW);
      digitalWrite(L4, LOW);
      digitalWrite(L5, LOW);
      delay(40);

    }

  }
  
}

merci c'est cool tu ma bien fait avancer, j'ai re-modifier un peut tout sa et la première partit marche pas trop mal, la ou sa merde maintenant c'est quand j'appuis une deuxième fois sur le BP, il ne me prend pas ma commande !!!

    const int buttonPin = 2;
const int ledPin = 13;
int L1 = 8;
int L2 = 9;
int L3 = 10;
int L4 = 11;
int L5 = 12;
int EP = 7;

int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;



void setup() {
  pinMode(L1, OUTPUT);
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
  pinMode(L5, OUTPUT);
  pinMode(EP, INPUT);
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("--------Mesure des Vibrations et Compteur Bouton-------");

}


  long TP_init() {
    delay(10);
    long measurement = pulseIn (EP, HIGH);
    return measurement;
  }

void loop() {

  buttonState = digitalRead(buttonPin);


  if (buttonState != lastButtonState) {

    if (buttonState == HIGH) {
      buttonPushCounter++;
      delay(500);
       Serial.println("APPUI"); 
      Serial.print("nombre d'appuis:  ");
      Serial.println(buttonPushCounter, DEC);
    }
    else {
      Serial.println("PAS D'APPUI");
    }
    

    lastButtonState = buttonState;
  }

  if (buttonPushCounter  == 1 ) {
    digitalWrite(ledPin, HIGH);
    delay(50);
    digitalWrite(ledPin, LOW);
    delay(50);
    {
    long measurement = TP_init();
    delay(10);
    Serial.print("measurment = ");
    Serial.println(measurement);
    if (measurement > 1500) {
      delay(3000);
      digitalWrite(L1, HIGH);
      digitalWrite(L2, HIGH);
      digitalWrite(L3, HIGH);
      digitalWrite(L4, HIGH);
      digitalWrite(L5, HIGH);
      delay(400);
      digitalWrite(L1, LOW);
      digitalWrite(L2, LOW);
      digitalWrite(L3, LOW);
      digitalWrite(L4, LOW);
      digitalWrite(L5, LOW);
      delay(400);
      buttonPushCounter = 0;

    }
  }
  if (buttonPushCounter == 2)
    digitalWrite(ledPin, HIGH);
  else if (buttonPushCounter  == 3)
    buttonPushCounter = 1;

  

  }
  
}

j'ai reprit mon code depuis le début et le souci était les { } mal placer ou oublier, j'ai bien compris le truc maintenant !!! merci a vous de votre aide !!! :slight_smile:

Je voudrais faire une petite modification mais je n'y arrive pas. Sur la deuxième partit de mon programme je voudrais rajouter la possibilité de rompre le delay en appuyant sur mon BP pour éteindre les Leds ! quelle fonction utiliser :

if (buttonPushCounter == 2)
{    
  digitalWrite(ledPin, HIGH);
  long measurement = TP_init();
  delay(250);
  Serial.print("measurment = ");
  Serial.println(measurement);

if (measurement > 1500)
{
  
  digitalWrite(L1, HIGH);
  digitalWrite(L2, HIGH);
  digitalWrite(L3, HIGH);
  digitalWrite(L4, HIGH);
  digitalWrite(L5, HIGH);
  digitalWrite(L6, HIGH);
  digitalWrite(L7, HIGH);
  digitalWrite(ledPin, HIGH);
  delay(60000);
  digitalWrite(L1, LOW);
  digitalWrite(L2, LOW);
  digitalWrite(L3, LOW);
  digitalWrite(L4, LOW);
  digitalWrite(L5, LOW);
  digitalWrite(L6, LOW);
  digitalWrite(L7, LOW);
  digitalWrite(ledPin, LOW);
  buttonPushCounter = 0;
  

}
}