首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Arduino (C?)能源效率规划

Arduino (C?)能源效率规划
EN

Stack Overflow用户
提问于 2016-10-21 00:15:44
回答 1查看 83关注 0票数 0

我有一个问题,我还没有找到这个具体问题的答案。

我最近开始了一个项目,建立一个Arduino板来控制从红色到黄色,从黄色到绿色,从绿色到绿色,从蓝色到蓝色,从蓝色到洋红色,从洋红色到红色的各种LED的过渡。使用指针映射每个RGB值的全部频谱,基于255个索引数组。

我的问题是如何编写节能的代码。我需要它是尽可能有效的,因为我的项目将运行4可充电AA电池(1.5V AA每个)。

如何编写节能代码?抑或这是一个徒劳无益的问题?

我正在运行的假设(可能是非常不准确),在设置完成后,将在循环过程中消耗更少的能量。

有关守则如下:

代码语言:javascript
运行
复制
int const RED = 3 /* Pin 3 */, BLUE = 5 /* Pin 5 */, GREEN = 6 /* Pin 6 */;
int* _RED[1536];
int* _GREEN[1536];
int* _BLUE[1536];
int RGB[256];


void setup() {
    for (int i = 0; i<256;++i){
        RGB[i] = i;
    }
//RED TO YELLOW
    for (int i = 0 ; i<256;++i){
        _RED[i] = &RGB[255];
        _GREEN[i] = &RGB[i];
        _BLUE[i] = &RGB[0];
    }
 //YELLOW TO GREEN
    for (int i = 256;i < 512; ++i){
        _RED[i] = &RGB[511-i];
        _GREEN[i] = &RGB[255];
        _BLUE[i] = &RGB[0];
    }
 //GREEN TO TEAL
    for (int i = 512; i <768;++i){
        _RED[i] = &RGB[0];
        _GREEN[i] = &RGB[255];
        _BLUE[i] = &RGB[255+(i-767)];
    }
 //TEAL TO BLUE
    for (int i = 768; i < 1024; ++i){
        _RED[i] = &RGB[0];
        _GREEN[i] = &RGB[1023-i];
        _BLUE[i] = &RGB[255];
    }
 //BLUE TO MAGENTA
    for (int i = 1024; i < 1280; ++i){
        _RED[i] = &RGB[(255+(i-1279))];
        _GREEN[i] = &RGB[0];
        _BLUE[i] = &RGB[255];
    }
 //MAGENTA TO RED
    for (int i = 1280; i < 1536; ++i){
        _RED[i] = &RGB[255];
        _GREEN[i] = &RGB[0];
        _BLUE[i] = &RGB[1535-i];
    }
 //COMPLETES FULL SPECTRUM EXCLUDING WHITE AND BLACK
}

void loop(){
for(int i = 0; i <1536; ++i){
    analogWrite(RED,*_RED[i]);
    analogWrite(GREEN,*_GREEN[i]);
    analogWrite(BLUE,*_BLUE[i]);
    delay(100);
}

}

还是最好按以下方式使用该代码:

代码语言:javascript
运行
复制
int const Red = 3,  /* Pin 3 */ Blue = 5, /* Pin 5 */ Green = 6; /* Pin 6 */
void RGB(int R, int G, int B) {
analogWrite(Red,R); analogWrite(Green,G); analogWrite(Blue,B); delay(25);}
void setup() {}
void loop() {
int r=0,g=0,b=0;
r = 255;g = 0;b = 0; for (int i = 0; i < 256; ++i){RGB(r,i,b);}
r = 255; g = 255;b = 0; for (int i = 255; i >= 0; --i){RGB(i,g,b); } 
r = 0;g = 255;b = 0; for (int i = 0; i < 256; ++i){RGB(r,g,i);}
r = 0;g = 255;b = 255; for (int i = 255; i >= 0; --i){RGB(r,i,b);}
r = 0;g = 0;b = 255; for (int i = 0; i < 256; ++i){RGB(i,g,b);}
r = 255;g = 0;b = 255; for (int i = 255; i >= 0; --i){RGB(r,g,i);}
delay(1000);
     }

谢谢,布雷特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-21 00:35:33

由于Arduino delay()函数不会使处理器进入睡眠状态,这两个程序的能量消耗将大致相等(而且相当高)。如果功耗很重要,您将需要自己将处理器置于睡眠模式。不幸的是,Arduino框架没有公开任何方法来做到这一点;要做到这一点,您需要降到适当的AVR寄存器和内部。

另一个问题是,第一个程序需要大约10 KB的RAM用于您的四个阵列,这比大多数AVR微控制器上可用的内存要多得多。一般来说,在这个平台上应该避免大的查找表。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40166472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档