Tara Button macht nichts

Hallo zusammen,

ich habe mich die letzten 2 wochen damit beschäftigt eine Waage zu Basteln mit ensprechendem Code aber irgendwie funktioniert mein Tara Button nicht villeicht kann sich einer von euch das mal ansehen und mir verraten wo der Fehler liegt.

#include <LiquidCrystal_I2C.h>
#include <HX711_ADC.h>
#if defined(ESP8266)|| defined(ESP32) || defined(AVR)
#include <EEPROM.h>
#endif
LiquidCrystal_I2C lcd(0x27,16,2);

//pins:
const int HX711_dout = 4; //mcu > HX711 dout pin
const int HX711_sck = 5; //mcu > HX711 sck pin

//HX711 constructor:
HX711_ADC LoadCell(HX711_dout, HX711_sck);

const int calVal_eepromAdress = 0;
unsigned long t = 0;

const int buttonPin = 8; // Button Pin
int buttonState = 0; // Variable zum Auslesen des Tasterstatus


void setup() 
{
  lcd.init();
  lcd.backlight();
  Serial.begin(57600); delay(10);
  Serial.println();
  Serial.println("Starting...");

  LoadCell.begin();
  float calibrationValue;
  calibrationValue = 696.0;
#if defined(ESP8266)|| defined(ESP32)
  EEPROM.begin(512);
#endif
  EEPROM.get(calVal_eepromAdress, calibrationValue); 

  unsigned long stabilizingtime = 2000; 
  boolean _tare = true; 
  LoadCell.start(stabilizingtime, _tare);
  if (LoadCell.getTareTimeoutFlag()) {
    Serial.println("Timeout, check MCU>HX711 wiring and pin designations");
    while (1);
  }
  else {
    LoadCell.setCalFactor(calibrationValue);
    Serial.println("Startup is complete");
  }
}

void loop() {
  static boolean newDataReady = false;
  const int serialPrintInterval = 0; 
  if (LoadCell.update()) {
    newDataReady = true;
  }

  buttonState = digitalRead(buttonPin);

    if (buttonState == HIGH) {
    LoadCell.tareNoDelay();
  }

  if (newDataReady) {
    if (millis() > t + serialPrintInterval) {
      float i = LoadCell.getData();
      Serial.print("Load_cell output val: ");
      Serial.println(i);
      // LCD Print
      lcd.clear();  
      lcd.setCursor(0, 0); 
      lcd.print("test");
      lcd.setCursor(0, 1);  
      lcd.print("Weight(g): " + String(int(i)));
      newDataReady = false;
      delay(500);
      t = millis();
    }
  }
}

Vielen Dank

Ich meine, standardmäßig ist der Modus eines Pins INPUT, wenn er nicht mit pinMode gesetzt wird (das hast Du nicht gemacht). Wenn Dein Button also nichts macht, dann ist er wahrscheinlich falsch angeschlossen.

Da Du in Deinem Code auf HIGH abfragst, muss der Button an VCC mit einem Pulldown Widerstand gegen GND angeschlossen sein.

Sicherheitshalber sollte in der setup() Funktion die Anweisug pinMode(buttonPin,INPUT) verwendet werden. Oder Du schließt den Button vom Pin direkt gegen GND an, dann muss die Anweisung pinMode(buttonPin,INPUT_PULLUP) erfolgen und in deinem Code muss die Abfrage
if (buttonState == LOW) erfolgen.

Hi, ich kann im setup() deines Sketches irgends die einrichtung des Button-Pins sehen. es fehlt also meiner meinung nach die Anweisung :

pinMode(buttonPin, INPUT);
//oder
pinMode(buttonPin, INPUT_PULLUP);

Damit sorgst Du dafür, dass der Pin, an dem Dein Button angeschlossen ist, als Eingang konfiguriert wird. Ib do INPUT oder INPUT_PULLUP benötigst hängt davon ab, wie dein Button angeschlossen ist, also ob er nach VCC (3,3V beim ESP) -> INPUT oder nach GND -> INPUT_PULLUP schaltet. Wenn dein Button nach VCC schaltet benötigst du vom eingangspin nach GND noch einen Widerstand, so zwischen 2k Ohm und 10 kOhm.

Bei AVRs ist das so.
Bei anderen µC muss das nicht.

Ja ... darum habe ich auch "Ich meine" geschrieben. Meine Kristallkugel ließ mich annehmen, dass der TO einen Nano oder Uno (Clone) verwendet. Aber Dein Einwand ist natürlich korrekt und angebracht.

Vielen Dank

da habe ich den Wald vor lauter Bäumen nicht mehr gesehen jetzt funktioniert alles.

Nennst Du uns bitte auch noch, was Dein Fehler jetzt genau war und wie Du's gelöst hast?

Es fehlte tatsächlich einfach nur

pinMode(buttonPin, INPUT);

Vielen Dank für die Hilfe nochmal

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