

D00-GND 間に押しボタンを設け下記コードを実行すると `bStart` は 1 にしかなりません。  
また割り込みは数回に一回の確率で実施されます。

ボタンを押すごとに `bStart` が反転してほしいのですが、アドバイスいただけたら幸いです。

[code]

    void changeState() {    // interrupt handler
      bStart = ~bStart;
      Serial.println(bStart);
    }
    
    void setup() {
      Serial.begin(115200);
      pinMode(intPin, INPUT_PULLUP);
      attachInterrupt(digitalPinToInterrupt(intPin) ,changeState ,FALLING);
    }
    
[/code]


CC BY-SA 4.0
2020-08-27T07:45:36.667
69916
2020-08-28T16:40:23.163
2020-08-27T11:28:59.883
3060
41668
question
spresense
D00 ボタンスイッチのON/OFF認識


上記のコードに、変数、loop関数を追加してそのまま動かしてみましたが、意図通りに動いてそうです。

[code]

    int bStart = 0;
    uint8_t intPin = 0; // D00
    void loop() {}
    
[/code]

D00とGNDをジャンパ線でつないで、bStartがトグルしてシリアルモニタに表示されています。

ここをみると、  
<https://developer.sony.com/develop/spresense/docs/arduino_developer_guide_ja.html#_attachinterrupt>

> ピン番号の変化に対して、チャタリング防止用にRTC(32.768kHz) 3サイクル分のノイズフィルタをもっています。  
>  そのため、急峻なパルス上の信号変化に対しては割り込みを取得できないことがあります。

とあるので信号変化が速いからといった理由があるのかもしれませんね。


CC BY-SA 4.0
2020-08-28T00:55:25.507
69925
2020-08-28T16:40:23.163
2020-08-28T16:40:23.163
3060
31378
69916
answer