Dimmer software
7 berichten
• Pagina 1 van 1
Dimmer software
Ik ben op zoek naar een stukje code met volgende functie :
Met 1 drukknop wil ik graag lampen dimmen als volgt.
1. bij lamp uit -> 1 maal kort drukken schakelt de lamp in op het laatste niveau. Lang drukken laat de lamp dimmen naar maximum en daarna na minimum. Bij loslaten stopt de lamp op dit niveau.
2. Bij lamp aan -> 1 maal kort drukken schakelt de lamp uit, lang drukken laat de lamp dimmen naar minimum en daarna na maximum.
Er is dus een variabele nodig die tussen 0 (lamp uit) en 255 (lamp max.) wordt geregeld.
Heb al een hele tijd zitten proberen met verschillende code, maar ik geraak er niet uit.
mvg,
Rik
Met 1 drukknop wil ik graag lampen dimmen als volgt.
1. bij lamp uit -> 1 maal kort drukken schakelt de lamp in op het laatste niveau. Lang drukken laat de lamp dimmen naar maximum en daarna na minimum. Bij loslaten stopt de lamp op dit niveau.
2. Bij lamp aan -> 1 maal kort drukken schakelt de lamp uit, lang drukken laat de lamp dimmen naar minimum en daarna na maximum.
Er is dus een variabele nodig die tussen 0 (lamp uit) en 255 (lamp max.) wordt geregeld.
Heb al een hele tijd zitten proberen met verschillende code, maar ik geraak er niet uit.
mvg,
Rik
Advertisement
- nicoverduin
-
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Dimmer software
a) laat je code maar zien
b) wat voor lamp en hoe ga je die aansturen?
b) wat voor lamp en hoe ga je die aansturen?
Re: Dimmer software
Bijgevoegd mijn code.
Voorlopig werkt dus up/down wanneer ik blijf drukken en bij kort drukken kan ik de waarde naar 0 brengen.
De regel " // if ((digitalRead(buttonPin) == LOW)& value ==0) {value = EEPROM.read(1); dir = 1; i=300;}" heb ik als comment geplaatst omdat daar ergens mijn probleem zit vermoed ik.
Arduino is nog redelijk nieuw voor mij, dus misschien heb ik hier en daar wel wat programmeerregels overtreden.
Wat de aansturing betreft stuur ik een dimmer via 0-10 Volt aan. Ik zal dus de PWM op pin9 omzetten naar 0-10 volt. (afvlakken met een RC netwerkje en daarna 2X versterken met een opamp)
Voorlopig werkt dus up/down wanneer ik blijf drukken en bij kort drukken kan ik de waarde naar 0 brengen.
De regel " // if ((digitalRead(buttonPin) == LOW)& value ==0) {value = EEPROM.read(1); dir = 1; i=300;}" heb ik als comment geplaatst omdat daar ergens mijn probleem zit vermoed ik.
Arduino is nog redelijk nieuw voor mij, dus misschien heb ik hier en daar wel wat programmeerregels overtreden.
Wat de aansturing betreft stuur ik een dimmer via 0-10 Volt aan. Ik zal dus de PWM op pin9 omzetten naar 0-10 volt. (afvlakken met een RC netwerkje en daarna 2X versterken met een opamp)
- Code: Alles selecteren
#include <EEPROM.h>
/*
Turns on and off and Dim a light emitting diode(LED) connected to digital
pin 9, when pressing a pushbutton attached to pin 2.
The circuit:
* LED attached from pin 13 to ground
* pushbutton attached to pin 2 from +5V
* 10K resistor attached to pin 2 from ground
*/
// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 9; // the number of the LED pin
#define PULLUP true
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
boolean dir = 0; // The current dir state (UP/DOWN)
int value = 0; // The current value
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (digitalRead(buttonPin) == HIGH) { // read the state of the pushbutton value:
dir =! dir; // Invert direction
for (int i=0; i <= 300; i++){ // wait 300ms before count
delay(1);
if ((digitalRead(buttonPin) == LOW)& value !=0) {value = 0; dir = 0; i=300;}
// if ((digitalRead(buttonPin) == LOW)& value ==0) {value = EEPROM.read(1); dir = 1; i=300;}
}
Serial.println (value);
analogWrite(ledPin, value);
while (digitalRead(buttonPin) == HIGH){ // If the button is still High then count
if (dir == 1 & value <255){value++;} // count up until 255
if (dir == 0 & value >0) {value--;} // count down
Serial.println (value);
analogWrite(ledPin, value);
delay(1);
EEPROM.write(1,value); // write last value in EEPROM
}
}
}
Re: Dimmer software
zet er een optocoupler tussen met aan een kant jouw 10 volt en andere kant gewoon de uitgangspin. veilig en simpel.
je hebt dus vier states
knop kort: swap uitgang naar mem0(0) of naar mem1 (laatste waarde)
knop lang: telop mem1 als mem1>254 dan telop=-1 en andersom
je hebt dus vier states
knop kort: swap uitgang naar mem0(0) of naar mem1 (laatste waarde)
knop lang: telop mem1 als mem1>254 dan telop=-1 en andersom
paul deelen
shooter@home.nl
shooter@home.nl
Re: Dimmer software
@shooter, Dit zijn inderdaad de 4 states die ik nodig heb. Enkel mem1 (laatste waarde) werkt niet in mijn voorbeeld.
Wat de hardware betreft is dit inderdaad ook een goed idee. Zal iets simpeler zijn, zal dit zeker eens bekijken.
Wat de hardware betreft is dit inderdaad ook een goed idee. Zal iets simpeler zijn, zal dit zeker eens bekijken.
Re: Dimmer software
Ondertussen een oplossing gevonden voor mijn probleem.
Wil ik toch even met jullie delen.
Rik
![Very Happy :D](./images/smilies/icon_e_biggrin.gif)
Wil ik toch even met jullie delen.
- Code: Alles selecteren
[code]
#include <EEPROM.h>
/*
Turns on and off and Dim a light emitting diode(LED) connected to digital
pin 9, when pressing a pushbutton attached to pin 2.
The circuit:
* LED attached from pin 13 to ground
* pushbutton attached to pin 2 from +5V
* 10K resistor attached to pin 2 from ground
*/
// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 9; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
boolean dir = 0; // The current dir state (UP/DOWN)
int value = 0; // The current value
void setup() {
pinMode(ledPin, OUTPUT); // initialize the LED pin as an output:
pinMode(buttonPin, INPUT); // initialize the pushbutton pin as an input:
}
void loop() {
// check if the pushbutton is pressed. if it is, the buttonState is HIGH:
if (digitalRead(buttonPin) == HIGH) { // read the state of the pushbutton value:
dir =! dir; // Invert direction
for (int i=0; i <= 300; i++){ // wait 300ms before count -> loop short press
delay(1);
if ((digitalRead(buttonPin) == LOW)& value !=0) {value = 0; dir = 0; break; }
if ((digitalRead(buttonPin) == LOW)& value ==0) {value = EEPROM.read(1); dir = 1; break;}
}
analogWrite(ledPin, value); // Write value to led
while (digitalRead(buttonPin) == HIGH){ // If the button is still High then count -> long press
if (dir == 1 & value <255){value++;} // count up until 255
if (dir == 0 & value >20) {value--;} // count down to min value (20)
analogWrite(ledPin, value); // Write value to led
delay(1);
EEPROM.write(1,value); // write last value in EEPROM
}
}
}
[/code]
Rik
7 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 4 gasten