Samstag, 30. März 2019

C Funktion - Taster entprellen!

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];
  }