Double bouton

Bonjour, comme vous le comprendrez, je suis assez débutant, et donc paraître nul, mais je suis bloquer dans un programme à laquelle un deuxième bouton doit augmenter une variable x de 100, j'ai également un deuxième petit problème, je voudrais écrire un mot avant l'affichage de ma variable mais le programme m'indique qu'il y a un problème.
Voici mon montage, je n'ai aucun problème avec le +10

Voici le programme:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

const int buttonPin = 2;    
const int buttonPin2 = 4;
LiquidCrystal_I2C lcd(0x27, 16, 2);
int x;

int buttonState = 0; 
int buttonState2 = 0; 

void setup() {
  // initialize the LCD
  lcd.begin();
  lcd.backlight();
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  x=0;
}

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

  if(buttonState == HIGH) {
    x+=10;
    lcd.clear();
    lcd.backlight();
    lcd.print("Poids", x);   // ici est mon deuxième problème, la variable fonctionne si je n'affiche pas de texte, en recherchant j'ai vue qu'il pouvais s'agir de int qu'il fallait mettre, mais un autre message d'erreur s'affiche.
  }
  else if(buttonState2 == HIGH){   //Toute cette partie ne répond pas quand j'appuie sur le deuxième bouton
    x+=100;
    lcd.clear();
    lcd.backlight();
    lcd.print(x);
  }
  delay(250);
}

Bonjour,
  lcd.print("Poids", x);est incorrect.

Il faut le couper en 2

   lcd.print("Poids ");
   lcd.print(x);

Merci, c'est déjà ça de résolu

Pour ton autre problème est ce que tu as bien des pull down sur les boutons ?
Affiche l'état des boutons sur le moniteur série avec des Serial.println()

C'est quoi un pull down ? du moins je crois pas que sa soit la traduction direct que je pense.
Et je vais apprendre à utiliser le moniteur série ^^

La résistance de 10k est la résistance de pulldown. Elle est obligatoire sinon quand ton bouton est relaché, l'entrée est en l'air et dans un état indéterminé.

Alors oui à chaque bouton, et j'ai du mal avec le moniteur série, j'ai ajouté Serial.begin(9600); à void setup mais après je fais quoi ? j'ai aussi ajouté les variables buttonPushCounter correspondant aux nombres de cliques sur les boutons, mais sur le moniteur de série je sais pas quoi envoyer, quand j'écrie ce que tu m'a donné, je n'ai rien qui s'affiche.

Tu affiches l'état des boutons
Après la lecture des boutons tu fais

Serial.println(buttonState);
Serial.println(buttonState2);

Tu peux aussi faire un affichage plus complet avec du texte

Serial.print("bouton: ");
Serial.println(buttonState);
...

Ok c'est bon, donc le premeir bouton (rouge sur la photo) et qui ajoute +10 fonctionne bien, de toute façon je le vois sur l'écran LCD et le deuxième bouton reste tout le temps à 0

Il ne te reste plus qu'a voir si c'est un problème de cablage.

C'est bon je viens de trouver le problème, il s'agit de la borne + du bouton jaune qui était sur une borne - ...problème bête, de toute façon je pense revenir assez rapidemment, étant assez débutant je vais avoir pas mal de question, merci pour tout.

Sur une breadboard, il arrive qu'il y ait de faux contacts, surtout avec les boutons qui on des pattes pas très adaptées à être enfichée sur une breadboard.
Essais de déplacer le bouton qui ne fonctionne pas et de le recâbler un peu plus loin sur la plaque.

Ah...ce site m'empêche de modifier mon message avant 5 minutes...regarder ma réponse avant, sinon mon programme n'est pas trop long ? je pourrais pas optimiser un peu tout ça ? pour évitez de recopiez plusieurs fois les mêmes choses.

Tu peux éviter de dupliquer les instructions d'affichage comme ceci par exemple:

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

  if(buttonState == HIGH || buttonState2 == HIGH)
  {
    if (buttonState==HIGH)
      x+=10;
    else
      x+=100;
    lcd.clear();
    lcd.print("Poids ");
    lcd.print(x);
  }
  delay(250);
}

