Frage bzw. Problem bei der Onebutton Libary

Hallo ,

meine Frage kann ich feststellen ob ein bestimmter Button zuvor gedrückt wurde mit einer Funktion der Onebutton Libary. Was bei Github steht muss ich gestehen habe ich nicht verstanden.

Gruß
Der Tom

Wenn Du schon einen neuen Thread aufmachst, solltest Du in Zukunft zum Ursprungsthread verlinken.

Gruß Tommy

Hallo,

ich verstehe Deine Frage nicht, es gibt doch verschiedene Ereignisse (Methoden) die von der Lib bereitgestellt werden. Du must doch nur noch eine function schreiben und darin was Du machen willst.

Ausschnitt

const byte btn1 = D6; //  Plus Taster
const byte btn2 = D5; //  Minus Taster


// one Button Instanz erstellen
OneButton PlusButton(btn1, true);
OneButton MinusButton(btn2, true);

voide setup(){

 // one Buton einrichten -----------
  PlusButton.attachClick(plusclick);
  PlusButton.attachDuringLongPress(pluslong);
  PlusButton.attachDoubleClick(plusdclick);
  MinusButton.attachClick(minusclick);
  MinusButton.attachDuringLongPress(minuslong);
  MinusButton.attachDoubleClick(minusdclick);
}// Setup ende


viod plusclick{

// was immer Du machen willst wenn das Ereigniss ausgelöst wird.
.
}

// hier die anderen functions

Heinz

Hallo Heinz,

hier mal der Code. Das ganhze wird ne UV-Kiste für 3D Resin Drucker zum trocknen.
Wenn alles gestellt ist springt er in Start. Normal wird dieser zum ende durchlaufen, wenn aber jemand Stop drückt würde ich am ende von Start gerne die korrekte meldung zum Display geben. Dazu müsste ich aber wissen ob Button2 gedrückt wurde oder eben nicht.

//Stepper-Motor-Steuerung mit A4988 und Taster 
#include "OneButton.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

const int relais = 3; // D3 am Arduino
const int stepperpin = 2; // D2 am Arduino
const int startpin = 12;
const int dauerpin = 11;
const int auspin = 10;
const int offpin = 9;
unsigned long timer = 0;
unsigned long starttime = 0;
unsigned long interval = 300000;
unsigned long resttime = 0;
int minuten = 0;
int nochmin = 0;
int zeitclick =0;
int modus = 0;   //0 = Abbruch  2= normal beendet
bool val;

OneButton button(startpin, false);
OneButton button1(dauerpin, false);
OneButton button2(auspin, false);

//Display 
// OLED display address
#define OLED_ADDR   0x3C
// reset pin not used on 4-pin OLED module
Adafruit_SSD1306 display(-1);  // -1 = no reset pin
// 128 x 32 pixel display
#if (SSD1306_LCDHEIGHT != 32)

//#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif


void setup() {
pinMode(relais, OUTPUT);
pinMode(stepperpin, OUTPUT);
pinMode(startpin, INPUT);
pinMode(dauerpin, INPUT);
pinMode(auspin, INPUT);
pinMode(offpin, OUTPUT);

button.attachClick(START);
button1.attachClick(DAUER);
button2.attachClick(AUS);

Serial.begin(115200);
Serial.println("eingeschalet");
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
display.display();
// display line 1 
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(4,0);
display.println("R E A D Y");
// display line 2 
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(4,8);
  display.println("3 Click");
  display.display();
// display line 3 
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(4,24);
  display.println("Einstellung");
  display.display();

digitalWrite(offpin, HIGH);
digitalWrite(relais, HIGH);
delay(1000);


}

