Skocz do zawartości

NodeMcu v3 Relay triggeruje button


Gerv93

Pomocna odpowiedź

Cześć,

Mam dziwny problem - podłączyłem Relay 5V bezpośrednio do NodeMCU v3 wraz z buttonem oraz wyświetlaczem. Napisałem testowy kod:

Wszystko byłoby dobrze gdyby nie fakt ze naciśnięcie przycisku zmienia wartość na wyświetlaczu -> zmienia stan relaya, robi printy w serialu, i za 3 sekundy wszystko dzieje się 2 raz mimo jednego naciśnięcia przycisku. Jakieś pomysły co zepsułem?


#include <ezButton.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define BUTTON_PIN_1 18  
#define SCREEN_WIDTH 128 // OLED width,  in pixels
#define SCREEN_HEIGHT 64 // OLED height, in pixels
#define RELAY_PIN 23 
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
ezButton button1(BUTTON_PIN_1);  
int poj[5] = { 20, 25, 30, 35, 40 };
int i = 0;
void setup() {
  Serial.begin(9600);
  pinMode(RELAY_PIN, OUTPUT);
   digitalWrite(RELAY_PIN, LOW);
  button1.setDebounceTime(100);  // set debounce time to 100 milliseconds
   if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("failed to start SSD1306 OLED"));
    while (1);
  }
  oled.clearDisplay(); // clear display
  oled.setTextSize(1);         // set text size
  oled.setTextColor(WHITE);    // set text color
  oled.setCursor(0, 10);       // set position to display
  oled.println("Zaczynamy"); // set text
  oled.display();              // display on OLED
}

void loop() {
  button1.loop();  // MUST call the loop() function first

  int button1_state = button1.getState();  // the state after debounce
  if (button1.isPressed()){
    Serial.print("POSZLO");
    i = i + 1;
    Serial.print(i);
    if(i > 4){
      i = 0;
    }
    oled.clearDisplay(); // clear display
    oled.setTextSize(2);         // set text size
    oled.setTextColor(WHITE);    // set text color
    oled.setCursor(0, 10);       // set position to display
    oled.println(poj[i]); // set text
    oled.display();              // display on OLED
    digitalWrite(RELAY_PIN, HIGH); 
    Serial.print("wysoki");
    delay(3000);
    digitalWrite(RELAY_PIN, LOW);
    Serial.print("niski");
  }
}

 

Link do komentarza
Share on other sites

(edytowany)

Nie używałem nigdy ezButton, ale Bounce2 i metody fell/rose nigdy mnie nie zawiodły. Atmegi, esp8266, esp32 i rpi pico.

Edytowano przez ethanak
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Nie sądziłem że to może być wina biblioteki a raczej błędu w połączeniu/mojej niewiedzy a jednak zmiana na Bounce2 rozwiązała problem! Dziękuje!

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.