Problème récupérer valeur capteur

Bonjour, j'aimerai pouvoir après l'appuie d'un bouton, donc au relâchement, avoir l'apparition d'une phrase, sauf que je ne veux pas qu'elle s'affiche avant l'appuie, étant du même état. J'ai essayé

if(buttonState == HIGH) { 
    if(buttonState == LOW ) {
      verif=scale.get_units(3), 0;
      lcd.setCursor(0, 3);
      lcd.print("Votre prix: ");
      lcd.print(verif*0.015);
      lcd.print("E");
      lcd.print("     ");
    }
  }

Sauf qu'il n'affiche rien, en même temps je ne pensais que sa allais être aussi simple

Bonjour,

Il faut que tu fasses ton traitement quand le bouton passe de HIGH à LOW.
Pour ça il faut que tu mémorises l'état précédent du bouton et tu fais quelque chose comme ça:

if (buttonState==LOW && previousButtonState==HIGH)
{
 // --- traitement ici
}
previousButtonState=buttonState;

kamill:
Bonjour,

Il faut que tu fasses ton traitement quand le bouton passe de HIGH à LOW.
Pour ça il faut que tu mémorises l'état précédent du bouton et tu fais quelque chose comme ça:

if (buttonState==LOW && previousButtonState==HIGH)

{
// --- traitement ici
}
previousButtonState=buttonState;

Tu déclare la variable après son utilisation ? C'est pas bizarre ?
EDIT: ça ne fonctionne pas, il dise que 'previousButtonState' was not declared in this scope

Non, il n'y a pas de déclaration. C'est un extrait pour montrer le principe. Les deux variables doivent bien sur être déclarées avant.

Mais du coup buttonState et previousbuttonState sont pareil ?

non, comme son nom l'indique previousbuttonState c'est buttonState à la lecture précédente du bouton

ils sont identiques à la sortie de loop, mais à la nouvelle exécution de loop, après lecture du bouton, ils peuvent être différents.

Pourquoi je n'arrive pas a la déclarer ? Ça m'affiche toujours un message d'erreur

Mets ton code

Excusez-moi pour le temps:

#include <LiquidCrystal_I2C.h>
#define int0PushButton 2
#include <Wire.h>
#define THRESHOLD 2000 //ms 
#include "HX711.h"
#define DOUT  10
#define CLK  11

const int buttonPin = 2;     // the number of the pushbutton pin
const int buttonPin2 = 3;

LiquidCrystal_I2C lcd(0x27, 16, 4);
HX711 scale(DOUT, CLK);
float calibration_factor = 312; //avec cette valeur j'obtiens un peu prêt la valeur réel

int x=0;
int verif=0;
int prix=15;
int amande=18;
int cajou=15.5;
int objet;
unsigned long millisStart;
boolean longPush;

// variables will change:
int buttonState = 0; 
int buttonState2 = 0; 


void setup() {
  lcd.begin();
  lcd.backlight();
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  scale.set_scale();
  scale.tare(); //Reset the scale to 0
  long zero_factor = scale.read_average(); //Get a baseline reading
}

void loop() {
  buttonState = digitalRead(buttonPin);
  buttonState2 = digitalRead(buttonPin2);
  previousButtonState=buttonState;
  scale.set_scale(calibration_factor);
  lcd.setCursor(0, 0);
  lcd.print("Aliment: Amandes");
  lcd.setCursor(0, 1);
  lcd.print("Prix/kg:");
  lcd.print(prix);
  lcd.print("E");
  lcd.setCursor(0, 2);
  lcd.print("Poids: ");
  lcd.print(scale.get_units(4), 0);
  lcd.print("     ");

  if (buttonState==LOW && previousButtonState==HIGH) { 
      verif=scale.get_units(3), 0;
      lcd.setCursor(0, 3);
      lcd.print("Votre prix: ");
      lcd.print(verif*0.015);
      lcd.print("E");
      lcd.print("     ");
    
  }
  
    else if(buttonState2 == HIGH) {
      scale.set_scale();
      scale.tare(); //Reset the scale to 0
    }
    /*Pour le menu
    else
    {
      if ((millis() - millisStart) > THRESHOLD)
      {
        lcd.clear();
        lcd.print(F("Menu ligne 1"));
        delay(2000);
      }
    }
  }
  else
  {
    state = 0;
  }
  */
  
}

