1

3 Commits
v1.4 ... v1.5

Author SHA1 Message Date
eleksir
c29c1ee876 Added info about tags in default branch. 2019-06-02 15:30:06 +03:00
eleksir
68b8702396 Bring changes from tag v1.4 2019-06-02 15:27:04 +03:00
eleksir
9c800ee335 Added info about photoresistor branch to README.md 2019-05-21 16:13:41 +03:00
4 changed files with 12 additions and 56 deletions

View File

@@ -1,4 +1,3 @@
ee4999ebdd2d1b54512facafdd03c8a530ea4bfa v1.0 ee4999ebdd2d1b54512facafdd03c8a530ea4bfa v1.0
1167bd4b622768ed17e116a4cbac3db90031e6f8 v1.1 1167bd4b622768ed17e116a4cbac3db90031e6f8 v1.1
109112211e454e608911949914eaa2722fbfed7d v1.2 109112211e454e608911949914eaa2722fbfed7d v1.2
20da600eb0ccd51e73722f3bdfa5833df4dab826 v1.3

View File

@@ -12,8 +12,6 @@
* usb phone charger as power supply * usb phone charger as power supply
* 2 push buttons * 2 push buttons
* 1 on/off switch * 1 on/off switch
* 1 photoresistor
* 1 resistor to make secund shoulder of photosensitive "bridge", 10 kOhms, 0.25 watts
* Gainta G521G enclosure (92x66.5x28мм) * Gainta G521G enclosure (92x66.5x28мм)
* 5m power cord * 5m power cord
@@ -26,3 +24,12 @@
### Additional Notes: ### Additional Notes:
My RTC module is not very accurate due to bad quartz chrystal calibration, looks like it is not exactly 32768 Hz and clock runs faster than it should be, giving about 5-8 seconds runaway per day. So i have to implement time correction in software (temperature changes during day/month/year is not very big - about 10 degrees Celsius, so we can use software compensation without thermal compensation). My RTC module is not very accurate due to bad quartz chrystal calibration, looks like it is not exactly 32768 Hz and clock runs faster than it should be, giving about 5-8 seconds runaway per day. So i have to implement time correction in software (temperature changes during day/month/year is not very big - about 10 degrees Celsius, so we can use software compensation without thermal compensation).
This project split into 2 branches:
* **default** that contains generic clock without any additional elements
* **photoresistor** that contains additional hardware - photocell bridge - and software algorithm that compensates ambient light sensed by photocell basing on LED display charachteristics.
### Stable tags for branches:
v1.5 - default
v1.4 - photoresistor

Binary file not shown.

View File

@@ -34,11 +34,6 @@ bool dot = true;
/* time inaccuracy compensation flag */ /* time inaccuracy compensation flag */
bool compflag = true; bool compflag = true;
const uint8_t timeSkew = 6; // assume that clock runs faster than should
bool timeSkewEven = false; // comp. 1 additional second per 2 days
/* ambient light compensation aka night mode */
const int photoPin = A2;
void setup() void setup()
{ {
@@ -48,12 +43,7 @@ void setup()
byte digitPins[] = {9, 10, 11, 12}; byte digitPins[] = {9, 10, 11, 12};
byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 13}; byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8, 13};
bool resistorsOnSegments = true; // 8 resistors, 330 Ohms each bool resistorsOnSegments = true; // 8 resistors, 330 Ohms each
/* updateWithDelays defaults to false and it is recommended value, bool updateWithDelays = false; // Default. Recommended
* but i was unable to make my display to change brightness with
* recommended value, so i have to use updateWithDelays=true,
* in this case brightness gets changed.
*/
bool updateWithDelays = true;
/* without it there is visual bug at 0 o'clock, and in current version /* without it there is visual bug at 0 o'clock, and in current version
* of SevSeg' setChars() does not dots at all */ * of SevSeg' setChars() does not dots at all */
@@ -79,9 +69,6 @@ void setup()
// setup control buttons // setup control buttons
pinMode(hrs_btn, INPUT_PULLUP); pinMode(hrs_btn, INPUT_PULLUP);
pinMode(min_btn, INPUT_PULLUP); pinMode(min_btn, INPUT_PULLUP);
// setup ambient brigtness sensor
pinMode(photoPin, INPUT);
} }
void loop() void loop()
@@ -90,7 +77,6 @@ void loop()
currentPushTimer = currentMillis; currentPushTimer = currentMillis;
char str[4]; char str[4];
float d; float d;
unsigned int ambLight = analogRead(photoPin);
clock.getTime(); clock.getTime();
@@ -143,23 +129,13 @@ void loop()
/* /*
* Let's implement time compenstion for individual rtc module time * Let's implement time compenstion for individual rtc module time
* charachteristics. In in my case quartz resonator as inaccurate as * charachteristics. In in my case quartz resonator as inaccurate as
* +/- about 6.5 seconds per 24 hours, maybe its require more EMI * +/- about 5-8 seconds per 24 hours, maybe its require more EMI
* shielding? * shielding?
*/ */
if ((clock.hour == 21) and (clock.minute == 21) and if ((clock.hour == 21) and (clock.minute == 21) and
(clock.second == 21) and (compflag)) { (clock.second == 21) and (compflag)) {
clock.fillByHMS(clock.hour, clock.minute, 14);
if (timeSkewEven) {
timeSkewEven = false;
clock.fillByHMS(clock.hour, clock.minute,
(clock.second - timeSkew - 1));
} else {
timeSkewEven = true;
clock.fillByHMS(clock.hour, clock.minute,
(clock.second - timeSkew));
}
clock.setTime(); clock.setTime();
compflag = false; compflag = false;
} }
@@ -188,32 +164,6 @@ void loop()
} }
} }
/* ambient light compensation
* ambLight can be in range of 0..1023, if it 800, it has point to use
* fullbright
*/
if (ambLight >= 940) {
Display.setBrightness(100);
} else if ((ambLight < 900) and (ambLight >= 840)) {
Display.setBrightness(75);
} else if ((ambLight < 800) and (ambLight >= 735)) {
Display.setBrightness(40);
} else if ((ambLight < 700) and (ambLight >= 635)) {
Display.setBrightness(15);
} else if ((ambLight < 600) and (ambLight >= 530)) {
Display.setBrightness(12);
} else if ((ambLight < 500) and (ambLight >= 430)) {
Display.setBrightness(10);
} else if ((ambLight < 400) and (ambLight >= 325)) {
Display.setBrightness(8);
} else if ((ambLight < 300) and (ambLight >= 220)) {
Display.setBrightness(6);
} else if ((ambLight < 200) and (ambLight >= 110)) {
Display.setBrightness(4);
} else if (ambLight < 100) {
Display.setBrightness(3);
}
Display.refreshDisplay(); Display.refreshDisplay();
} }