|
#include
#ifdef __AVR__
#include // 16MHz Adafruit Trinket에 필요합니다.
#endif
버튼에 연결된 디지털 I/O 핀. 이것은 <strong>버튼을 통해 제어될 것입니다</strong>.
풀업 레지스터를 사용하여 스위치가 순간적으로 핀을 지면으로 끌어당길 수 있습니다.
// 높음에서 -> 낮음으로 전환할 때, 버튼 누른 로직이 실행될 것입니다.
#define BUTTON_PIN 2
#define PIXEL_PIN 6 // NeoPixels에 연결된 디지털 I
#define PIXEL_COUNT 81 // 네오пі클스의 수
// 우리의 NeoPixel 스트립 객체를 선언하세요:
Adafruit_NeoPixel 스트립(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
// 인자 1 = NeoPixel 스트립의 픽셀 수
// 인자 2 = Arduino 핀 번호(대부분의 경우 유효한 값입니다)
// 인자 3 = 픽셀 타입 플래그, 필요에 따라 합쳐주세요:
// NEO_KHZ800 800KHz 비트스트림(대부분의 NeoPixel 제품들은 WS2812 LED를 사용합니다)
// NEO_KHZ400 400KHz (클래식 'v1' (v2가 아님) FLORA 픽셀, WS2811 드라이버)
// NEO_GRB 픽셀은 GRB 비트스트림을 위해 연결되어 있습니다(대부분의 NeoPixel 제품들).
// NEO_RGB 픽셀은 RGB 비트스트림을 위해 연결되어 있습니다(v1 FLORA 픽셀, v2가 아님).
// NEO_RGBW 픽셀은 RGBW 비트스트림을 위해 연결되어 있습니다(NeoPixel RGBW 제품들).
픽셀 수 = 81;
부울 변수 oldState = HIGH;
부울형 변수 oneTime = LOW;
인트 모드 = 0; // 현재 활성화된 애니메이션 모드, 0-9
모드 수는 4입니다. // x-1
오래된 모드인 int oldMode = numOfMode + 1;
긴 버튼 누른 상태 = 0;
부울 변수 pressed = LOW;
밝기 = 254;
//밝기를 관리하세요.
부울형 변수 getDark = LOW;
비어있는 setup() 함수:
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT_PULLUP);
스트립.시작(); // NeoPixel 스트립 객체를 초기화하십시오 (필요)
스트립.setBrightness(브라이트니스);
스트립.쇼(); // 모든 픽셀을 '오프'로 초기화합니다.
그것은...
비어있는 loop() 함수:
// 현재 버튼 상태를 가져옵니다.
부울 타입의 새 상태 = digitalRead(BUTTON_PIN);
// 상태가 LOW에서 HIGH로 변경되었는지 확인하십시오 (버튼 누름).
만일 (새 상태가 HIGH이고, 오래된 상태가 LOW인 경우) {
버튼을 방출하기 위한 짧은 지연 시간.
delay(20);
// 데บ운치 후에 버튼이 여전히 낮은 상태인지 확인하세요.
새 상태 = digitalRead(BUTTON_PIN);
만일 (새 상태가 HIGH이면) { // 예, 여전히 HIGH입니다.
장시간 누른 것인지 짧은 시간 누른 것인지 분석을 시작하세요.
버튼이 누ρされた 시점 = millis();
프레스드 = 하이;
}
}
만일 그것이 누ρ된다면, 분석을 하세요.
만약 (pressed == HIGH)면,
시스템 시간을 가져오세요.
인트 타임_시스템 = 밀리초();
pressed time을 계산하세요.
pressed_time = time_system - button_pressed;
만약 (새 상태가 LOW이고) 그리고 (누른 시간이 1000초 미만인 경우)
++mode;
만일 (모드 > 모드의 수)이면,
모드 = 0; // 다음 모드로 진행하고 #8 후에 다시 돌아가기
}
// 램프가 꺼져 있는 경우, 다음 터치로 다시 활성화 됩니다.
만일 (밝기 == 0)면,
모드 = 0;
밝기 = 254;
스트립.setBrightness(브라이트니스);
스트립.쇼();
}
// 프레스 분석을 비활성화하세요.
프레스드 = 로우;
그렇지 않은 경우에는 ((newState == HIGH) && (pressed_time > 1000) && (brithness > 0))가 성립되어야 합니다.
//더 어두워지거나 더 밝아지다
만일 (getDark == HIGH)이면,
밝기 = strip.getBrightness();
만약 (밝기가 254 미만이면) {
브라이트네스 = 브라이트네스 + 1;
만일 (밝기 > 254)면,
밝기 = 254;
}
스트립.setBrightness(브라이트니스);
스트립.쇼();
}
그렇지 않으면,
밝기 = strip.getBrightness();
만일 (밝기 > 0)면,
브라이트네스 = 브라이트네스 - 1;
만약 (밝기 < 0)면,
밝기 = 0;
}
만일 (밝기 == 0)면,
스트립은 제거되었습니다.
모드 = -1;
프레스드 = 로우;
}
스트립.setBrightness(브라이트니스);
스트립.쇼();
}
}
그렇지 않은 경우에는, (새 상태가 LOW이고, 누른 시간이 1000초 이상이며, 밝기가 0보다 큰 경우에만)
조명이 어두워진 후나 조명 스위치를 누른 후 상태를 관리하세요.
getDark = !getDark;
// 프레스 분석을 비활성화하세요.
프레스드 = 로우;
}
}
시리얼.println(mode);
만약 (oldMode가 mode와 다르다면) {
원타임 = 하이;
그렇지 않은 경우에는,
원타임 = 낮음;
}
만일 (모드 == 4)이면,
레인보우(2, oneTime);
}
만약 (모드 == 3) {
colorWipe(strip.Color( 0, 255, 0), 10, oneTime);
}
만약 (모드 == 2) {
colorWipe(strip.Color( 255, 0, 255), 10, oneTime);
}
만일 (모드 == 1)이면,
colorWipe(strip.Color( 0, 255, 255), 10, oneTime);
}
만일 (모드 == 0)이면,
colorWipe(strip.Color( 255, 255, 255), 10, oneTime);
}
만일 (mode == -1)이면,
colorWipe(strip.Color( 0, 0, 0), 10, oneTime);
}
// 마지막으로 읽은 버튼 상태를 이전 상태로 설정합니다.
오래된 상태 = 새로운 상태;
오래된 모드 = 모드;
지연(5);
그것은...
스트립의 픽셀을 하나씩 색상으로 채우기. 스트립은 지워지지 않습니다.
// 먼저, 거기에 있는 모든 것은 픽셀 단위로 커버될 것입니다. 색상을 전달하세요.
// (단일 '패키지된' 32비트 값으로, 이는 <calling> 함수를 통해 얻을 수 있습니다.)
// 위의 루프() 함수에서 보인 것처럼, strip.Color(빨간색, 초록색, 파란색)
및 픽셀들 사이의 지연 시간(밀리초 단위).
인트 i = 0;
void colorWipe(uint32_t color, int wait, boolean oneTime) {
만일 (oneTime == HIGH) 이면,
i = 0;
}
만약 (i < numPixels)면,
// 픽셀 하나를 더 추가하세요.
스트립.setPixelColor(i, color); // 픽셀의 색상을 설정(램에서)
스트립.쇼(); // 스트립을 업데이트하여 매치하도록 하세요.
++i;
遅延(wait); // 잠시 중단
}
그것은...
긴 첫 픽셀 색상 = 0;
전체 스트립을 따라 레인보우 사이클. 프레임 사이의 지연 시간(ms)을 전달하세요.
비어있는 레인보우(void rainbow(int wait, boolean oneTime))는, 지정된 대기 시간
만일 (oneTime == HIGH) 이면,
첫 픽셀 색상 = 0;
i = 0;
}
만약 (첫 픽셀 색상 < 3 * 65536)면,
만약 (i < numPixels)면,
// 픽셀 색상을 일정 양으로 오프셋하여 한 회전을 완료하도록 합니다.
스트립의 길이를 따라 있는 색상 휠(65536의 범위)
// (strip.numPixels() 단계):
인트 픽셀 ฮิ尤 = 첫 번째 픽셀 ฮิ유 + (i * 65536L / 500);
// strip.ColorHSV()는 1개 또는 3개의 인자를 받을 수 있습니다: 색상(0 내지 65535) 또는
// 선택적으로 포화도와 값(밝기)을 추가하십시오(각각 0에서 255까지).
// 여기서는 단순히 단일 인자의 색조 변형을 사용하고 있습니다. 결과는
// '더 정확한' 색상을 제공하기 위해 strip.gamma32()를 통해 전달됩니다.
각 픽셀에 할당하기 전에:
스트립.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
++i;
그렇지 않으면,
i = 0;
}
첫번째 픽셀 색상 = 256 +;
스트립.쇼(); // 새로운 내용으로 스트립을 업데이트하세요.
遅延(wait); // 잠시 중단
그렇지 않으면,
첫 픽셀 색상 = 0;
}
그것은...
|