Hey there,
i read so many posts about dimming a WS2812b with a potentiometer but I can´t solve my problem.
So i switch the colors by a button (works!) but if Itry do dim up or down it takes effect at the next color at least.
So, first color is 1, while it shows me this color i dim it down, nothing happens, but if i switch to color 2, it is dimmed down... while I have the live-color, my potentiometer doesn´t have any effect...
Maybe somebody can see my newbie - mistake(s) in my code?
#include <Adafruit_NeoPixel.h>
#define BUTTON_PIN 2 // Digital IO pin connected to the button. This will be
// driven with a pull-up resistor so the switch should
// pull the pin to ground momentarily. On a high -> low
// transition the button press logic will execute.
#define PIXEL_PIN 9 // Digital IO pin connected to the NeoPixels.
#define PIXEL_COUNT 12 // number of neopixel (change this accordingly)
// Parameter 1 = number of pixels in strip, neopixel stick has 8
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_RGB Pixels are wired for RGB bitstream
// NEO_GRB Pixels are wired for GRB bitstream, correct for neopixel stick
// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)
// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek einbinden
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool oldState = HIGH;
int showType = 0;
int sensorPin = A0; // select the input pin for the potentiometer (analog 1 is digital 2)
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight();
pinMode(A0, INPUT_PULLUP);
Serial.begin(9600);
pinMode(A0, INPUT_PULLUP);
}
void loop() {
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
sensorValue = analogRead(sensorPin);
strip.setBrightness( map(sensorValue, 0, 1024, 0, 255)); //adjust brightness here
// Get current button state.
bool newState = digitalRead(BUTTON_PIN);
// Check if state changed from high to low (button press).
if (newState == LOW && oldState == HIGH) {
// Short delay to debounce button.
delay(20);
// Check if button is still low after debounce.
newState = digitalRead(BUTTON_PIN);
if (newState == LOW) {
showType++;
if (showType > 4)
showType=0;
startShow(showType);
}
}
// Set the last button state to the old state.
oldState = newState;
}
void startShow(int i) {
switch(i){
case 0: tone(8, 100); // Im Hauptteil wird nun mit dem Befehl "tone ( x , y )" ein Ton abgegeben.
delay(1000); // mit einer Dauer von 1 Sekunde
noTone(8); // Der Ton wird abgeschaltet
colorWipe(strip.Color(0, 0, 0), 50); // Black/off
lcd.setCursor(0, 0);//Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile.
lcd.print("Die LED leuchtet");
lcd.setCursor(0, 1);// In diesem Fall bedeutet (0,1) das erste Zeichen in der zweiten Zeile.
lcd.print("nicht");
break;
case 1: tone(8, 100); // Im Hauptteil wird nun mit dem Befehl "tone ( x , y )" ein Ton abgegeben.
delay(1000); // mit einer Dauer von 1 Sekunde
noTone(8); // Der Ton wird abgeschaltet
colorWipe(strip.Color(255, 0, 0), 50); // Red
lcd.setCursor(0, 0);//Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile.
lcd.print("Die LED leuchtet");
lcd.setCursor(0, 1);// In diesem Fall bedeutet (0,1) das erste Zeichen in der zweiten Zeile.
lcd.print("rot ");
break;
case 2: tone(8, 100); // Im Hauptteil wird nun mit dem Befehl "tone ( x , y )" ein Ton abgegeben.
delay(1000); // mit einer Dauer von 1 Sekunde
noTone(8); // Der Ton wird abgeschaltet
colorWipe(strip.Color(0, 255, 0), 50); // Green
lcd.setCursor(0, 0);//Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile.
lcd.print("Die LED leuchtet");
lcd.setCursor(0, 1);// In diesem Fall bedeutet (0,1) das erste Zeichen in der zweiten Zeile.
lcd.print("gruen");
break;
case 3: tone(8, 100); // Im Hauptteil wird nun mit dem Befehl "tone ( x , y )" ein Ton abgegeben.
delay(1000); // mit einer Dauer von 1 Sekunde
noTone(8); // Der Ton wird abgeschaltet
colorWipe(strip.Color(0, 0, 255), 50); // Blue
lcd.setCursor(0, 0);//Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile.
lcd.print("Die LED leuchtet");
lcd.setCursor(0, 1);// In diesem Fall bedeutet (0,1) das erste Zeichen in der zweiten Zeile.
lcd.print("blau ");
break;
case 4: tone(8, 100); // Im Hauptteil wird nun mit dem Befehl "tone ( x , y )" ein Ton abgegeben.
delay(1000); // mit einer Dauer von 1 Sekunde
noTone(8); // Der Ton wird abgeschaltet
colorWipe(strip.Color(127, 127, 127), 50); // White
lcd.setCursor(0, 0);//Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile.
lcd.print("Die LED leuchtet");
lcd.setCursor(0, 1);// In diesem Fall bedeutet (0,1) das erste Zeichen in der zweiten Zeile.
lcd.print("weiss");
break;
}
}
// Fill the dots one after the other with a color
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);
}
}