Effekte für LED-Strip nacheinander ausführen



  • Hallo,
    ich habe keine Ahnung vom programmieren und habe mir einen Code für 2 LED-Effekte zusammen kopiert.
    Wenn ich den LED-Strip anschalte, erscheint nur der "rainbow"-Effekt.
    Kommentiere ich //rainbow(wait); aus, wird auch der "updateLed"-Effekt angezeigt.

    Ich möchte aber erst den "updateLed"-Effekt sehen und danach den "rainbow"-Effekt.
    Könnt ihr mir bitte helfen?

    Gruß
    Conny
    #include <Adafruit_NeoPixel.h>

    #define PIN 6
    #define NUM_LED 60
    #define SEG_LEN 1

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LED, PIN, NEO_GRB + NEO_KHZ800);

    int wait = 110;
    int wait2 = 10;

    int num_segments = NUM_LED / SEG_LEN;
    int num_colors = 3;
    int colors[3][3];

    int offset = 0;
    offset = (offset+1)%NUM_LED;

    void setup() {
    strip.begin();
    strip.show();
    }
    void loop() {

    offset = (offset+1)%NUM_LED;
    updateLed(offset,wait);
    rainbow(wait);

    }
    void updateLed(int offset,int wait){

    colors[0][0] = 0;
    colors[0][1] = 0;
    colors[0][2] = 255;

    int i;
    for(i=0; i<num_segments; i++){
    strip.setPixelColor((i*SEG_LEN+offset)%60,
    strip.Color(colors[i%num_colors][0],
    colors[i%num_colors][1],
    colors[i%num_colors][2]));
    }
    strip.show();
    delay(wait);
    }
    void rainbow(uint8_t wait) {
    uint16_t i, j, d;
    for(d=0; d < 20; d++){
    for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait2);
    }
    }
    }
    uint32_t Wheel(byte WheelPos) {
    if(WheelPos < 85) {
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
    } else if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
    } else {
    WheelPos -= 170;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
    }
    }



  • 1. code tags bitte: [code="cpp"]hier dein c++ code[/code]
    2. #define ist hier unnötig und unschön.
    3. ich sehe hier keine main-funktion.



  • Der LED-Strip soll mit einem Arduino gesteuert werden.
    Für Arduino wird keine "main" Funktion geschrieben, sondern eine "setup".



  • #include <Adafruit_NeoPixel.h>
    
    #define PIN 6
    #define NUM_LED 60
    #define SEG_LEN 1
    
    Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LED, PIN, NEO_GRB + NEO_KHZ800);
    
    int wait = 110;
    int wait2 = 10;
    
    int num_segments = NUM_LED / SEG_LEN;
    int num_colors = 3;
    int colors[3][3];
    
    int offset = 0;
    offset = (offset + 1) % NUM_LED;
    
    void setup() {
    	strip.begin();
    	strip.show();
    }
    void loop() {
    
    	offset = (offset + 1) % NUM_LED;
    	updateLed(offset, wait);
    	rainbow(wait);
    
    }
    void updateLed(int offset, int wait){
    
    	colors[0][0] = 0;
    	colors[0][1] = 0;
    	colors[0][2] = 255;
    
    	int i;
    	for (i = 0; i < num_segments; i++){
    		strip.setPixelColor((i*SEG_LEN + offset) % 60,
    			strip.Color(colors[i%num_colors][0],
    			colors[i%num_colors][1],
    			colors[i%num_colors][2]));
    	}
    	strip.show();
    	delay(wait);
    }
    void rainbow(uint8_t wait) {
    	uint16_t i, j, d;
    	for (d = 0; d < 20; d++){
    		for (j = 0; j < 256; j++) {
    			for (i = 0; i < strip.numPixels(); i++) {
    				strip.setPixelColor(i, Wheel((i + j) & 255));
    			}
    			strip.show();
    			delay(wait2);
    		}
    	}
    }
    uint32_t Wheel(byte WheelPos) {
    	if (WheelPos < 85) {
    		return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
    	}
    	else if (WheelPos < 170) {
    		WheelPos -= 85;
    		return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
    	}
    	else {
    		WheelPos -= 170;
    		return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
    	}
    }
    

    Um mal automatisch formatierten Code zu sehen...



  • Processing != C++


Anmelden zum Antworten