Hello Stackoverflow用户!
行trafiksignal(redLed&& yellowLed,1000);我无法开始工作,我正在尝试使用函数创建一个交通信号,我的想法是将此图片用作指南:http://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Traffic_lights_4_states.png/220px-Traffic_lights_4_states.png (由于代表< 10而无法发布图片)
我的代码:http://pastebin.com/MTGsYeXs
/*
* @Author: Kristian Nymann
* @Date: 2014-09-25 22:46:39
* @Last Modified by: Kristian Nymann
* @Last Modified time: 2014-09-25 23:23:19
* @Description: Lav et program der får de tre lysdioder til at skifte som et trafiklys. Du kan brugeprogrammet "Blink" som eksempel.
*/
const byte greenLed = 2;
const byte yellowLed = 3;
const byte redLed = 4;
void setup() {
pinMode(greenLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(redLed, OUTPUT);
}
void loop() {
trafiksignal(redLed, 3000);
trafiksignal(redLed && yellowLed, 1000);
trafiksignal(greenLed, 3000);
trafiksignal(yellowLed, 1000);
}
void trafiksignal(byte pin, unsigned int duration)
{
digitalWrite(pin, HIGH);
delay(duration);
digitalWrite(pin, LOW);
}
现在正在发生的事情是: 红色指示灯亮起持续3秒..然后绿色指示灯亮起3秒钟,然后黄色指示灯亮起1秒钟。
那么如何让黄色和红色Led同时打开? (为什么没有trafiksignal(redLed&& yellowLed,1000);工作?)
答案 0 :(得分:0)
据我所知&&在C中仅用于逻辑比较。
trafiksignal(redLed && yellowLed, 1000);
这条线基本上做的是检查redLed和yellowLed是真还是假,如果它们都为真,它将发送1或如果其中任何一个为假,它将发送0.因为它们都是不是0它应该把它们视为真实,所以你实际上最有可能告诉引脚1高1秒而不是引脚3和4。
一些简单的解决方法是创建一个单独的函数来关闭红色和黄色灯,或者在trafiksignal函数中放置一个快速if子句。 Bellow是一个快速的if if语句,可以添加到trafiksignal,它可以帮助你使用当前的代码。
if (pin == 1) {
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(duration)
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
else {
digitalWrite(pin, HIGH);
delay(duration);
digitalWrite(pin, LOW);
}
从我的ipad输入代码,因此我会在复制和粘贴之前对其进行校对。
从我的电脑编辑:
一个更好的解决方案是将引脚作为阵列发送到功能,我在普通C中没有超级经验,所以我不确定我所做的下面是100%准确,但应该相当接近。
const byte greenLed = 2;
const byte yellowLed = 3;
const byte redLed = 4;
const byte redYellow[2] = {redLed, yellowLed} // create an array of 2 pins
void setup() {
pinMode(greenLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(redLed, OUTPUT);
}
void loop() {
// the middle number is the number of LEDs the function will need to control.
trafiksignal(redLed, 1, 3000);
trafiksignal(redYellow, 2, 1000);
trafiksignal(greenLed, 1, 3000);
trafiksignal(yellowLed, 1, 1000);
}
void trafiksignal(byte pin[], unsigned int numberOfLeds, unsigned int duration)
{
for (int i =0; i < numberOfLeds; ++i {
digitalWrite(pin[i], HIGH);
}
delay(duration);
for (int i = 0; i < numberOfLeds; ++i) {
digitalWrite(pin[i], LOW);
}
}