Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Smoothie by
Button.h
00001 #ifndef BUTTON_H 00002 #define BUTTON_H 00003 00004 #include "libs/Kernel.h" 00005 #include "libs/utils.h" 00006 #include "libs/Pin.h" 00007 #include "libs/Hook.h" 00008 00009 00010 class Button 00011 { 00012 public: 00013 Button() 00014 { 00015 this->counter = 0; 00016 this->value = false; 00017 this->up_hook = NULL; 00018 this->down_hook = NULL; 00019 this->button_pin = NULL; 00020 this->repeat=false; 00021 this->first_timer=0; 00022 this->second_timer=0; 00023 this->longpress_delay=0; 00024 } 00025 00026 Button *pin(Pin *passed_pin) 00027 { 00028 this->button_pin = passed_pin; 00029 return this; 00030 } 00031 00032 void check_signal() 00033 { 00034 check_signal(this->button_pin->get() ? 1 : 0); 00035 } 00036 00037 void check_signal(int val) 00038 { 00039 bool start_value = this->value; 00040 if ( val ) { 00041 if ( this->counter < 5 ) { 00042 this->counter++; 00043 } 00044 if ( this->counter == 5 ) { 00045 this->value = true; 00046 } 00047 } else { 00048 if ( this->counter > 0 ) { 00049 this->counter--; 00050 } 00051 if ( this->counter == 0 ) { 00052 this->value = false; 00053 } 00054 } 00055 00056 if ( start_value != this->value ) { 00057 if ( this->value ) { 00058 if ( this->up_hook != NULL ) { 00059 this->up_hook->call(); 00060 this->first_timer=0; 00061 this->second_timer=0; 00062 this->repeat=false; 00063 } 00064 } else { 00065 if ( this->down_hook != NULL ) { 00066 this->down_hook->call(); 00067 } 00068 } 00069 } 00070 //auto repeat button presses 00071 if(this->longpress_delay>0){ 00072 if(this->value){ 00073 if(this->repeat){ 00074 this->second_timer++; 00075 if(this->second_timer==10){ 00076 this->up_hook->call(); 00077 this->second_timer=0; 00078 } 00079 } 00080 else{ 00081 this->first_timer++; 00082 if(this->first_timer==longpress_delay){ 00083 this->repeat=true; 00084 this->first_timer=0; 00085 } 00086 } 00087 } 00088 } 00089 } 00090 00091 void set_longpress_delay(int delay){ 00092 this->longpress_delay=delay; 00093 } 00094 00095 bool get() 00096 { 00097 return this->value; 00098 } 00099 00100 00101 template<typename T> Button *up_attach( T *optr, uint32_t ( T::*fptr )( uint32_t ) ) 00102 { 00103 this->up_hook = new Hook(); 00104 this->up_hook->attach(optr, fptr); 00105 return this; 00106 } 00107 00108 template<typename T> Button *down_attach( T *optr, uint32_t ( T::*fptr )( uint32_t ) ) 00109 { 00110 this->down_hook = new Hook(); 00111 this->down_hook->attach(optr, fptr); 00112 return this; 00113 } 00114 00115 private: 00116 Hook *up_hook; 00117 Hook *down_hook; 00118 bool value; 00119 char counter; 00120 Pin *button_pin; 00121 00122 int longpress_delay; 00123 int first_timer; //delay before starting to repeat 00124 int second_timer; //time beetwen repeats 00125 bool repeat; 00126 }; 00127 00128 00129 00130 00131 00132 #endif
Generated on Tue Jul 12 2022 20:09:00 by
1.7.2
