This commit is contained in:
Michel committed 2014-02-12 16:18:48 +01:00
1 parent de33982d6e
commit a9ddefa508
3 files changed
+55 -23

No files matched your search

Binary file not shown.
+55 -23
View File
@@ -2,7 +2,7 @@
* LDR-schakelaar berging * LDR-schakelaar berging
* Author: Michel Bats * Author: Michel Bats
* Website: www.batssoft.nl * Website: www.batssoft.nl
* Revision: 20141118 * Revision: 20141202
* *
* Used libraries: * Used libraries:
* Adafruit_GFX * Adafruit_GFX
@@ -20,7 +20,7 @@
// Bepalingen // Bepalingen
#define ledPin 13 // Debug LED (13 is standaard on-board) #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 potSwitch A1 // Input van potmeter voor schakelpunt
#define potThreshold A2 // Input van potmeter voor hysteresis #define potThreshold A2 // Input van potmeter voor hysteresis
#define potDim A3 // Input van potmeter voor dim-niveau #define potDim A3 // Input van potmeter voor dim-niveau
@@ -48,9 +48,9 @@ int switchValueLowDispPos;
int sensorLdrValueDispPos; int sensorLdrValueDispPos;
int dimLevel; int dimLevel;
int dimLevelPercent; int dimLevelPercent;
int currentState = -1; int currentState;
int currentDimLevel = -1; int currentDimLevel = -1;
int currentSensorLdrValue; int currentsensorLdrValue;
int oledConnected; int oledConnected;
byte iicError; byte iicError;
@@ -133,55 +133,84 @@ static const unsigned char PROGMEM bulb32_off_bmp[] =
void setup() { void setup() {
// Start Display // 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(); display.clearDisplay();
// Start debug-led // Start debug-led
pinMode(ledPin, OUTPUT); pinMode(ledPin, OUTPUT);
// initieel ophalen van LDR-waarde // initieel ophalen van LDR-waarde
currentSensorLdrValue = analogRead(sensorldr); currentsensorLdrValue = analogRead(sensorLdr);
} }
void loop() { void loop() {
// Ophalen analoge waarden // Ophalen analoge waarden
sensorLdrValue = analogRead(sensorldr); // LDR sensorLdrValue = analogRead(sensorLdr); // LDR
potSwitchValue = analogRead(potSwitch); // De potmeter voor het schakelpunt potSwitchValue = analogRead(potSwitch); // De potmeter voor het schakelpunt
potThresholdValue = analogRead(potThreshold); // De potmeter voor de hysteresis potThresholdValue = analogRead(potThreshold); // De potmeter voor de hysteresis
potDimValue = analogRead(potDim); // De potmeter voor het dim-niveau 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 // In geval van abrupte wijziging in LDR waarde dit opvangen door niet meer als 1 waarde afwijken van vorige meting
if (sensorLdrValue > currentSensorLdrValue){ if (sensorLdrValue > currentsensorLdrValue){
currentSensorLdrValue++; currentsensorLdrValue++;
sensorLdrValue = currentSensorLdrValue; sensorLdrValue = currentsensorLdrValue;
} }
else if (sensorLdrValue < currentSensorLdrValue){ else if (sensorLdrValue < currentsensorLdrValue){
currentSensorLdrValue--; currentsensorLdrValue--;
sensorLdrValue = currentSensorLdrValue; sensorLdrValue = currentsensorLdrValue;
} }
// Huidige LDR-waarde opslaan voor de volgende ronde. // 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); switchValueHigh = potSwitchValue+(potThresholdValue/2);
if (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 = 1023; switchValueHigh = 1022;
} }
switchValueLow = potSwitchValue-(potThresholdValue/2); switchValueLow = potSwitchValue-(potThresholdValue/2);
if (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 = 0; switchValueLow = 1;
} }
// Dim-niveau volgens potmeter omzetten in waarden voor de KAKU-dimmer // 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 // 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. // Aanschakelen KAKU-dimmer als deze (volgens het programma) uit zou zijn mits aan de voorwaarden wordt voldaan.
if(sensorLdrValue <= switchValueLow && currentDimLevel != dimLevel){ if(sensorLdrValue <= switchValueLow && currentDimLevel != dimLevel){
digitalWrite(ledPin, HIGH); 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); transmitter.sendDim(kakuUnit, dimLevel);
currentDimLevel = dimLevel; currentDimLevel = dimLevel;
currentState = 1; currentState = 1;
@@ -223,7 +252,7 @@ void loop() {
display.drawBitmap(97, 0, bulb32_off_bmp, 32, 32, 1); 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, 40, 127, 40, WHITE);
display.drawLine(0, 52, 127, 52, WHITE); display.drawLine(0, 52, 127, 52, WHITE);
display.drawLine(0, 63, 127, 63, WHITE); display.drawLine(0, 63, 127, 63, WHITE);
@@ -239,4 +268,7 @@ void loop() {
Binary file not shown.