2024/01/20(SAT) なんとなくタコメータを作る流れC
前回の処理だと
割込みが入りまくって
CPUの負荷が常に高そうなので
処理を見直して
最初、入力割込みが入ったら
入力割込みを禁止して
タイマーを貼って
タイムアウト後に入力割込みを有効にする
これによってチャダリング対策とする
CPUの負荷も減るはず

プログラム抜粋

■変数、定数宣言
変数と定数を宣言します。
今回はチャダリング対策は500μsecとしました
---8<------8<------8<------8<------8<------8<---
・・・
#define IGN_DELAY_TIME 500 // 500μsec
・・・
// ■定義
// ピンアサイン
#define PIN_TACO 16 // タコメーターのピンアサイン

// ■変数
// 共通
uint32_t u32TacoCount = 0 ;
hw_timer_t *pTimer = NULL;
・・・
---8<------8<------8<------8<------8<------8<---

■初期化処理
タイマーと入力割込みの設定をする
---8<------8<------8<------8<------8<------8<---
//
// 初期化
//
void setup()
{
・・・
 // タイマー設定
 pTimer = timerBegin(0, 80, true) ;
 timerAttachInterrupt(pTimer, fnTimerISR, true) ;
 timerAlarmWrite(pTimer, IGN_DELAY_TIME, false) ;

 // PIN の入力設定
 pinMode( PIN_TACO, INPUT ) ;

 // 割り込み設定
 attachInterrupt(PIN_TACO, fnTacoISR, FALLING) ;
・・・
}
---8<------8<------8<------8<------8<------8<---

■入力割込み処理
入力割込みを停止して、
チャダリング対策のタイマーを貼ります
---8<------8<------8<------8<------8<------8<---
// タコメータの割り込み
void fnTacoISR()
{
 // 入力割込みをオフにする
 detachInterrupt(PIN_TACO) ;

 // カウントアップ
 u32TacoCount++;

 // タイマー割込みをオンにする
 timerWrite(pTimer,0);
 timerAlarmEnable(pTimer) ;
}
---8<------8<------8<------8<------8<------8<---

■タイマー割込み処理
タイムアウト後、入力割込みを再び有効にします。
---8<------8<------8<------8<------8<------8<---
// タイマー割込み
void fnTimerISR()
{
 // 入力割込みをオンにする
 attachInterrupt(PIN_TACO, fnTacoISR, FALLING) ;
}
---8<------8<------8<------8<------8<------8<---

実車にて動作確認してみると
ちゃんと動いているようです。
フォト