私は本当にこの特定の質問に対する答えを見つけることができませんでした。Arduino(C?Based)Programming for Energy Efficiency
私は最近、赤色から黄色、黄色から緑色、 青色、青緑色、青色からマゼンタ、赤色からマゼンタにスペクトルを移行するためにArduino Boardを設定するプロジェクトを開始しました。 ポインターを使用して、フルスペクトルの各RGB値をマップします。 255個のインデックス付き配列を基にしています。
私の質問は、エネルギー効率の高いコードを書くことです。私のプロジェクトは4つの充電式単3形電池(それぞれ1.5Vの単3形)で動作するので、できるだけ効率的にする必要があります。
エネルギー効率の良いコードを書くにはどうすればよいですか?あるいは、これは無益の問題ですか?
私はセットアップが完了した後、ループ処理中に消費されるエネルギーが少なくなると仮定しています(非常に不正確かもしれません)。
問題のコードは以下の通りです:
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);
}
}
または次のようにコードを使用する方がよいでしょう。これらのプログラムの
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);
}
おかげで、 ブレット
間違いなく、間接費(無駄なCPUサイクル=無駄な電力)を消費するポインタの配列があり、格納しようとしているデータはポインタよりも小さいです。 –
私はあなたのボードの詳細に完全に依存していると確信しています。例えば。 Arduinoゼロ電源管理に関する興味深い情報は次のとおりです。https://www.arduino.cc/en/Tutorial/ArduinoZeroPowerConsumption – Gene
ありがとう@Gene私が得ることができるすべての情報は役に立ちます。ベン私は、3つの整数の代わりにポインタと1つの整数を使用すると、スペースが少なくなるという仮定の下にあった –