2016-07-26 25 views
1

imに問題があります。私はちょうどarduinoを購入しました。誰か助けてくれれば幸いです。 (私はちょうど2つのledをフェードインとフェードインしようとしています)。'int *'から 'uint8_t'への無効な変換

int ledCount = 2; 
int ledPins [ ] = {11,12 }; 
int brightness = 0; 
int delayTime = 10; 
void setup() { 
pinMode(ledPins, OUTPUT); 
} 
void loop() { 
    while(brightness < 255) 
    { 
    analogWrite(ledPins, brightness); 
    delay(delayTime); 
brightness = brightness + 1; 
    } 
while(brightness > 0) 
    { 
analogWrite(ledPins, brightness); 
delay(delayTime); 
    brightness = brightness - 1; 
    } 
} 

答えて

1

あなたはそれがuint8_tを期待しているところ、analogWriteまたはpinModeに配列を渡しています。

Arduinoのピン操作機能は、一度に1つのピンのみを処理します。その周りには、AVR/ARM GPIOレジスタを直接操作する方法がありますが、これらは細かいことがあります(に実際にの速度が必要な場合を除き、使用することはお勧めしません)。

int *という理由は、C/C++の配列がポインタとして表現されているためです。

両方のLEDに対してanalogWriteまたはpinModeを使用する場合は、LEDごとにこの機能を1回呼び出す必要があります。例:あなたのプログラムのコンテキストで

analogWrite(ledPins[0], brightness); 
analogWrite(ledPins[1], brightness); 

それとも

for(int currentLED = 0;currentLED < ledCount;i++){ 
    analogWrite(ledPins[currentLED], brightness); 
} 

int ledCount = 2; 
int ledPins [] = {11, 12}; 

int brightness = 0; 
int delayTime = 10; 

#define INCREASE 1 
#define DECREASE 2 
int brightness_change = INCREASE; 

void setup(){ 
    for(int i = 0;i < ledCount;i++){ 
     pinMode(i, OUTPUT); 
    } 
} 

void loop(){ 
    while(brightness < 255 && brightness_change == INCREASE){ 
     brightness = brightness + 1; 
    } 
    while(brightness > 0 && brightness_change == DECREASE){ 
     brightness = brightness - 1; 
    } 
    if(brightness == 255){ 
     brightness_change = DECREASE; 
    } 
    if(brightness == 0){ 
     brightness_change = INCREASE; 
    } 

    for(int current_led = 0;current_led < ledCount;current_led++){ 
     analogWrite(current_led, brightness; 
    } 
    delay(delayTime; 
} 

テストし、それが動作するはずはありません。

関連する問題