###前提・実現したいこと
ロータリーエンコーダの値がHIGHになり,割り込みが発生すると,2秒毎に出力ピンのONOFFが切り替わるプログラムを作成したいです.
現状だと,出力がONになったままです(millis()が増加していない・・・?)
###発生している問題・エラーメッセージ
出力がONになったままで,出力が切り替わらない.
エラーメッセージ
特にないです.
###該当のソースコード
c++
1//何秒ごとの出力か 2#define MILLISECONDS_TO_WAIT 2000 3volatile unsigned long time_zero = millis(); 4volatile boolean button_is_high = true; 5 6 7// ロータリーエンコーダーの配線に合わせる 8int dRotAPin = 3; 9int dRotBPin = 2; 10 11//出力ピン 12int EPin = 8; 13 14volatile int Flag = 0; 15 16 17void setup() 18{ 19 20// ピンの設定 21// INPUTモードにします。 22pinMode(dRotAPin, INPUT); 23pinMode(dRotBPin, INPUT); 24pinMode(EPin, OUTPUT); 25 26// プルアップを有効にします 27digitalWrite(dRotAPin, HIGH); 28digitalWrite(dRotBPin, HIGH); 29 30 31 32} 33 34 35void loop() 36{ 37// 外部割り込みを設定します 38// ピンが LOW → HIGH 時にrotRotEnd()を呼び出します 39attachInterrupt(0, rotRotEnc1, HIGH); 40attachInterrupt(1, rotRotEnc2, HIGH); 41 42} 43 44// 外部割り込みから呼び出される変数 45void rotRotEnc1(void) 46{ 47 48if(Flag == 1) 49{ 50int i =0; 51for (i = 0; i < 5; i++){ 52digitalWrite(EPin, HIGH); 53button_is_high = true; 54time_zero = millis(); 55while(button_is_high) { 56if (millis() - time_zero > MILLISECONDS_TO_WAIT) 57button_is_high = false; } 58digitalWrite(EPin, LOW); 59button_is_high = true; 60time_zero = millis(); 61while(button_is_high) { 62if (millis() - time_zero > MILLISECONDS_TO_WAIT) 63button_is_high = false; } 64 65} 66} 67 68else Flag = 1; 69 70} 71 72 73void rotRotEnc2(void) 74{ 75 76if(Flag == -1) 77{ 78int i =0; 79for (i = 0; i < 5; i++){ 80digitalWrite(EPin, HIGH); 81button_is_high = true; 82time_zero = millis(); 83while(button_is_high) { 84if (millis() - time_zero > MILLISECONDS_TO_WAIT) 85button_is_high = false; } 86digitalWrite(EPin, LOW); 87button_is_high = true; 88time_zero = millis(); 89while(button_is_high) { 90if (millis() - time_zero > MILLISECONDS_TO_WAIT) 91button_is_high = false; } 92 93} 94} 95 96else Flag = -1; 97 98}
###試したこと
millis()の関数を割り込み中でも変わるようにvolatileにすればよいのかと思いましたが,
うまく行きませんでした.
###補足情報(言語/FW/ツール等のバージョンなど)
今回使用するのはarduino UNO R3です.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/19 03:58