割り込みのアイデアを頂きたいです。-1を使わないで小学生でもわかる仕組みがあれば。

Arduino に関するご質問などはこちらへ。

割り込みのアイデアを頂きたいです。-1を使わないで小学生でもわかる仕組みがあれば。

投稿記事by nas.iron » 2020年3月27日(金) 21:50

はじめまして。
点滅などのloopをしている最中でも、スイッチで割り込みをして、違うプログラムを動かすような仕組みをつくりたいのです。試行錯誤を自分なりにして、以下のようなプログラムを作りました。
スイッチが押される毎に、aに-1をかける事で、1と-1を判定して動作を切り替えています。

質問なのですが、
割り込みの仕組みについて、「小学生でも理解できるようなしかけのプログラム」で実現できればと考えております。
-1をかける方法以外で、良い方法があれば、ご教授頂きたいのですがアイデアありますでしょうか?(−1は中学生で習うので)
皆様、お知恵をお願いいたします。
コード: 全て選択
int a;
void setup() {
  pinMode(9, OUTPUT);
  attachInterrupt(0, blink, FALLING);
  Serial.begin(9600);
  a=1;
}
void loop() {
  Serial.println(a);  //aの値をシリアルモニタでチェック
if(a==-1){    //-1の時は点滅が長い
  digitalWrite(9,HIGH);
  delay(800);
  digitalWrite(9,LOW);
  delay(100);
}
if(a==1){    //1の時は消灯が長い
  digitalWrite(9,HIGH);
  delay(100);
  digitalWrite(9,LOW);
  delay(800);
}
}
void blink() { //スイッチが押される毎に  aに-1をかける
  a=a*(-1);
}
nas.iron
 
記事: 9
登録日時: 2014年7月10日(木) 20:45

Re: 割り込みのアイデアを頂きたいです。-1を使わないで小学生でもわかる仕組みがあれば。

投稿記事by 樫原 輝 » 2020年4月01日(水) 10:57

こんにちは。

-1をかける方法以外で、良い方法があれば

ということですので、少し面倒ですがflag変数を作成しif文を用意して、1と0を使用したコードを書くのはいかがでしょうか。
私は、Arduinoをそれほど使用しないため、分かりませんがbool型が使えるのであれば反転させることで、flagのtrueとfalseを切り替えることが出来ます。
例えば
コード: 全て選択
// 1と0の場合
char flag = 0; //int flag = 0;でも良いと思います。
if (flag == 0) {
  flag = 1;
} else if (flag == 1) {
  flag = 0;
}

//もう少し簡潔に書くのであれば(Arduinoで出来るか分かりませんが)
if(flag) flag = 0;
else flag = 1;

//booleanの場合。
boolean flag = true;
//切り替えるとき
flag = !flag


ご参考になれば幸いです。
樫原 輝
 
記事: 134
登録日時: 2011年7月07日(木) 17:26


Return to Arduino 質問箱

cron