スイッチによるカウンタ

 

 

 


  ● スイッチによるカウンタプログラム

   以下のプログラムはスイッチによってカウントアップするプログラムです。
   個別の2つのスイッチ入力に対応し、それぞれスイッチを押して離すと1カウントです。
   カウント結果がLCD画面に表示されます。
   プログラムは比較的複雑です。変数の初期化、スイッチを押して離すところの処理が含まれるためです。
   チャタリングを防止するためにスイッチを押してからある回数計測しないと1カウントとみなさないようになっています。 
   また、ここでのスイッチは負論理 となります。押したときがマイコンからみると0です。
   


 


スイッチによるカウンタ

 

/* Switch Input Test */

#include "src/micomsub.h"

#include <stdio.h>


int SwA1,SwP1,SwF1,SwA2,SwP2,SwF2;

#define SwCNT 4 // チャタリング防止のためのカウント
#define SwHIGH LOW
#define SwLOW  HIGH

void SwInit()
{
    SwA1=0;
    SwP1=0;
    SwA2=0;
    SwP2=0;
}

void SwChkInc()
{
    SwF1=digitalRead(SWF1);
    SwF2=digitalRead(SWF2);

    if ((SwF1==SwHIGH) && (SwA1>=0)) { SwA1++; }
    if ((SwF2==SwHIGH) && (SwA2>=0)) { SwA2++; }

    if ((SwF1==SwLOW) && (SwA1>SwCNT)) { SwA1=0; SwP1++;  }
    if ((SwF2==SwLOW) && (SwA2>SwCNT)) { SwA2=0; SwP2++;  }

}

void setup(void)
{
    pinMode(SWF1,INPUT);
    pinMode(SWF2,INPUT);

    SwInit();

    //      0123456789012345
    printf("Switch Input TS\n");
    printf("1:000 2:000\n");
}

void loop(void)
{
    int i;
    for (i=0; i<25; i++)
    {
        SwChkInc();
        delay(10);
    }
    lcd_setCursor(0,1);
    printf("1:%03d 2:%03d\n",SwP1,SwP2);
}

int main(void)
{
    init();
   
    setup();
  
    for (;;)
        loop();

}

 



 

 


     戻る