我需要一个电动机来向前循环,然后在用户按一次时向后循环。问题是,arduino在按下后不会停止运行。
我如何才能使它在每次按下按钮时仅循环一次?
我曾经尝试过exit(0),stop_it等,但是那些只是退出循环,而不是在再次按下按钮时重新启动。
const int pwm_pin = 9;
const int dir_1a_pin = 8;
const int dir_2a_pin = 7;
int buttonPin = 2;
boolean on=false;
int buttonState = 0;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(pwm_pin, OUTPUT);
pinMode(dir_1a_pin, OUTPUT);
pinMode(dir_2a_pin, OUTPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH){
if (on==true){
on=false;
} else{
on=true;
}
}
if(on == true){
digitalWrite(dir_1a_pin, HIGH);
digitalWrite(dir_2a_pin, LOW);
analogWrite(pwm_pin, 255);
delay (8000);
digitalWrite(dir_1a_pin, LOW);
digitalWrite(dir_2a_pin, HIGH);
analogWrite(pwm_pin, 255);
delay (12000);
}
}
答案 0 :(得分:0)
我假设要运行一次的部分位于if(on == true)部分末尾的部分中。如果您不想重复该操作,那么在该部分中将其设置为false怎么样。然后,下一次循环重复,则不会进入该部分。
答案 1 :(得分:0)
您使逻辑变得过于复杂。只需阅读循环中的按钮状态,然后HIGH
做您的摩托车工作即可。下次运行时间循环是因为您没有按下按钮,它将变成LOW
,并且不会进入if语句。
const int pwm_pin = 9;
const int dir_1a_pin = 8;
const int dir_2a_pin = 7;
int buttonPin = 2;
void MotorCycle()
{
digitalWrite(dir_1a_pin, HIGH);
digitalWrite(dir_2a_pin, LOW);
analogWrite(pwm_pin, 255);
delay(8000);
digitalWrite(dir_1a_pin, LOW);
digitalWrite(dir_2a_pin, HIGH);
analogWrite(pwm_pin, 255);
delay(12000);
}
void setup()
{
pinMode(buttonPin, INPUT);
pinMode(pwm_pin, OUTPUT);
pinMode(dir_1a_pin, OUTPUT);
pinMode(dir_2a_pin, OUTPUT);
}
void loop()
{
// if button pressed
if (digitalRead(buttonPin) == HIGH)
{
MotorCycle();
}
}