Bug? détéction de préssion

Bonjour, je créer un circuit électronique avec plusieurs capteurs dans le cadre d'un projet. Cependant j'ai un gros bug que je ne comprend pas. En effet j'ai mis le pin D6 de mon arduino nano en Read. Lorsque j'appuie sur un bouton, ce dernier passe a high car il y a du courant. Le truc c'est que j'arrete d'appuiyer sur le bouton, bah ça reste sur high plusieurs seconde (8s a peu près) ce qui n'est pas du tout normal... des idée?
Merci d'avance :slight_smile:

j'ai oublier de vous donner mon code, OOPS.
Le voici:

#include "EmonLib.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
EnergyMonitor emon1;

int capteur_courant= 0;
float C_temp_C1= 1;
float C_temp_A1= 2;
float C_temp_A2= 3;
int Switch_state =  6;
int mosfet = 10;
int tension= 230;
float conso = 0;
unsigned long c_time= 0;
int tempmax = 150;


void setup() {
  // put your setup code here, to run once:
  emon1.current(capteur_courant, 17.2);
  lcd.init();
  lcd.backlight();
  pinMode(Switch_state, INPUT);
  pinMode(mosfet, OUTPUT);
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
  lcd.clear();
  while (true) {
    if (digitalRead(Switch_state)==1) { //if the bouton is push, then my mosfet turn on
      digitalWrite(mosfet, 1);
    }
    else {
      digitalWrite(mosfet, 0);
    }
    Serial.println(digitalRead(Switch_state)); // checking my pin state for testing
    //everything seems ok from there, no bug below for the moment.
    c_time=millis();
    double Irms = emon1.calcIrms(1480);
    int puissance=Irms*tension;
    int temp_C1= analogRead(C_temp_C1) * (5.0 / 1023.0 * 100.0);
    int temp_A1= analogRead(C_temp_A1) * (5.0 / 1023.0 * 100.0);
    int temp_A2= analogRead(C_temp_A2) * (5.0 / 1023.0 * 100.0);
    if (temp_C1 > tempmax or temp_A1 > tempmax or temp_A2 > tempmax) {
      for (int timer = 300; timer>0; timer--) {
        lcd.setCursor(0,0);
        lcd.print("Surchauffe interne,");
        lcd.setCursor(0,1);
        lcd.print("arret force.");
        lcd.setCursor(0,2);
        lcd.print("Patientez:");
        lcd.setCursor(0,3);
        if (int(timer%60)>=10) {
          lcd.print(String(int(timer/60)) + ":" + String(int(timer%60)));
        }
        else {
          lcd.print(String(int(timer/60)) + ":0" + String(int(timer%60)));
        }
        delay(950);
      }
      break;
    }
    lcd.setCursor(0,0);
    lcd.print("P:" + String(puissance) + "W          ");
    lcd.setCursor(0,1);
    lcd.print("Conso:" + String(conso) + "Wh");
    lcd.setCursor(0,2);
    lcd.print("temp:");
    for ( int i=0; i!= 20-5-String(int(temp_C1)).length();i++) {
      lcd.print(" ");
    }
    lcd.print(temp_C1);
    lcd.setCursor(0,3);
    lcd.print(temp_A1);
    for ( int i=0; i!= 20-String(int(temp_A1)).length()-String(int(temp_A2)).length(); i++) {
      lcd.print(" ");
    }
    lcd.print(temp_A2);
    delay(1000);
    conso += puissance*((float(millis()-c_time))/1000/3600); //1000*3600 permet la conversion des millisecondes en heures
  }
  

}

C'est basique : soit ajouter une résistance de pull-down (classiquement 47K) en // sur le bouton, soit câbler le bouton entre GND et entrée digitale : pinMode(pin, INPUT_PULLUP), et tester l'état LOW.

Bonjour, je ne compris ni pourquoi ajouter une résistance de "pull-down" en parallèle ni cette histoire de branchement sur le ground, pourrais tu développer un peu? (je suis débutant :confused:

Lire ceci :

Paragraphe 2.6.1.5. PULLUP & PULLDOWN

On peut également tout lire si l'on est débutant. Il y a forcément des points intéressants.

Merci, je vais lire ça tranquillement ^^

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.