brightness adaption

This commit is contained in:
coelner 2021-11-26 12:10:53 +01:00
parent 986da87bb7
commit 4ae62c3cda
3 changed files with 58 additions and 28 deletions

View File

@ -25,21 +25,7 @@
#define MOD(a,b) ((((a)%(b))+(b))%(b))
/* Model I
LDR (GL5516 ) is connected to GPIO 34 (Analog ADC1_CH6, 12bit resolution default
Light Resistance (at 10 Lux): 5-10 Kohm
Dark Resistance: 0.5 Mohm
over a 56k voltage divider . Dark (0.5MOhm) , 10Lux (5-10kOhm)
-----------------
ESP8266 24LED
5V--10k-+-LDR--GND -ADC
- 150k--220k-+-100k--GND
-----------------
ESP8266 60LED
5V--??k-+-LDR--??k-GND
- 39k--220k-+-100k--GND
-ADC
*/
#ifdef ESP8266
#define LDR_PIN A0
#define IOTWEBCONF_DEBUG_DISABLED
@ -71,11 +57,12 @@ void bootAnimCallback();
void clockTickCallback();
void ledRefreshCallback();
void brightnessAdjustmentCallback();
void brightnessFadingCallback();
void iotWebConfLoopCallback();
#ifdef RGBW
#define MINIMAL_BRIGHTNESS 5
#define LDR_SCALE 16
#define LDR_SCALE 4
#define colorSaturation 255
#ifdef ESP8266
//NeoPixelBrightnessBus<NeoGrbwFeature, Neo800KbpsMethod> strip(NUM_LEDS);//RDX0 GPIO3
@ -193,11 +180,12 @@ volatile int currentMin = 1;
volatile int currentHour = 2;
volatile bool NTPreachable = false;
volatile int MAX_BRIGHTNESS = 200;
#ifdef LDR_PIN
// variable for storing the potentiometer value
volatile unsigned int ldrValue = 0;
volatile unsigned int targetBrightness = MAX_BRIGHTNESS;
#endif
volatile int MAX_BRIGHTNESS = 200;
// WebPortal
const char thingName[] = "NTP-Clock-RGBLED";
@ -329,7 +317,8 @@ Task bootAnim(200, TASK_FOREVER, &bootAnimCallback);
Task clockTick(1000, TASK_FOREVER, &clockTickCallback);
Task ledRefresh(200, TASK_FOREVER, &ledRefreshCallback);
#ifdef LDR_PIN
Task brightness(10000, TASK_FOREVER, &brightnessAdjustmentCallback);
Task brightnessAdjustment(10000, TASK_FOREVER, &brightnessAdjustmentCallback);
Task brightnessFading(333, TASK_FOREVER, &brightnessFadingCallback);
#endif
Task iotwebconfLoop(1000, TASK_FOREVER, &iotWebConfLoopCallback);
Scheduler runner;
@ -535,12 +524,12 @@ void syncNTP() {
bootAnim.disable();
iotWebConfConfigSaved();
ledRefresh.enable();
//clockTick.enable();
#ifdef LDR_PIN
brightness.enable();
brightnessFading.enable();
#endif
}
clockTick.enable(); //enable to check for ntp every 60 seconds
brightnessAdjustment.enable();
}
}
@ -552,6 +541,8 @@ void setup() {
Serial.begin(SERIAL_BAUD);
Serial.flush();
delay(100);
Serial.println();
Serial.print("\n\n\nCPU Frequency is: ");
#ifdef ESP8266
Serial.print(ESP.getCpuFreqMHz());
@ -559,8 +550,12 @@ void setup() {
Serial.print("Chip ID: ");
Serial.println(ESP.getFlashChipId());
#elif defined(ESP32)
setCpuFrequencyMhz(160);
Serial.print(getCpuFrequencyMhz()); //Get CPU clock
Serial.println(" Mhz");
uint32_t Freq = getXtalFrequencyMhz();
Serial.print("XTAL Freq = ");
Serial.print(Freq);
uint32_t chipId = 0;
for (int i = 0; i < 17; i = i + 8) {
chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
@ -588,7 +583,8 @@ void setup() {
runner.addTask(ledRefresh);
runner.addTask(clockTick);
#ifdef LDR_PIN
runner.addTask(brightness);
runner.addTask(brightnessAdjustment);
runner.addTask(brightnessFading);
#endif
runner.addTask(bootAnim);
runner.addTask(iotwebconfLoop);
@ -609,8 +605,9 @@ void loop()
{
runner.execute();
yield();
//iotWebConfLoopCallback();//ToDo put in a task, measure the runtime
#ifdef ESP8266
ESP.wdtFeed();
#endif
/*
while (Serial.available())
Serial.read();
@ -748,21 +745,26 @@ void bootAnimCallback() {
}
#ifdef LDR_PIN
void brightnessAdjustmentCallback() { //ToDo split measurement from setting
void brightnessAdjustmentCallback() {
//Serial.println(ldrValue);
//brigthness begin
ldrValue = ldrValue / 10;
int x;
if (ldrValue == 0) {
strip.SetBrightness( MAX_BRIGHTNESS );
targetBrightness = MAX_BRIGHTNESS;
}
else {
x = int(MINIMAL_BRIGHTNESS + (MAX_BRIGHTNESS - MINIMAL_BRIGHTNESS) / ((ldrValue / LDR_SCALE) + 1) );
strip.SetBrightness(x);
targetBrightness = int(MINIMAL_BRIGHTNESS + (MAX_BRIGHTNESS - MINIMAL_BRIGHTNESS) / ((ldrValue / LDR_SCALE) + 1) );
}
//Serial.println("Brightness: " + String(strip.GetBrightness()) + "(" + String(ldrValue) + ")");
ldrValue = 0;
}
void brightnessFadingCallback() {
int currentBrightness = strip.GetBrightness();
int diff = targetBrightness - currentBrightness;
int rate = rint(diff / 10);
strip.SetBrightness(currentBrightness + rate);
strip.Show();
//Serial.println("Brightness: " + String(currentBrightness) + " diff " + String(rate));
}
#endif

View File

@ -65,5 +65,7 @@ Unten auf der Statusseite gibt es einen Link zur Konfigurationsseite, eine Mögl
## ausstehende Verbesserungen
- [ ] flüssige Helligkeitsadaptierung
- [ ] härtes non-blocking Verhalten
- offensichtliche delay/yield aufgelöst
- [ ] finde WDT reset beim WiFi connect
- Wechsel des lwip bringt eine Verbesserung
- [ ] schnelleres Berechnen des followingHour Offset

26
productionlist.md Normal file
View File

@ -0,0 +1,26 @@
## production list
Model I
LDR (GL5516 ) is connected to GPIO 34 (Analog ADC1_CH6, 12bit resolution default
Light Resistance (at 10 Lux): 5-10 Kohm
Dark Resistance: 0.5 Mohm
over a 56k voltage divider . Dark (0.5MOhm) , 10Lux (5-10kOhm)
-----------------
ESP8266 24LED
5V--10k-+-LDR--GND -ADC
- 150k--220k-+-100k--GND
-----------------
ESP8266 60LED
5V--??k-+-LDR--??k-GND
- 39k--220k-+-100k--GND
-ADC
--------------------
ESP32 60 LED
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 08:3a:f2:50:f0:58
MH Live ESP32 Mini Kit aka Mini D1 ESP32
Data IO17
LDR IO34
RGBW