Quellcode zum entprellen eines Tasters am Nucleo STM32 F446RE ohne DELAY.
#define b1 HAL_GPIO_ReadPin(b1_GPIO_Port, b1_Pin)
//Taster entprellen: entprellen("buttonummer (1-10)","hardwarebutton (b1-b8)", "modus (0=hold 1=toggle)") BEISPIEL: entprellen(1,b1,1); oder entprellen(4,b4,0);
int zeit1[10];
int nureinmalzeitabfrage[10];
int umschalter[10];
int uebergabewert[10];
int entprellzeit_in_ms=12;
int entprellen (int tasternr, int taster, int modus){
if (taster==1){
if (nureinmalzeitabfrage[tasternr]==0){
nureinmalzeitabfrage[tasternr]++;
zeit1[tasternr]=HAL_GetTick();
}
if (taster==1 && HAL_GetTick()-zeit1[tasternr] > entprellzeit_in_ms && umschalter[tasternr]==0){
umschalter[tasternr]++;
if (modus == 1){
if (uebergabewert[tasternr]==0){
uebergabewert[tasternr]=1;
}
else{
uebergabewert[tasternr]=0;
}
}
else{
uebergabewert[tasternr]=1;
}
}
}
else{
zeit1[tasternr]=HAL_GetTick();
nureinmalzeitabfrage[tasternr]=0;
umschalter[tasternr]=0;
if (modus == 0){
uebergabewert[tasternr]=0;
}
}
return uebergabewert[tasternr];
}