Forum: Mikrocontroller und Digitale Elektronik Word Qlock LDR einstellen


von Hans P. (bonsario)


Lesenswert?

Hallo zusammen,

habe einen Spannungsregler in meine Word Uhr gemacht, jetzt leuchtet sie 
bei hellen Lichtverhältnissen genau richtig, aber wenn es dunkel ist, 
ist sie zu hell.

Da ich mich mit diesen Codes nicht so gut auskenne, hätte ich eine 
kleine Bitte für euch. Wo kann ich in dieser Datei einstellen, das bei 
Dunkelheit die Lampe dunkler leuchtet als in der Standardeinstellung?

Hier der Link zur Datei: 
http://www.christians-bastel-laden.de/DOWNLOADS/Qlockthree_v3.2.1.zip

Ich wäre euch sehr dankbar!

von Karl H. (kbuchegg)


Lesenswert?

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
1
  #define LDR_AUTOSCALE

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)

von Hans P. (bonsario)


Lesenswert?

Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.