【问题标题】:Blinking leds on different arduinos在不同的arduinos上闪烁LED
【发布时间】:2015-12-21 07:41:58
【问题描述】:

我想将 LED 连接到不同的 arduino 板上并创建一个函数来闪烁它们。让我分享我的代码以更清楚:

#define ARDUINO_MEGA
//#define ARDUINO_UNO
//#define ARDUINO_NANO
#ifdef ARDUINO_MEGA
#define R 22 // Red led attached to pin 22
#define G 25 // Green led attached to pin 25
#define B 23 // Blue led attached to pin 23
#endif
#ifdef ARDUINO_UNO
#define R 2 // Red led attached to pin 2
#define G 3 // Green led attached to pin 3
#define B 5 // Blue led attached to pin 5
#endif
#ifdef ARDUINO_NANO
#define R 7 // Red led attached to pin 7
#define G 8 // Green led attached to pin 8
#define B 9 // Blue led attached to pin 9
#endif
void setup(){
    pinMode(R, OUTPUT);
    pinMode(G, OUTPUT);
    pinMode(B, OUTPUT);
}
void loop(){
    blink('R', 5, 100);
    blink('G', 3, 300);
    blink('B', 10, 80);
}
void blink(byte ledColor, int howManyTimes, int duration){
    for (int x=0; x<howManyTimes; x++){
        digitalWrite(ledColor, HIGH); //doesn't work
        delay(duration);
        digitalWrite(ledColor, LOW);
        delay(duration);
    }
}

我想要闪烁功能做的是:

  • 如果我取消注释 #define ARDUINO_MEGA 行并将草图上传到 Arduino Mega,它应该闪烁连接到引脚 22、25 和 23 的 LED

  • 如果我取消注释 #define ARDUINO_NANO 行并将草图上传到 Arduino Nano,它应该闪烁连接到引脚 7、8 和 9 的 LED

  • 如果我取消注释 #define ARDUINO_UNO 行并将草图上传到 Arduino Uno,它应该闪烁连接到引脚 2、3 和 5 的 LED

谢谢。

【问题讨论】:

  • 这到底是什么问题?
  • 在闪烁功能中,我将 ledColor 作为参数并在 digitalWrite(ledColor, HIGH) 中处理它。例如,如果我取消注释 #define ARDUINO_MEGA 行并尝试使红色 LED 闪烁,我希望这样:digitalWrite (22,高)。如果我取消注释 #define ARDUINO_UNO 行并尝试使红色 LED 闪烁,我希望这样:digitalWrite(2, HIGH) 等等。但它不起作用
  • 我想要的过程步骤:blink('R', 2, 100) -> 哪个板没有注释(例如mega) -> R=22 -> 在blink函数中digitalWrite(22, HIGH )
  • 或者这个:blink('R', 2, 100) -> 哪个板没有注释(例如 UNO) -> 所以 R=2 -> 在闪烁函数中 digitalWrite(2, HIGH)

标签: c arduino


【解决方案1】:

您的代码有些问题:

# 不是 C 中的注释。它启动编译器指令,例如 #define。如果您想评论其中一个,请在其前添加评论,如下所示://:

#define ARDUINO_MEGA
// #define ARDUINO_UNO
// #define ARDUINO_NANO

如果没有 cmets,您将定义所有三个值,因此最后一个定义块将覆盖之前的定义块。定义块本身应该可以工作,但 the documentation recommends 使用 const 而不是 #define 如果它不直接与编译器相关。

这意味着定义块应该如下所示:

#ifdef ARDUINO_NANO
const int R 7 // Red led attached to pin 7
const int G 8 // Green led attached to pin 8
const int B 9 // Blue led attached to pin 9
#endif

这是下一个错误:您提供的是 char 而不是预期的整数。编译器将 char 转换为预期的字节,但为此使用 ASCII 值。 R 变为 82 而不是您对 Arduino Mega 所期望的 22

void loop(){
    // blink('R', 5, 100);
    blink(R, 5, 100);
    blink(G, 3, 300);
    blink(B, 10, 80);
}

【讨论】:

  • 太棒了!请点击答案左侧的复选标记,将解决您问题的答案标记为已接受。
猜你喜欢
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多