diff --git a/Sketch/Sketch.ino b/Sketch/Sketch.ino index 5153b8d..d57986c 100644 --- a/Sketch/Sketch.ino +++ b/Sketch/Sketch.ino @@ -2,7 +2,7 @@ * LDR-schakelaar berging * Author: Michel Bats * Website: www.batssoft.nl - * Revision: 20141116 + * Revision: 20141117 * * Used libraries: * Adafruit_GFX @@ -28,10 +28,11 @@ #define kakuAddr 10911174 #define kakuUnit 14 // 14 is 4-3 op de afstandsbediening // Bepalingen Display +#define OLED_ADDR 60 // 60 = 0x3C / 61 = 0x3D #define OLED_RESET 4 // Initialisatie NewRemoteTransmitter -NewRemoteTransmitter transmitter(kakuAddr, 11, 260, 1); +NewRemoteTransmitter transmitter(kakuAddr, 11, 260, 4); // Initialisatie Adafruit_SSD1306 Adafruit_SSD1306 display(OLED_RESET); @@ -47,10 +48,13 @@ int switchValueLowDispPos; int sensorLdrValueDispPos; int dimLevel; int dimLevelPercent; -int currentState; -int currentDimLevel = -1; +int currentState = -1; +int currentDimLevel = -1; int currentSensorLdrValue; +int oledConnected; +byte iicError; +// 32x32 icoon voor licht aan. #define BULB32_ON_HEIGHT 32 #define BULB32_ON_WIDTH 32 static const unsigned char PROGMEM bulb32_on_bmp[] = @@ -88,6 +92,7 @@ static const unsigned char PROGMEM bulb32_on_bmp[] = B00000000, B00001111, B11110000, B00000000, // 31 B00000000, B00000111, B11100000, B00000000 // 32 }; +// 32x32 icoon voor licht uit. #define BULB32_OFF_HEIGHT 32 #define BULB32_OFF_WIDTH 32 static const unsigned char PROGMEM bulb32_off_bmp[] = @@ -128,30 +133,37 @@ static const unsigned char PROGMEM bulb32_off_bmp[] = void setup() { // Start Display - display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) + display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR,HEX); // initialize with the I2C addr 0x3D (for the 128x64) display.clearDisplay(); + // Start debug-led pinMode(ledPin, OUTPUT); + // initieel ophalen van LDR-waarde currentSensorLdrValue = analogRead(sensorldr); } -void loop() { - sensorLdrValue = analogRead(sensorldr); - potSwitchValue = analogRead(potSwitch); - potThresholdValue = analogRead(potThreshold); - potDimValue = analogRead(potDim); - +void loop() { + // Ophalen analoge waarden + 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; - } else if (sensorLdrValue < currentSensorLdrValue){ + } + else if (sensorLdrValue < currentSensorLdrValue){ currentSensorLdrValue--; sensorLdrValue = currentSensorLdrValue; } - + + // Huidige LDR-waarde opslaan voor de volgende ronde. currentSensorLdrValue = sensorLdrValue; + // Berekenen van de hysteresis en de waarde niet onder/boven de LDR-waarde uit laten komen. switchValueHigh = potSwitchValue+(potThresholdValue/2); if (switchValueHigh > 1023) { switchValueHigh = 1023; @@ -161,9 +173,12 @@ void loop() { switchValueLow = 0; } + // Dim-niveau volgens potmeter omzetten in waarden voor de KAKU-dimmer dimLevel = map(potDimValue, 0, 1023, 0, 15); + // Dim-niveau volgens potmeter omzetten in procenten voor weergave op het scherm dimLevelPercent = map(potDimValue, 0, 1023, 0, 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); @@ -171,6 +186,7 @@ void loop() { currentDimLevel = dimLevel; currentState = 1; } + // Uitschakelen KAKU-dimmer als deze (volgens het programma) aan zou zijn mits aan de voorwaarden wordt voldaan. else if(sensorLdrValue >= switchValueHigh && currentState == 1) { digitalWrite(ledPin, LOW); transmitter.sendUnit(10, false); @@ -178,10 +194,13 @@ void loop() { currentState = 0; } + // Gegevens voor het display. + // Potmeter-waarden omzetten naar scherm-posities. switchValueLowDispPos = map(switchValueLow, 0, 1023, 0, 127); switchValueHighDispPos = map(switchValueHigh, 0, 1023, 0, 127); sensorLdrValueDispPos = map(sensorLdrValue, 0, 1023, 0, 127); + // Tekst weergeven op het scherm display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); @@ -194,18 +213,22 @@ void loop() { display.print(dimLevelPercent); display.println("%)"); + // Lamp-icoon + // Icoon voor licht aan weergeven als het licht (volgens het programma) aan is. if (currentState == 1 ){ display.drawBitmap(97, 0, bulb32_on_bmp, 32, 32, 1); } + // Icoon voor licht uit weergeven als het licht (volgens het programma) uit is. else { display.drawBitmap(97, 0, bulb32_off_bmp, 32, 32, 1); } - display.drawLine(0, 49, 127, 49, WHITE); - display.drawLine(0, 56, 127, 56, WHITE); + // Lijnen tekenen voor visuele weergaven (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); - display.fillRect(switchValueLowDispPos, 54, switchValueHighDispPos-switchValueLowDispPos+1, 5, WHITE); - display.drawLine(sensorLdrValueDispPos, 49, sensorLdrValueDispPos, 63, WHITE); + display.fillRect(switchValueLowDispPos, 48, switchValueHighDispPos-switchValueLowDispPos+1, 9, WHITE); + display.drawLine(sensorLdrValueDispPos, 40, sensorLdrValueDispPos, 63, WHITE); display.display(); display.clearDisplay(); @@ -214,4 +237,6 @@ void loop() { } + + diff --git a/Tekeningen/Display.xlsx b/Tekeningen/Display.xlsx index f5d0cd6..148012e 100644 Binary files a/Tekeningen/Display.xlsx and b/Tekeningen/Display.xlsx differ