LinuxWindows
Cadet 3rd Year
- Registriert
- Okt. 2018
- Beiträge
- 39
Hallo liebes Forum,
ich habe ein Programm geschrieben, mit dem ich meinen NeoPixel-Led-Streifen mit dem Arduino steuern kann. Ich kann zwischen den Effekten und Lichtern per Knopf hin und her wechseln. Das Problem ist, wenn die Animationen schwieriger werden, wird der Taster seltener Abgefragt. So kommt es das man zum Wechseln der Modi teilsweise den Knopf bis zu einer Minute lang drücken muss. Kann mir jemand sagen, wie ich das beschleunige? Hier ist der Code:
Kann mir jemand helfen?
Danke im Voraus
ich habe ein Programm geschrieben, mit dem ich meinen NeoPixel-Led-Streifen mit dem Arduino steuern kann. Ich kann zwischen den Effekten und Lichtern per Knopf hin und her wechseln. Das Problem ist, wenn die Animationen schwieriger werden, wird der Taster seltener Abgefragt. So kommt es das man zum Wechseln der Modi teilsweise den Knopf bis zu einer Minute lang drücken muss. Kann mir jemand sagen, wie ich das beschleunige? Hier ist der Code:
C-ähnlich:
#include <Adafruit_NeoPixel.h>
#define PIN 2
#define NUMPIXELS 15
const int ButtonPin = 7;
;
int Licht = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
// put your setup code here, to run onc.begin();
strip.begin();
pinMode(ButtonPin, INPUT);
Serial.begin(9600);
strip.show();
}
int ButtonState = digitalRead(ButtonPin);
void loop() {
// put your main code here, to run repeatedly:
for (;;){
ButtonState = digitalRead(ButtonPin);
Serial.print(ButtonState);
Knopf();
}
}
void Prufen(){
if (Licht == 10){
Licht = 0;}
if (Licht == 1){
Weis();
}
if (Licht == 2){
ColorWipe();
}
if (Licht == 3){
Rot();
}
if (Licht == 4){
Blau();
}
if (Licht == 5){
Grun();
}
if (Licht == 6){
TheaterChase();
}
if (Licht == 7){
Rainbow();
}
if (Licht == 8){
RainbowCyle();
}
if (Licht == 9){
TheaterChaseRainbow();
}
}
void Knopf(){
if (ButtonState == HIGH){
ButtonState = 0;
Licht = Licht +1;
delay(1000);
}
Prufen();
strip.show();
}
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 ColorWipe(){
colorWipe(strip.Color(255, 0, 0), 50); // Red
colorWipe(strip.Color(0, 255, 0), 50); // Green
colorWipe(strip.Color(0, 0, 255), 50); // Blue
}
void TheaterChase(){
theaterChase(strip.Color(127, 127, 127), 50); // White
theaterChase(strip.Color(127, 0, 0), 50); // Red
theaterChase(strip.Color(0, 0, 127), 50); // Blue
theaterChase(strip.Color(0, 127, 0), 50); // Blue
}
void theaterChase(uint32_t c, uint8_t wait) {
for (int j=0; j<10; j++) { //do 10 cycles of chasing
for (int q=0; q < 3; q++) {
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, c); //turn every third pixel on
}
strip.show();
delay(wait);
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0); //turn every third pixel off
}
}
}
}
void Rainbow(){
rainbow(20);
}
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);
}
}
void RainbowCyle(){
rainbowCycle(20);
}
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);
}
}
void TheaterChaseRainbow(){
theaterChaseRainbow(50);
}
void theaterChaseRainbow(uint8_t wait) {
for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel
for (int q=0; q < 3; q++) {
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, Wheel( (i+j) % 255)); //turn every third pixel on
}
strip.show();
delay(wait);
for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
strip.setPixelColor(i+q, 0); //turn every third pixel off
}
}
}
}
void Weis(){
strip.setPixelColor(0, 225, 225, 225);
strip.setPixelColor(1, 225, 225, 225);
strip.setPixelColor(2, 225, 225, 225);
strip.setPixelColor(3, 225, 225, 225);
strip.setPixelColor(4, 225, 225, 225);
strip.setPixelColor(5, 225, 225, 225);
strip.setPixelColor(6, 225, 225, 225);
strip.setPixelColor(7, 225, 225, 225);
strip.setPixelColor(8, 225, 225, 225);
strip.setPixelColor(9, 225, 225, 225);
strip.setPixelColor(10, 225, 225, 225);
strip.setPixelColor(11, 225, 225, 225);
strip.setPixelColor(12, 225, 225, 225);
strip.setPixelColor(13, 225, 225, 225);
strip.setPixelColor(14, 225, 225, 225);
}
void Rot(){
strip.setPixelColor(0, 225, 0, 0);
strip.setPixelColor(1, 225, 0, 0);
strip.setPixelColor(2, 225, 0, 0);
strip.setPixelColor(3, 225, 0, 0);
strip.setPixelColor(4, 225, 0, 0);
strip.setPixelColor(5, 225, 0, 0);
strip.setPixelColor(6, 225, 0, 0);
strip.setPixelColor(7, 225, 0, 0);
strip.setPixelColor(8, 225, 0, 0);
strip.setPixelColor(9, 225, 0, 0);
strip.setPixelColor(10, 225, 0, 0);
strip.setPixelColor(11, 225, 0, 0);
strip.setPixelColor(12, 225, 0, 0);
strip.setPixelColor(13, 225, 0, 0);
strip.setPixelColor(14, 225, 0, 0);
}
void Grun(){
strip.setPixelColor(0, 0, 225, 0);
strip.setPixelColor(1, 0, 225, 0);
strip.setPixelColor(2, 0, 225, 0);
strip.setPixelColor(3, 0, 225, 0);
strip.setPixelColor(4, 0, 225, 0);
strip.setPixelColor(5, 0, 225, 0);
strip.setPixelColor(6, 0, 225, 0);
strip.setPixelColor(7, 0, 225, 0);
strip.setPixelColor(8, 0, 225, 0);
strip.setPixelColor(9, 0, 225, 0);
strip.setPixelColor(10, 0, 225, 0);
strip.setPixelColor(11, 0, 225, 0);
strip.setPixelColor(12, 0, 225, 0);
strip.setPixelColor(13, 0, 225, 0);
strip.setPixelColor(14, 0, 225, 0);
}
void Blau(){
strip.setPixelColor(0, 0, 0, 225);
strip.setPixelColor(1, 0, 0, 225);
strip.setPixelColor(2, 0, 0, 225);
strip.setPixelColor(3, 0, 0, 225);
strip.setPixelColor(4, 0, 0, 225);
strip.setPixelColor(5, 0, 0, 225);
strip.setPixelColor(6, 0, 0, 225);
strip.setPixelColor(7, 0, 0, 225);
strip.setPixelColor(8, 0, 0, 225);
strip.setPixelColor(9, 0, 0, 225);
strip.setPixelColor(10, 0, 0, 225);
strip.setPixelColor(11, 0, 0, 225);
strip.setPixelColor(12, 0, 0, 225);
strip.setPixelColor(13, 0, 0, 225);
strip.setPixelColor(14, 0, 0, 225);
}
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);
}
Danke im Voraus