Je crois qu'il faut avoir posté un certain nombre de message pour supprimer la tempo et pouvoir poster de nouveau immédiatement.

Merci ^^ c'est bien mieux
Est ce que c'est normal quand j'éteind la carte, le programme s'efface ? Je peux pas le stocker et éviter de repasser par le pc ?
Et je m'avance,

J'essaye d'afficher € sauf que sa fonctionne pas, j'ai essayer

String seven = "€";
[...]
void setup() {
  lcd.print(seven);
}

et

uint8_t euro[8]  = {0xE2, 0x82, 0xAC};

void setup()
{
   lcd.createChar(0, euro);
   lcd.write(0);

Mais aucun ne fonctionne, le premier affichant un beta et une lettre bizarre, montrant l'incompatibilité et le second qui bloque tout

Bonjour,

Normalement ta table euro[] devrait avoir 8 valeurs et non 3.
Cependant il n'y a aucune raison que ça bloque, mais il faut peut être faire le createChar() après le lcd.begin().

Mais je met quoi avant ? Et je met quoi comme valeur ?

€ est un caractère spécial qui n'est pas encodé sur un seul octet. Donc le String que tu génères n'est pas bon, (c'est pour ça que tu vois plusieurs caractères exotiques).
En plus lorsque tu crées un caractère spécial dans l'afficheur à cristaux liquides il doit falloir l'adresser avec un code particulier (voir la doc de l'afficheur)
Dans le tableau uint8_t euro[8] il faut mettre les octets qui décrivent le graphisme du caractère à créer.

Merci pour votre aide, en regardant les documents techniques de mon écran, le caractère € n'apparait pas, donc je pense qu'il soit possible "facilement" de l'afficher, j'ai maintenant pas mal avancé, et je suis bloqué à une temporisation, j'aimerais qu'au quatrième, quand j'appuie longtemps, celui-ci m'affiche un menu, sauf que moyen de temporiser un appuie, sur le programme j'ai repris des informations sur le net mais j'ai l'impression que c'est un peu n'importe quoi ><
Ah, j'ai aussi une autre question y'a pas moyen de mettre un if dans un else if ?

Le programme pas vraiment fonctionnel avec la temporisation:

#define int0PushButton 2
#include <Wire.h>
#define THRESHOLD 3000 //ms 
#include <LiquidCrystal_I2C.h>
const int buttonPin = 2;     // the number of the pushbutton pin
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 6;
LiquidCrystal_I2C lcd(0x27, 16, 4);
int x=0;
int verif=0;
int prix=0;
int amande=18;
int cajou=15.5;
int objet;
int state= -1;
unsigned long millisStart;
boolean longPush;

void Reagir() {
  state = digitalRead(int0PushButton);
}

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

void setup() {

  attachInterrupt(0, Reagir, CHANGE);
  lcd.begin();
  lcd.backlight();
  lcd.print("Entrez une masse:");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Poids: ");
  lcd.setCursor(0, 2);
  lcd.print("Prix/kg: 18E");
  lcd.setCursor(0, 0);
  lcd.print("Amandes");
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(buttonPin4, INPUT);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  buttonState2 = digitalRead(buttonPin2);
  buttonState3 = digitalRead(buttonPin3);
  buttonState4 = digitalRead(buttonPin4);

  if(buttonState == HIGH) {
    x+=10;
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Poids: ");
    lcd.print(x);
    lcd.print(" g");
    lcd.setCursor(0, 2);
    lcd.print("Prix/kg: ");
    lcd.print(amande);
    lcd.print("E");
    lcd.setCursor(0, 0);
    lcd.print("Amandes");
  }
  else if(buttonState2 == HIGH){
    x+=100;
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Poids: ");
    lcd.print(x);
    lcd.print(" g");
    lcd.setCursor(0, 2);
    lcd.print("Prix/kg: ");
    lcd.print(amande);
    lcd.print("E");
    lcd.setCursor(0, 0);
    lcd.print("Amandes");
  }
  else if(buttonState3 == HIGH){
    verif=x;
    lcd.clear();
    lcd.setCursor( 0, 1);
    lcd.print("Votre masse: ");
    lcd.print(verif);
    lcd.print(" g");
    lcd.setCursor(0, 2);
    lcd.print("Prix/kg: ");
    lcd.print(amande);
    lcd.print("E");
    lcd.setCursor(0, 3);
    lcd.print("Votre prix: ");
    lcd.print((verif*pow(10,-3))*18);
    lcd.print("E");
    lcd.setCursor( 0, 0);
    lcd.print("Amandes");
  }
  else if (buttonState4 == 1) {
    state = -1;
    millisStart = millis();
    lcd.print("Afficher quelue chose");

    if  (state == 1) {
      state = -1;
      longPush = (millis() - millisStart) > THRESHOLD;
      x=0;
      verif=0;
      lcd.clear();
      lcd.print("Entrez une masse:");
      delay(2000);
      lcd.clear();
      lcd.setCursor(0, 1);
      lcd.print("Poids: ");
      lcd.setCursor(0, 2);
      lcd.print("Prix/kg: 18E");
      lcd.setCursor(0, 0);
      lcd.print("Amandes");
    }
  }
  delay(210);
}

et le programme fonctionnel sans tempo:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int buttonPin = 2;     // the number of the pushbutton pin
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 6;
LiquidCrystal_I2C lcd(0x27, 16, 4);
int x=0;
int verif=0;
int prix=0;
int amande=18;
int cajou=15.5;
int objet;

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

void setup() {
  lcd.begin();
  lcd.backlight();
  lcd.print("Entrez une masse:");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Poids: ");
  lcd.setCursor(0, 2);
  lcd.print("Prix/kg: 18E");
  lcd.setCursor(0, 0);
  lcd.print("Amandes");
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  pinMode(buttonPin3, INPUT);
  pinMode(buttonPin4, INPUT);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  buttonState2 = digitalRead(buttonPin2);
  buttonState3 = digitalRead(buttonPin3);
  buttonState4 = digitalRead(buttonPin4);

  if(buttonState == HIGH) {
    x+=10;
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Poids: ");
    lcd.print(x);
    lcd.print(" g");
    lcd.setCursor(0, 2);
    lcd.print("Prix/kg: ");
    lcd.print(amande);
    lcd.print("E");
    lcd.setCursor(0, 0);
    lcd.print("Amandes");
  }
  else if(buttonState2 == HIGH){
    x+=100;
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Poids: ");
    lcd.print(x);
    lcd.print(" g");
    lcd.setCursor(0, 2);
    lcd.print("Prix/kg: ");
    lcd.print(amande);
    lcd.print("E");
    lcd.setCursor(0, 0);
    lcd.print("Amandes");
  }
  else if(buttonState3 == HIGH){
    verif=x;
    lcd.clear();
    lcd.setCursor( 0, 1);
    lcd.print("Votre masse: ");
    lcd.print(verif);
    lcd.print(" g");
    lcd.setCursor(0, 2);
    lcd.print("Prix/kg: ");
    lcd.print(amande);
    lcd.print("E");
    lcd.setCursor(0, 3);
    lcd.print("Votre prix: ");
    lcd.print((verif*pow(10,-3))*18);
    lcd.print("E");
    lcd.setCursor( 0, 0);
    lcd.print("Amandes");
  }
  else if (buttonState4 == 1) {
      x=0;
      verif=0;
      lcd.clear();
      lcd.print("Entrez une masse:");
      delay(2000);
      lcd.clear();
      lcd.setCursor(0, 1);
      lcd.print("Poids: ");
      lcd.setCursor(0, 2);
      lcd.print("Prix/kg: 18E");
      lcd.setCursor(0, 0);
      lcd.print("Amandes");
  }
  delay(210);
}