我希望在一个函数*pin_ledID
中声明和初始化一些变量rgbInitiate()
,以便被任何其他函数识别;例如rgbMixer()
。正如您所看到的,我已经尝试返回值并将它们声明为外部变量,但没有任何效果。任何帮助/建议将不胜感激。谢谢。 =)
int rgbInitiate(int ledID, int redpin, int greenpin, int bluepin) {
extern int redpin_ledID;
extern int greenpin_ledID;
extern int bluepin_ledID;
redpin_ledID = redpin;
greenpin_ledID = greenpin;
bluepin_ledID = bluepin;
pinMode(redpin_ledID, OUTPUT);
pinMode(greenpin_ledID, OUTPUT);
pinMode(bluepin_ledID, OUTPUT);
return redpin_ledID;
return greenpin_ledID;
return bluepin_ledID;
}
void rgbMixer(int ledID, int redvalue, int greenvalue, int bluevalue) {
analogWrite(redpin_ledID, redvalue);
analogWrite(greenpin_ledID, greenvalue);
analogWrite(bluepin_ledID, bluevalue);
}
答案 0 :(得分:0)
以及...
当我第一次读到你的答案时,我认为wtf他是否想要全局变量? 但后来我读了你的代码(并重新格式化了,因此很明显这段代码是无意义的)......然后我就是 OMFG!
我不能再强调@laune的评论了:
如果不了解这些基础知识,就无法开始编程。
所以你所写的内容对C或C ++毫无意义。我给你的第一个建议是阅读that book(你可以很容易地找到电子书),也许是一本关于你语言的C ++的好书。
通常只有常规singletons的规则通常只用于Arduino代码中,因为设计选择将main()
函数入口点拆分为两个函数setup()
和loop()
。
extern
关键字的方式只是简单的无意义我不知道从哪种情况开始,除了给你链接到文档阅读主题:
http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
return
时,函数执行线程结束... 因此,在一个执行线程中有多个返回没有意义,所有以下内容永远不会执行,并被视为死代码。
但是除了这个教学课程之外,你想要做的事情很简单,你可以通过使用预处理器宏来实现这一点(这是你用例的常用方法):
#define LED_RED_PIN 12
#define LED_GREEN_PIN 11
#define LED_BLUE_PIN 10
void setup_leds() {
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(LED_BLUE_PIN, OUTPUT)
}
void rgb_mixer(uint8_t r, uint8_t g, uint8_t b) {
analogWrite(LED_RED_PIN, redvalue);
analogWrite(LED_GREEN_PIN, greenvalue);
analogWrite(LED_BLUE_PIN, bluevalue);
}
void setup() {
setup_leds();
}
void loop() {
rgb_mixer(128, 128, 128);
}
你可能想要明智地定义三个领导者,并且有办法做到这一点。您可以创建一个包含三个LED数据的类,您可以编写一个宏,在一个优雅的行中设置三个LED ......
但是我不会给你任何暗示,因为在尝试变聪明之前,你需要学习,实验和失败< / strong>即可。一旦你完成了这个过程,你将学习编程和C语言的基础知识,面向对象的编程是什么,以及什么是C ++等...... 你将获得聪明的权利,你会自己找出那些简洁的方法!
在此之前,请好好阅读并祝你好运!
好的,根据你所写的内容,我认为你想要的是以下内容:
class RGBMixer {
uint8_t _red, _green, _blue;
public:
RGBMixer();
void begin(uint8_t r_pin, uint8_t g_pin, uint8_t b_pin) {
_red = r;
_green = g;
_blue = b;
pinMode(r, OUTPUT);
pinMode(g, OUTPUT);
pinMode(b, OUTPUT);
}
void mix(uint8_t r, uint8_t g, uint8_t b) {
analogWrite(_red, r);
analogWrite(_green, g);
analogWrite(_blue, b);
}
} rgb_mixer;
void setup() {
rgb_mixer.begin(10, 11, 12);
}
void loop() {
rgb_mixer.mix(128, 128, 128);
}