c - 函数参数中的多个引脚

标签 c arduino

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/

相关文章:

c++ - 使用 C isdigit 进行错误检查

c - 结构并以两种不同的方式引用它们

c - 存储文本文件中的每个字符

android - 通过 BLE 发送连续数据流时出现的问题

c++ - 如何通过串行发送 float

c - PostgreSQL C 函数中的 SPI 导致连接丢失 (Windows)

c - 使用 2 个线程对 2 个数组进行排序比将 2 个数组一一排序需要更多时间

c++ - 无法执行嵌套函数,有什么办法解决这个问题?

c++ - 用于重复代码的 C/C++ 宏

c++ - 使用多个多路复用器时的 Arduino 内存问题