|
大家好!!!
現在在製作一個膝蓋復健器 運用線性推進器(推桿)來做,用Arduino來寫程式,但遇到了一個小麻煩,就是可以用按鈕按下去來控制前進、後退、還有來回五次,但都必須要一個執行完才能執行下一個,想要達到的成果是 按前進就前進 後退就後退,之後還要加一個緊急停止的動作,但不可能等前進做完再來執行緊急停止,所以想問問版上的高手們有比較好的方法可以建議或幫助的嗎??? 謝謝大家 非常感謝了 程式碼如下
#include <avr/sleep.h>
#include <Wire.h>
#include <SoftwareSerial.h> // 引用程式庫
#define BUTTON_PIN1 7//定義BUTTON PIN為7
#define BUTTON_PIN2 6//定義BUTTON PIN為6
#define BUTTON_PIN3 5//定義BUTTON PIN為5
#define LED_PIN 8//定義LED PIN為8
int in1Pin = 11;
int in2Pin = 10;
const long crushTime = 30000;
void ago();
void aback();//後退
void afivetimes();//後退
void setup() {
pinMode(LED_PIN,OUTPUT);//設定PIN 8為輸出模式
pinMode(BUTTON_PIN1,INPUT);//設定PIN 7為輸入模式
pinMode(BUTTON_PIN2,INPUT);//設定PIN 6為輸入模式
pinMode(BUTTON_PIN3,INPUT);//設定PIN 5為輸入模式
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
}
void loop() {
ago();
aback();
afivetimes();
}
void ago(){ //出去
if(digitalRead(BUTTON_PIN1)==HIGH){//讀取PIN 7是否為HIGH
digitalWrite(LED_PIN,HIGH);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,HIGH);
delay(crushTime);
}
else{//讀取PIN 7是否為LOW
digitalWrite(LED_PIN,LOW);//PIN 8輸出為LOW,LED熄滅
}
}
void aback(){ //回來
if(digitalRead(BUTTON_PIN2)==HIGH){//讀取PIN 6是否為HIGH
digitalWrite(LED_PIN,HIGH);//PIN 8輸出為HIGH,LED點亮
digitalWrite(in1Pin,HIGH);
digitalWrite(in2Pin,LOW);
delay(crushTime);
}
else{//讀取PIN 6是否為LOW
digitalWrite(LED_PIN,LOW);//PIN 8輸出為LOW,LED熄滅
}
}
void afivetimes(){
if(digitalRead(BUTTON_PIN3)==HIGH){//讀取PIN 5是否為HIGH
digitalWrite(LED_PIN,HIGH);//PIN 8輸出為HIGH,LED點亮
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,HIGH);
delay(crushTime);
digitalWrite(in1Pin,HIGH);
digitalWrite(in2Pin,LOW);
delay(crushTime);//1
delay(1000);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,HIGH);
delay(crushTime);
digitalWrite(in1Pin,HIGH);
digitalWrite(in2Pin,LOW);
delay(crushTime);//2
delay(1000);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,HIGH);
delay(crushTime);
digitalWrite(in1Pin,HIGH);
digitalWrite(in2Pin,LOW);
delay(crushTime);//3
delay(1000);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,HIGH);
delay(crushTime);
digitalWrite(in1Pin,HIGH);
digitalWrite(in2Pin,LOW);
delay(crushTime);//4
delay(1000);
digitalWrite(in1Pin,LOW);
digitalWrite(in2Pin,HIGH);
delay(crushTime);
digitalWrite(in1Pin,HIGH);
digitalWrite(in2Pin,LOW);
delay(crushTime);//5
}
} |
|