#実行したいこと
タクトスイッチによるオンオフの切り替え
タクトスイッチを1回押すと,スイッチがオンになり,motor_action関数を呼び出し,温度センサの出力値を読み込みサーボモータを動作させ,
タクトスイッチをもう一度押すと,スイッチがオフとなる動作を想定しています
今回作成したプログラムを実行した結果,スイッチが反応せず,サーボモータが動作を続ける結果となりました.
どこが間違っているか教えていただけないでしょうか.
#作成したプログラム
#include<Servo.h> const int THERMISTOR=0; //温度センサが接続されているピン const int SERVO=9; //サーボモータが接続されているピン const int SWITCH=2; //タクトスイッチが接続されているピン int s; //タクトスイッチの入力値 int old_s; //1時刻前の入力値 int state=0; //現在の状態 Servo servo; //サーボモータ void setup() { pinMode(SWITCH,INPUT); //ピンを入力に設定 pinMode(THERMISTOR,OUTPUT); servo.attach(SERVO); //サーボモータをピンに接続 pinMode(SERVO,OUTPUT); Serial.begin(9600); } void loop(){ s=digitalRead(SWITCH); //入力を読み取る if((s==HIGH) && (old_s==LOW)){ // state=1-state; //状態を変更(0なら1,1なら0へ変更) delay(30); } old_s=s; //1時刻前の入力として保存 if(state==1){ //状態が1のとき digitalWrite(THERMISTOR,HIGH); digitalWrite(SERVO,HIGH); motor_action(); //関数呼び出し }else{ //状態が0のとき digitalWrite(THERMISTOR,LOW); digitalWrite(SERVO,LOW); } } void motor_action() { int v; float temp; v=analogRead(THERMISTOR); temp=(v*5000.0/1024-500.0)/10.0; //温度に変換 if(18.0<=temp && temp<=30.0){ //気温が18℃以上30℃以下の場合 Serial.println(temp); delay(0); servo.write(0); delay(3000); servo.write(90); delay(3000); }else if(10.0<temp && temp<18.0){ //気温が10℃より高く18℃より低い場合 Serial.println(temp); delay(0); servo.write(0); delay(2000); servo.write(90); delay(2000); }else if(30.0<temp && temp<=35.0){ //気温が30℃より高く35℃より低い場合 Serial.println(temp); delay(2000); servo.write(0); delay(200); servo.write(90); delay(200); }else{ //10℃より低いまたは35℃より高い場合 Serial.println(temp); //シリアル通信で値を送信 delay(0); //サーボモータ不動 servo.write(0); delay(0); } }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/15 13:58