2016-07-26 6 views
1

ich habe ein Problem, ich kaufte gerade ein Arduino und ich fragte mich, ob jemand helfen könnte, hier ist mein Code. (Ich versuche nur zwei LEDs zum Ein- und Ausblenden zu bekommen).ungültige Konvertierung von 'int *' zu '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; 
    } 
} 

Antwort

1

Sie passieren ein Array analogWrite oder pinMode, wo es eine uint8_t erwartet.

Die Arduino-Pin-Manipulationsfunktionen können nur einen Pin gleichzeitig verarbeiten. Es gibt Möglichkeiten, die AVR/ARM GPIO-Register direkt zu manipulieren, aber diese können knifflig sein (nicht empfohlen für die Verwendung, außer Sie wirklich brauchen Geschwindigkeit).

Der Grund, warum es int * sagt, ist, weil unter Arrays Arrays in C/C++ als Zeiger dargestellt werden.

Wenn Sie beide LEDs mit analogWrite oder pinMode verbinden möchten, müssen Sie die Funktion für jede LED einmal aufrufen. Beispiel:

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

Oder

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

Im Rahmen des Programms:

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; 
} 

Nicht getestet, aber es sollte funktionieren.

Verwandte Themen