Problème de PIN

Bonjour,

J’ai réalisé le programme suivant qui capte un régime et je voudrai qu’il active un relai pour une condition de régime de rotation et si un bouton (poignee sur le code) est activé.
Voici mon programme :

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#define tachoPin 2 // Broche du TACHOMETRE
float value=0;
volatile float rev=0;
int rpm;
int oldtime=0;
int time;
LiquidCrystal_I2C lcd(0x27,2,16); // set the LCD address to 0x27 for a 16 chars and 2 line display
const int poignee = 12;
const int EV1 = 9;
const int chift = 6;
//int compteurstate = 0;
int poigneestate = 0;
byte compteur_cinq = 0;

void isr() //interrupt service routine
{
rev++;
}

void setup()
{
lcd.begin(16,2); //initialize LCD
attachInterrupt(digitalPinToInterrupt(tachoPin), isr, RISING); //attaching the interrupt

Serial.begin(115200);
pinMode(poignee, INPUT);
pinMode(EV1, OUTPUT);
digitalWrite(EV1, HIGH);//le relais n'est pas collé
pinMode(chift, OUTPUT);
digitalWrite(chift, HIGH);//le relais n'est pas collé

}

void loop()
{
delay(1000);
detachInterrupt(digitalPinToInterrupt(tachoPin)); //detaches the interrupt
time=millis()-oldtime; //finds the time 
rpm=(rev/time)*60000; //calculates rpm
oldtime=millis(); //saves the current time
rev=0;
lcd.init(); // initialize the lcd 
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("__TACHOMETER__");
lcd.setCursor(2,1);
lcd.print( rpm);
lcd.print(" RPM");
attachInterrupt(digitalPinToInterrupt(tachoPin), isr, RISING);

poigneestate = digitalRead(poignee);

Serial.print("poignee = ");Serial.print(poigneestate);

Serial.print(".....compteur = ");
//Serial.print(compteurstate);
Serial.print(rpm);
Serial.print(".....compteur_cinq = ");
Serial.println(compteur_cinq);

if ( rpm>=100 && poigneestate == HIGH)//si les conditions requises sont vraies
{ if (compteur_cinq <=5){
digitalWrite(EV1, LOW); //le relais colle
digitalWrite(chift, LOW);
Serial.println("relais colle pour 2 secondes ");
delay(2000); //pour 2 secondes. il faudra remplacer 2000 par 25
compteur_cinq++; //le compteur5 s'incrémente de 1 pion
digitalWrite(EV1, HIGH); //le relais n'est plus collé
digitalWrite(chift, HIGH);
delay (2000);}
else //sinon, si les conditions requises ne sont pas vraies
{
digitalWrite(EV1, HIGH); //on ne colle pas le relais 
digitalWrite(chift, HIGH);
Serial.print("poignee = ");
Serial.print(poigneestate);
Serial.print(".....compteur = ");
//Serial.print(compteurstate);
Serial.print(".....compteur_cinq = ");Serial.println(compteur_cinq);

}
}
else{
Serial.print(".....compteur_cinq = ");Serial.print(compteur_cinq);
Serial.println("...relais ne collera plus ");}
}

Le programme capte un régime grace à un tachymètre et active un relai quand un bouton ( appelé poignee dans mon cas) est en valeur HIGH. Mon problème est le suivant: Le pin poignee passe en HIGH de temps en temps sans que je ne touche au bouton, je ne comprends pas pourquoi et j’aimerai comprendre.
Merci de votre aide.

Erreur classique de débutant.

Si tu ne câbles qu'un contact sans résistance pour fixer un potentiel quand le contact est ouvert le fil de liaison est en l'air et se comporte comme une antenne réceptrice.

Dans le pinMode() il faut activer les résistances internes du micro (les "pull-up" ), elles font entre 30 et 70 kohms.

Ce n'est pas fini à la fermeture le contact va avoir des rebonds qui peuvent se compter en dizaines : la lame de contact est en acier ressort. Ils seront considérés par le logiciel comme autant d'appuis volontaires.

Soit tu câble un condensateur de 100nF en parallèle avec le contact, les effets des rebonds seront totalement suprimés, soit tu utilises une méthode logicielle (debouncing in english) et les effets seront toujours présents mais il seront masqués.

hello
les init lcd dans la loop ?? plutot dans le setup
ainsi que le texte qui reste en fixe.

dans la loop, tu bloques le prg pendant une seconde..................
un if et une comparaison de temps avec milli() te permettrait de scruter en permanence la poignée et non une fois par seconde.

J'ai fais les modifications je vais essayer merci