Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging Arduino项目(交通灯)*需要创意*_Debugging_Arduino - Fatal编程技术网

Debugging Arduino项目(交通灯)*需要创意*

Debugging Arduino项目(交通灯)*需要创意*,debugging,arduino,Debugging,Arduino,这是我到目前为止的代码,我需要帮助使Arduino的pin2上的按钮发生中断,如果灯可以自行循环,如果按下按钮,则必须点亮黄色LED 3秒,并点亮红色LED 10秒,以便行人通过。我已经设置了循环,但我需要按钮来工作,我很难做到这一点,有什么建议吗 代码 int red = 10; int yellow = 9; int green = 8; int button = 2; // switch is on pin 2 void setup(){ pinMode(red, OUTPUT); p

这是我到目前为止的代码,我需要帮助使Arduino的pin2上的按钮发生中断,如果灯可以自行循环,如果按下按钮,则必须点亮黄色LED 3秒,并点亮红色LED 10秒,以便行人通过。我已经设置了循环,但我需要按钮来工作,我很难做到这一点,有什么建议吗

代码

int red = 10;
int yellow = 9;
int green = 8;

int button = 2; // switch is on pin 2

void setup(){
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
pinMode(button, INPUT);
digitalWrite(green, HIGH);

}

void loop() {
if (digitalRead(button) == HIGH){
    delay(15); // software debounce
    if (digitalRead(button) == HIGH) {
        // if the switch is LOW change the lights
        changeLights();
        delay(1000); // wait for 1 second
        }
    }  
}

void changeLights(){
// RED ON for 5 sec
digitalWrite(red, HIGH);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
delay(5000);
// GREEN ON for 5 sec
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, HIGH);
delay(5000);
// YELOOW ON for 3 sec
digitalWrite(red, LOW);
digitalWrite(yellow, HIGH);
digitalWrite(green, LOW);
delay(3000);
}

这是用于外部中断的Arduinos示例代码:

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}
如果pinput pin
interruptPin
的状态发生变化,微控制器将为该中断调用
闪烁
提供服务。然后它跳回被中断的应用程序

因此,在你的按钮引脚上附加一个中断服务程序,并将你应该在下一次机会开始黄-红阶段的信息存储在一个变量中


由于黄红色阶段通常无法中断,如果您的程序在此期间没有控制任何其他内容,您可以使用延迟等阻塞代码来计时。

我们通常希望人们在提出请求之前自己尝试一下。你的帖子表明你甚至没有在网上搜索“arduino中断”,因为我在你的代码中没有找到任何与中断相关的东西。因此,走出去,搜索网页,找到第一个点击,阅读它,尝试例子,修改例子,然后你知道如何使用中断,并可以将这些知识应用到你的项目中