This commit is contained in:
2014-02-12 16:18:48 +01:00
parent de33982d6e
commit a9ddefa508
3 changed files with 55 additions and 23 deletions
Binary file not shown.
+55 -23
View File
@@ -2,7 +2,7 @@
* LDR-schakelaar berging
* Author: Michel Bats
* Website: www.batssoft.nl
* Revision: 20141118
* Revision: 20141202
*
* Used libraries:
* Adafruit_GFX
@@ -20,7 +20,7 @@
// Bepalingen
#define ledPin 13 // Debug LED (13 is standaard on-board)
#define sensorldr A0 // Input van LDR
#define sensorLdr A0 // Input van LDR
#define potSwitch A1 // Input van potmeter voor schakelpunt
#define potThreshold A2 // Input van potmeter voor hysteresis
#define potDim A3 // Input van potmeter voor dim-niveau
@@ -48,9 +48,9 @@ int switchValueLowDispPos;
int sensorLdrValueDispPos;
int dimLevel;
int dimLevelPercent;
int currentState = -1;
int currentState;
int currentDimLevel = -1;
int currentSensorLdrValue;
int currentsensorLdrValue;
int oledConnected;
byte iicError;
@@ -133,55 +133,84 @@ static const unsigned char PROGMEM bulb32_off_bmp[] =
void setup() {
// Start Display
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR,HEX); // initialize with the I2C addr 0x3D (for the 128x64)
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR,HEX);
display.clearDisplay();
// Opstartscherm
// Lamp laten knipperen op het opstartscherm en op de daadwerkelijke schakelaar/dimmer.
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("VERLICHTING");
display.println("");
display.println("v1.1.3 (20141202)");
display.println("v1.1.2 (20141118)");
display.println("v1.1.1 (20141117)");
display.println("v1.1.0 (20141116)");
display.println("v1.0.0 (20141116)");
transmitter.sendUnit(kakuUnit, false);
currentState = 0;
display.drawBitmap(97, 0, bulb32_off_bmp, 32, 32, 1);
display.display();
delay(1000);
transmitter.sendUnit(kakuUnit, true);
currentState = 1;
display.drawBitmap(97, 0, bulb32_on_bmp, 32, 32, 1);
display.display();
delay(1000);
display.display();
display.clearDisplay();
// Start debug-led
pinMode(ledPin, OUTPUT);
// initieel ophalen van LDR-waarde
currentSensorLdrValue = analogRead(sensorldr);
currentsensorLdrValue = analogRead(sensorLdr);
}
void loop() {
// Ophalen analoge waarden
sensorLdrValue = analogRead(sensorldr); // LDR
sensorLdrValue = analogRead(sensorLdr); // LDR
potSwitchValue = analogRead(potSwitch); // De potmeter voor het schakelpunt
potThresholdValue = analogRead(potThreshold); // De potmeter voor de hysteresis
potDimValue = analogRead(potDim); // De potmeter voor het dim-niveau
// In geval van abrupte wijziging in LDR waarde dit opvangen door niet meer als 1 waarde afwijken van vorige meting
if (sensorLdrValue > currentSensorLdrValue){
currentSensorLdrValue++;
sensorLdrValue = currentSensorLdrValue;
if (sensorLdrValue > currentsensorLdrValue){
currentsensorLdrValue++;
sensorLdrValue = currentsensorLdrValue;
}
else if (sensorLdrValue < currentSensorLdrValue){
currentSensorLdrValue--;
sensorLdrValue = currentSensorLdrValue;
else if (sensorLdrValue < currentsensorLdrValue){
currentsensorLdrValue--;
sensorLdrValue = currentsensorLdrValue;
}
// Huidige LDR-waarde opslaan voor de volgende ronde.
currentSensorLdrValue = sensorLdrValue;
currentsensorLdrValue = sensorLdrValue;
// Berekenen van de hysteresis en de waarde niet onder/boven de LDR-waarde uit laten komen.
// Berekenen van de hysteresis en de waarde niet onder/boven de min/max LDR-waarde uit laten komen.
switchValueHigh = potSwitchValue+(potThresholdValue/2);
if (switchValueHigh > 1023) {
switchValueHigh = 1023;
if (switchValueHigh > 1022) { // Door 1022 te gebruiken kán er nog geschakeld worden. Bij 1023 valt de LDR bij max altijd in de hysteresis.
switchValueHigh = 1022;
}
switchValueLow = potSwitchValue-(potThresholdValue/2);
if (switchValueLow < 0) {
switchValueLow = 0;
if (switchValueLow < 1) { // Door 1 te gebruiken kán er nog geschakeld worden. Bij 0 valt de LDR bij min altijd in de hysteresis.
switchValueLow = 1;
}
// Dim-niveau volgens potmeter omzetten in waarden voor de KAKU-dimmer
dimLevel = map(potDimValue, 0, 1023, 0, 15);
dimLevel = map(potDimValue, 0, 1023, 0, 15); // 0 t/m 1023 omzetten naar 0 t/m 15.
// Dim-niveau volgens potmeter omzetten in procenten voor weergave op het scherm
dimLevelPercent = map(potDimValue, 0, 1023, 0, 100);
dimLevelPercent = map(potDimValue, 0, 1023, 0, 100); // 0 t/m 1023 omzetten naar 0 t/m 100.
// Aanschakelen KAKU-dimmer als deze (volgens het programma) uit zou zijn mits aan de voorwaarden wordt voldaan.
if(sensorLdrValue <= switchValueLow && currentDimLevel != dimLevel){
digitalWrite(ledPin, HIGH);
//transmitter.sendUnit(10, true);
// Controleren of de huidige staat uit is. Zo ja, eerst een signaal versturen dat de unit aan moet.
// Dit is bij Dimmers niet nodig maar als er zich een schakelaar op dit kanaal bevindt dan wordt deze ook geschakeld.
if(currentState == 0) {
transmitter.sendUnit(kakuUnit, true);
}
transmitter.sendDim(kakuUnit, dimLevel);
currentDimLevel = dimLevel;
currentState = 1;
@@ -223,7 +252,7 @@ void loop() {
display.drawBitmap(97, 0, bulb32_off_bmp, 32, 32, 1);
}
// Lijnen tekenen voor visuele weergaven (op het scherm) van de gegevens
// Lijnen tekenen voor visuele weergave (op het scherm) van de gegevens
display.drawLine(0, 40, 127, 40, WHITE);
display.drawLine(0, 52, 127, 52, WHITE);
display.drawLine(0, 63, 127, 63, WHITE);
@@ -240,3 +269,6 @@ void loop() {
Binary file not shown.