Robofun 機器人論壇

標題: arduino 電動推桿 如何不要等一個程式執行完??? [打印本頁]

作者: ykvs1004    時間: 2020-9-11 19:35
標題: arduino 電動推桿 如何不要等一個程式執行完???
大家好!!!
現在在製作一個膝蓋復健器 運用線性推進器(推桿)來做,用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
  }
}




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2