Dimmer software

algemene C code
Berichten: 6
Geregistreerd: 29 Okt 2014, 11:26

Dimmer software

Berichtdoor homemedia » 18 Nov 2014, 13:18

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

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Dimmer software

Berichtdoor nicoverduin » 18 Nov 2014, 13:30

a) laat je code maar zien
b) wat voor lamp en hoe ga je die aansturen?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 29 Okt 2014, 11:26

Re: Dimmer software

Berichtdoor homemedia » 18 Nov 2014, 17:06

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)




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
    }
     
  } 
}

Berichten: 4079
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Dimmer software

Berichtdoor shooter » 20 Nov 2014, 12:46

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
paul deelen
shooter@home.nl

Berichten: 6
Geregistreerd: 29 Okt 2014, 11:26

Re: Dimmer software

Berichtdoor homemedia » 21 Nov 2014, 12:46

@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.

Berichten: 4079
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Dimmer software

Berichtdoor shooter » 22 Nov 2014, 00:13

vergeet die eprom even doe het eerst simpel
paul deelen
shooter@home.nl

Berichten: 6
Geregistreerd: 29 Okt 2014, 11:26

Re: Dimmer software

Berichtdoor homemedia » 28 Nov 2014, 15:17

Ondertussen een oplossing gevonden voor mijn probleem. :D
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

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 4 gasten