我想将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);
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的眨眼功能是:
如果我取消注释#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
谢谢.
您的代码有些问题:
#
不是C中的注释.例如,它启动编译器指令#define
.如果你想评论一个,请在它之前添加注释//
:
#define ARDUINO_MEGA
// #define ARDUINO_UNO
// #define ARDUINO_NANO
Run Code Online (Sandbox Code Playgroud)
如果没有注释,则定义所有三个值,因此最后一个定义块将覆盖先前的定义块.定义块本身应该可以工作,但文档建议使用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
Run Code Online (Sandbox Code Playgroud)
这是下一个错误:您提供的是char而不是预期的整数.编译器将char转换为预期的字节,但为此使用ASCII值.一个R
变82
,而不是22
你期望的Arduino的兆.
void loop(){
// blink('R', 5, 100);
blink(R, 5, 100);
blink(G, 3, 300);
blink(B, 10, 80);
}
Run Code Online (Sandbox Code Playgroud)