previousButtonState n'est pas déclaré

De plus il doit être affecté après le traitement

void loop() {
  static int previousButtonState=HIGH;

  buttonState = digitalRead(buttonPin);
  buttonState2 = digitalRead(buttonPin2);
  scale.set_scale(calibration_factor);
  lcd.setCursor(0, 0);
  lcd.print("Aliment: Amandes");
  lcd.setCursor(0, 1);
  lcd.print("Prix/kg:");
  lcd.print(prix);
  lcd.print("E");
  lcd.setCursor(0, 2);
  lcd.print("Poids: ");
  lcd.print(scale.get_units(4), 0);
  lcd.print("     ");

  if (buttonState == LOW && previousButtonState == HIGH) {
    verif = scale.get_units(3), 0;
    lcd.setCursor(0, 3);
    lcd.print("Votre prix: ");
    lcd.print(verif * 0.015);
    lcd.print("E");
    lcd.print("     ");

  }
  else if (buttonState2 == HIGH) {
    scale.set_scale();
    scale.tare(); //Reset the scale to 0
  }

  previousButtonState = buttonState;
  /*Pour le menu
  else
  {
    if ((millis() - millisStart) > THRESHOLD)
    {
      lcd.clear();
      lcd.print(F("Menu ligne 1"));
      delay(2000);
    }
  }
  }
  else
  {
  state = 0;
  }
  */

}

Merci, sauf qu'il s'affiche directement sans appuyer sur le bouton, elle doit s'afficher après l'appuie.

Comment sont cablés tes boutons?

Le bouton qui est utilisé pour cette fonction est celui tous à gauche (donc connecté à D2), sinon tous le reste fonctionne.

Je ne vois pas ce que tu as voulu faire.
Je ne vois ni pullup ni pulldown.

Normal, je me contente juste de faire en sorte que le circuit arduino connaisse l'état du bouton, sinon le circuit avec les relais (qui sont connectés à un moteur) et le bouton du milieu sont donc un autre circuit, mais sa ne m'empêche pas d'utiliser le bouton pour connaître état et donc faire en sorte que quand il soit appuyer puis relâcher cela affiche le prix.

J'a mal compris votre réponse, en faite quand je met un pulldown, et bien le moteur ne fonctionne plus, le bouton doit être relier à du 3V (ici du 5V) directement pour que sa fonctionne, contrairement au bouton tous à droite qui ne sert pas au montage du moteur.

kamill:
Je ne vois pas ce que tu as voulu faire.
Je ne vois ni pullup ni pulldown.

Mais sa ne m’empêche pas de l’utiliser ?

En modifiant quelque vlaur, sa fonctionne, au relachement, la valeur s'affiche, j'ai remplacer   static int previousButtonState=HIGH; par LOW, mainteannt j'aimerai pouvoir rénitialiser toutes mes valeurs avec le bouton qui est déjà utlisé pour faire le TARE, j'essaye avec lcd.clear() sauf qu'après je n'ai plus rien, écran blanc. Et j'ai aussi un problème qui est survenu, mes 2 premières lettre, première colonne ne s'affiche plus, du moins après l'appuie sur un bouton.

Si ça fonctionne à l'envers, il faut que tu remplace

 if (buttonState == LOW && previousButtonState == HIGH) {

par

 if (buttonState == HIGH && previousButtonState == LOW) {

kamill:
Si ça fonctionne à l'envers, il faut que tu remplace

 if (buttonState == LOW && previousButtonState == HIGH) {

par

 if (buttonState == HIGH && previousButtonState == LOW) {

Si je fais ça, le prix s'affiche directment après l'appuie, si je laisse if (buttonState == LOW && previousButtonState == HIGH) {
Il n'y a plus de problème, mais comment rénitialiser toute ces valeurs ? du moins en évitant l'écran blanc.