In
Configuration.h
1 | /*
|
2 | * Sollen die Grenzwerte vom LDR automatisch angepasst werden? Bei einem Neustart der QlockTwo kann
|
3 | * das Display flackern, dann muss man einmal ueber den LDR 'wischen', damit er verschiedene
|
4 | * Messwerte bekommt. Ohne AUTOSCALE werden die manuellen Min-/Max-Werte genommen.
|
5 | * Default: eingeschaltet.
|
6 | */
|
7 | #define LDR_AUTOSCALE
|
8 | #define LDR_MANUAL_MIN 0
|
9 | #define LDR_MANUAL_MAX 1023
|
das müssten die Werte sein.
Allerdings ist im Code eine Auto-Kalibrierung vorgesehen
1 | LDR::LDR(byte pin) {
|
2 | _pin = pin;
|
3 | _meanpointer = 0;
|
4 | _lastValue = 0;
|
5 | _outputValue = 0;
|
6 | #ifdef LDR_AUTOSCALE
|
7 | _min = 1023;
|
8 | _max = 0;
|
9 | #else
|
10 | _min = LDR_MANUAL_MIN;
|
11 | _max = LDR_MANUAL_MAX;
|
12 | #endif
|
13 | }
|
14 |
|
15 | /**
|
16 | * Welchen Wert hat der LDR?
|
17 | */
|
18 | unsigned int LDR::value() {
|
19 | unsigned int val = analogRead(_pin);
|
20 | if(val != _lastValue) {
|
21 | _lastValue = val;
|
22 | #ifdef LDR_AUTOSCALE
|
23 | if(val < _min) {
|
24 | _min = val;
|
25 | }
|
26 | if(val > _max) {
|
27 | _max = val;
|
28 | }
|
29 | #else
|
30 | val = constrain(val, _min, _max);
|
31 | #endif
|
32 | unsigned int mapVal = map(val, _min, _max, 100, 0);
|
33 | DEBUG_PRINT(F(" _min: "));
|
34 | DEBUG_PRINT(_min);
|
35 | DEBUG_PRINT(F(" _max: "));
|
36 | DEBUG_PRINT(_max);
|
37 | DEBUG_PRINT(F(" ldr: "));
|
38 | DEBUG_PRINT(val);
|
39 | DEBUG_PRINT(F(" mapValue: "));
|
40 | DEBUG_PRINTLN(mapVal);
|
41 | DEBUG_FLUSH();
|
42 | // glaetten
|
43 | _meanvalues[_meanpointer] = mapVal;
|
44 | _meanpointer++;
|
45 | if(_meanpointer == LDR_MEAN_COUNT) {
|
46 | _meanpointer = 0;
|
47 | }
|
48 | long ret = 0;
|
49 | for(byte i=0; i<LDR_MEAN_COUNT; i++) {
|
50 | ret += _meanvalues[i];
|
51 | }
|
52 | _outputValue = (unsigned int)(ret/LDR_MEAN_COUNT);
|
53 | }
|
54 | return _outputValue;
|
55 | }
|
die auch defaultmässig eingeschaltet ist
so wie ich das sehe, ist das so gedacht, dass die Uhr nach und nach die
maximale Helligkeit und die minimale Helligkeit feststellt und den
Wertebereich entsprechend auf 0 bis 100% ummappt.
Das wäre hier
1 | unsigned int mapVal = map(val, _min, _max, 100, 0);
|
der Wert wird dann direkt an den LED Treiber weitergegeben.
d.h. du könntest mal versuchen, die 100% hier etwas zu verkleinern (oder
je nachdem was dann in der eigentlichen Ansteuerung passiert, die 0%
etwas anheben)