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);
}
现在发生的事情是: 红色 LED 亮起 3 秒.. 然后绿色 LED 亮起 3 秒.. 然后黄色 LED 亮起 1 秒..
那么怎样才能让黄色和红色的LED同时亮呢? (为什么 trafiksignal(redLed && YellowLed, 1000); 不起作用?)
最佳答案
据我所知,C 中的 && 仅用于逻辑比较。
trafiksignal(redLed && yellowLed, 1000);
这行代码的主要作用是检查 redLed 和 YellowLed 是 true 还是 false,如果它们都为 true,则发送 1,如果其中任何一个为 false,则发送 0。因为它们都不是 0它应该将它们视为 true,因此您实际上最有可能告诉引脚 1 变高 1 秒,而不是引脚 3 和 4。
一些简单的解决方法是创建一个单独的函数来关闭红灯和黄灯,或者在 trafiksignal 函数中添加一个快速的 if 子句。 Bellow 是一个快速的脏 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);
}
}
关于c - 函数参数中的多个引脚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26048539/