| 
 | 
 
大家好!!! 
現在在製作一個膝蓋復健器 運用線性推進器(推桿)來做,用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 
  } 
 } |   
 
 
 
 |