2017-03-19 10 views
1

내 침대에서 내리고있는 네오 픽셀 스트립이 있습니다. 최근에 소리 센서를 추가하여 한 번 박수를 치고 가벼운 애니메이션을 켜거나 끌 수 있습니다. 이제 코드를 작동시키는 데 어려움이 있습니다. 나는 조명을 켤 수는 있지만 다시 박수를 쳐서 끌 수는 없다. 내가 가벼운 애니메이션을 실행하기 위해 사용하는 while 루프가 끝날 때 가벼운 애니메이션의 조건을 해제한다는 사실은 문제가 될 수 있다고 생각하지만, 내가 무엇을 할 수 있는지 전혀 알지 못한다. 그것을 고치기. 누군가가 나를 도울 수 있습니까?Neopixel 스트립 애니메이션 문제를 전환

#include <Adafruit_NeoPixel.h> 
#ifdef __AVR__ 
#include <avr/power.h> 
#endif 
#define PIN 6 

Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800); 
int soundSensor = 2; 
int LED = 13; 


void setup() 
{ 

// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket 
    #if defined (__AVR_ATtiny85__) 
    if (F_CPU == 16000000) clock_prescale_set(clock_div_1); 
    #endif 
    // End of trinket special code 

    strip.begin(); 
    strip.show(); // Initialize all pixels to 'off' 
    pinMode (soundSensor, INPUT); 
    pinMode (LED, OUTPUT); 
} 

void loop() 
{ 
    int toggle = 0; 
    int statusSensor = digitalRead (soundSensor); 

    if (statusSensor == 1 && toggle == 0) 
    { 
    toggle= 1; 
    digitalWrite(LED, HIGH); 
    //statusSensor = 0; 
    statusSensor = digitalRead (soundSensor); 
    } 

    //NEOPIXEL CODE: 
    while (toggle == 1) 
    { 
    digitalWrite(LED, HIGH); 
    delay(200); 
    digitalWrite(LED, LOW); 
    delay(200); 
    digitalWrite(LED, HIGH); 
    delay(200); 
    digitalWrite(LED, LOW); 
    digitalWrite(LED,HIGH); 
    colorWipe(strip.Color(255, 0, 0), 50);  // Red 
    colorWipe(strip.Color(0, 255, 0), 50);  // Green 
    colorWipe(strip.Color(255,255,255), 50); //White 
    colorWipe(strip.Color(255,255,255), 50); 
    colorWipe(strip.Color(0, 0, 255), 50); // Blue 
    rainbow(20); 
    rainbowCycle(20); 
    if(statusSensor == 1){ 
    toggle = 0; 
    } 
    } 

    if (statusSensor == 1 && toggle == 1) 
    { 
    toggle = 0; 
    digitalWrite(LED, LOW); 
    } 


} 


//NEOPIXEL Functions: 
void colorWipe(uint32_t c, uint8_t wait) { 
    for(uint16_t i=0; i<strip.numPixels(); i++) { 
    strip.setPixelColor(i, c); 
    strip.show(); 
    delay(wait); 
    } 
} 

void rainbow(uint8_t wait) { 
    uint16_t i, j; 

    for(j=0; j<256; j++) { 
    for(i=0; i<strip.numPixels(); i++) { 
     strip.setPixelColor(i, Wheel((i+j) & 255)); 
    } 
    strip.show(); 
    delay(wait); 
    } 
} 

// Slightly different, this makes the rainbow equally distributed throughout 
void rainbowCycle(uint8_t wait) { 
    uint16_t i, j; 

    for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel 
    for(i=0; i< strip.numPixels(); i++) { 
     strip.setPixelColor(i, Wheel(((i * 256/strip.numPixels()) + j) & 255)); 
    } 
    strip.show(); 
    delay(wait); 
    } 
} 

uint32_t Wheel(byte WheelPos) { 
    WheelPos = 255 - WheelPos; 
    if(WheelPos < 85) { 
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); 
    } 
    if(WheelPos < 170) { 
    WheelPos -= 85; 
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); 
    } 
    WheelPos -= 170; 
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); 

답변

0

토글을 0으로 설정하면 네오 픽셀 스트립에 색상을 쓰지 않습니다. 당신이 제로에 토글 설정 그래서 그들은 단지 그들이에 있던 어떤 상태로 남아있을 것입니다 당신은 단지에 그들 모두를 설정하여이 문제를 해결할 수 있습니다 "블랙"(즉, 해제).

if(statusSensor == 1) { 
    toggle = 0; 
    for(uint16_t i=0; i<strip.numPixels(); i++) { 
     strip.setPixelColor(strip.Color(0,0,0)); 
    } 
    strip.show(); 
} 

을 당신은 필요하지 않습니다 여기에 지연이 생기면 곧바로 돌리는 것이 좋겠지 만, 그럴 수는 있습니다.