If statement 带设置/复位按钮的Arduino定时器
我正在为我的马建造一个自动干草喂食器,类似这样的东西,但只有两层 <每24小时,中间的板应该掉落,让干草掉下来让马吃,接口应该非常简单,3个按钮一个启动计时器,一个停止它并部署干草,一个在初始位置重置伺服以再次锁定板,我在计时器上有一些问题,当我按下绿色按钮时,它会启动,但当它完成计数后,它会停止,我必须再次按下绿色按钮,它会一直运行,除非我按下红色按钮重置它If statement 带设置/复位按钮的Arduino定时器,if-statement,timer,automation,arduino,servo,If Statement,Timer,Automation,Arduino,Servo,我正在为我的马建造一个自动干草喂食器,类似这样的东西,但只有两层
const int greenB = 2;
const int redB = 3;
int inAction = 0;
int greenState = 0;
int redState = 0;
void setup() {
Serial.begin(9600);
pinMode(greenB, INPUT);
pinMode(redB, INPUT);
}
void loop() {
greenState = digitalRead(greenB);
redState = digitalRead(redB);
if(greenState == HIGH){
inAction = 1;
while(inAction == 1){
for(int i = 0; i<10;i++){
if(redState == HIGH){
Serial.println("timer stopped");
goto stopTimer;
}
if(i == 9){
Serial.println("Cycle completed");
}
Serial.println("10 seconds timer");
delay(1000);
}
stopTimer: inAction = 0;
}
}
}
const int greenB=2;
常数int redB=3;
int不活动=0;
int-greenState=0;
int redState=0;
无效设置(){
Serial.begin(9600);
pinMode(绿色B,输入);
pinMode(redB,输入);
}
void循环(){
绿色状态=数字读取(绿色B);
redState=数字读取(redB);
如果(绿色状态==高){
不作为=1;
while(不活动==1){
for(int i=0;i因为您使用了goto,所以导致了一个问题。一旦代码到达for循环的末尾,它就会到达标记为stopTimer:的行,并将inAction设置为0。这将停止所有操作,直到您再次按下绿色按钮
不需要使用GOTO,在C++中。如果你曾经发现你想使用GOTO,那么你很可能做错事。试试这个:
void loop() {
greenState = digitalRead(greenB);
redState = digitalRead(redB);
if(greenState == HIGH){
inAction = 1;
while(inAction == 1){
for(int i = 0; i<10;i++){
if(redState == HIGH){
Serial.println("timer stopped");
inAction = 0;
break; // Ends the for loop right here:
}
if(i == 9){
Serial.println("Cycle completed");
}
Serial.println("10 seconds timer");
delay(1000);
}
}
}
}
void循环(){
绿色状态=数字读取(绿色B);
redState=数字读取(redB);
如果(绿色状态==高){
不作为=1;
while(不活动==1){
对于(int i=0;i
void loop() {
greenState = digitalRead(greenB);
redState = digitalRead(redB);
if(greenState == HIGH){
inAction = 1;
}
if(inAction == 1){
for(int i = 0; i<10;i++){
if(redState == HIGH){
Serial.println("timer stopped");
inAction = 0;
break; // Ends the for loop right here:
}
if(i == 9){
Serial.println("Cycle completed");
}
Serial.println("10 seconds timer");
delay(1000);
}
}
}
}