Skocz do zawartości

Jak zrobić porządek z Class Button.


99teki

Pomocna odpowiedź

- jest program obsługujący klawisz ale nie pasuje mi Klasa w programie.

- można to jakoś  "przerzucić" do *.cpp, *.h

 

// 2024.09.26, bubu321
/**
 * FunctionalButton.ino - Example for the OneButtonLibrary library.
 * This is a sample sketch to show how to use OneClick library functionally on ESP32,ESP8266... 
 * 
 */
#include <Arduino.h>
#include <OneButton.h>					// v 2.6.1 https://github.com/mathertel/OneButton

#define ROTARY_PIN_A    01					
#define ROTARY_PIN_B    02					
#define ROTARY_BUTTON   0							// boot0	
#define BATTERY_PIN      4					
#define CONTRASTPIN     15						// jasnosc GPIO15
#define POWER_ON				46

int klaw = 0;
int value;

	// -----------------
class Button{
private:
  OneButton button;
  // int value;
public:
  explicit Button(uint8_t pin):button(pin) {
    button.attachClick([](void *scope) { ((Button *) scope)->Clicked();}, this);
    button.attachDoubleClick([](void *scope) { ((Button *) scope)->DoubleClicked();}, this);
    button.attachLongPressStart([](void *scope) { ((Button *) scope)->LongPressed();}, this);
  }

  void Clicked(){
    //Serial.println("Click then value++");
    //value++;
		klaw = 1;
  }

  void DoubleClicked(){
		//Serial.println("DoubleClick");
		klaw = 2;
  }

  void LongPressed(){
    //Serial.print("LongPress and the value is ");
    //Serial.println(value);
		klaw = 6;
  }

  void handle(){
    button.tick();
		
  }
	
	
};	// --- end-class ---

Button button(ROTARY_BUTTON);

	// ------------------------------------------- setup ---------------------------
void setup() {
  Serial.begin(115200);
	Serial.println(" start-button");
}

	// -------------------------------------------- loop --------------------------
void loop() {
  button.handle();
	if (klaw == 1) 
	{ 
		Serial.println("click ");
			//	Serial.println(value);
	}
	if (klaw == 2) 
	{ 
		Serial.println("DoubleClick ");
			//	Serial.println(value);
	}
	if (klaw == 6) 
	{ 
		Serial.println("LongPress ");
			//	Serial.println(value);
	}
	klaw = 0;
}
// -- end ---

 

Link do komentarza
Share on other sites

Trzeba ją rozbić na nagłówek i implementację. Coś w ten deseń:

class Button{
	private:
  		OneButton button;
  		// int value;

  	public:
  		explicit Button(uint8_t pin) : button(pin);
  		void Clicked();
	  	void DoubleClicked();
  		void LongPressed();
		void handle();
};

 

explicit Button::Button(uint8_t pin):button(pin) {
    button.attachClick([](void *scope) { 
    	((Button *) scope)->Clicked();
    }, this);
  
    button.attachDoubleClick([](void *scope) { 
    	((Button *) scope)->DoubleClicked();
    }, this);
  
    button.attachLongPressStart([](void *scope) { 
    	((Button *) scope)->LongPressed();
    }, this);
}

void Button::Clicked() {
    //Serial.println("Click then value++");
    //value++;
	klaw = 1;
}

// I tak dalej

};

Pozdrawiam -- Spook.

  • 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.