내 침대에서 내리고있는 네오 픽셀 스트립이 있습니다. 최근에 소리 센서를 추가하여 한 번 박수를 치고 가벼운 애니메이션을 켜거나 끌 수 있습니다. 이제 코드를 작동시키는 데 어려움이 있습니다. 나는 조명을 켤 수는 있지만 다시 박수를 쳐서 끌 수는 없다. 내가 가벼운 애니메이션을 실행하기 위해 사용하는 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);