void loop(){
   
  button.tick();      //void START
  
  button1.tick();     //void DAUER
  
  button2.tick(2);     //void STOP
}
 
  
void START(){
   digitalWrite(offpin, LOW);
   digitalWrite(relais, LOW);
   delay(100);
   //Licht an
   starttime = millis();
   nochmin = nochmin + 1;
   Serial.println(starttime);
   Serial.println();
   Serial.println(timer);
   
   while (millis() - starttime <= timer){ 
     digitalWrite(stepperpin, HIGH);
     delayMicroseconds(1000);  // Geschwindigkeit
     digitalWrite(stepperpin, LOW);
     delayMicroseconds(1000);  //Geschwindigkeit
     digitalWrite(stepperpin, HIGH);
     delayMicroseconds(1000);  // Geschwindigkeit
     digitalWrite(stepperpin, LOW);
     delayMicroseconds(1000);  //Geschwindigkeit
     
     button2.tick();     //void STOP
       
       if (millis() >= resttime + 60000 && nochmin > 0) {
          resttime = resttime + 60000;
          nochmin = nochmin - 1;
          display.clearDisplay();
          // display line 1 
          display.setTextSize(1);
          display.setTextColor(WHITE);
          display.setCursor(4,0);
          display.println("U V - Z e i t");
          // display line 2 
          display.setTextSize(2);
          display.setTextColor(WHITE);
          display.setCursor(4,8);
          display.println(nochmin);
          display.display();
          // display line 3 
          display.setTextSize(1);
          display.setTextColor(WHITE);
          display.setCursor(4,24);
          display.println("verbleibend");
          display.display();
      }   
  }
     
   Serial.println("ENDE ZEIT");
   digitalWrite(offpin, HIGH);
   digitalWrite(relais, HIGH);
   
   //   if button2.tick(true){
   //   AUS(2);
   //    } else {
   //     AUS();
   //   }
  
}

void DAUER(){
   timer = timer + interval;
   minuten = minuten + 5;
   nochmin = minuten;
   zeitclick = zeitclick + 1;
   Serial.println(timer);
   DisplayTimer(); 
}

void AUS(int modus){
      Serial.println("STOP");
      
      if (modus > 0){
         DisplayEnde();
      }else{   
         DisplayStop();
      }
      
      timer =0;
      starttime=0;
      minuten = 0;
      zeitclick = 0;
      resttime = 0;
      modus = 0;
      
      //Licht aus
      digitalWrite(relais, HIGH);
}  


void DisplayTimer(){
display.clearDisplay();
// display line 1 
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(4,0);
  display.println("U V - Z e i t");
// display line 2 
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(4,8);
  display.println(minuten);
  display.display();
// display line 3 
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(4,24);
  display.println("Minuten");
  display.display();
}  

void DisplayStop(){
display.clearDisplay();
// display line 1 
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(4,0);
  display.println("S T O P");
// display line 2 
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(4,8);
  display.println("Abbruch");
  display.display();
}  

void DisplayEnde(){
display.clearDisplay();
// display line 1 
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(4,0);
  display.println("U V - Z e i t");
// display line 2 
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(4,8);
  display.println("Beendet");
  display.display();
}

Tommy56:
Wenn Du schon einen neuen Thread aufmachst, solltest Du in Zukunft zum Ursprungsthread verlinken.

Gruß Tommy

Dachte da ich das Programm stark verändert habe wäre das nicht so gut und besser hier den jetztigen nochmal zum problem zu Posten.
Sorry.

Hallo,

ja dann setze Dir doch mit dem Button2 in der zugehörigen function eine bool Variable auf true oder false und die fragst Du ab. Oder hab ich was falsch verstanden.

Ich hab nch nicht verstanden warum Du die oneButton lib verwendest . Du hast ja nur ein click Ereigniss verwendet. Aber egal spielt letztlich keine Rolle. Du benötigst status Variable entweder als bool 0/1 oder byte1.2.3... damit Du den aktuellen Zusatnd kennst.

button.tick() macht man doch nur einmal für jeden Button. Derr aktualisiert doch nur den internen timer.
ich glaube Du hast die Funktion von OneButton nicht ganz verstanden.

Heinz

Danke Heinz,

button setzt Start in gange das Licht geht an steppermotor dreht sich.
butoon1 setzt Stop falls man vor der eingestellten Zeit aus machen will licht geht aus motor aus.
button2 setzt die Zeit pro click 5 Min also einstellen wie lange das ding den druck härtet bevor es aus macht.

Also benutzten tue ich die glaube schon richtig :slight_smile:

Aber ich schaue mal wie das klappen kann.

Hallo,
wie ist die Geruchsentwicklung bei dem Drucken mit Harz?
Ich drucke im FDM/FFF-Verfahren und da ist die Geruchsentwicklung vom Hersteller abhängig.