ldr en dimmer

algemene C code
Berichten: 20
Geregistreerd: 29 Dec 2020, 12:35

ldr en dimmer

Berichtdoor wappie » 10 Mrt 2022, 15:54

hoi hier bij een vraag wellicht simpel maar ik zie het even niet.
als de ldr het relais schakelt omdat het donker is wil ik dat de dimmer (zerro crosing ) de lamp schakelt .
afzonderlijk werken de codes prima , maar nu wil ik ze samen voegen maar het lukt niet om de dimmer aan het werk te krijgen
wat doe ik fout ?



Code: Alles selecteren
int AC_LOAD = 12;    // Output to Opto Triac pin
int dimming = 128;  // Dimming level (0-128)  0 = ON, 128 = OFF
const int ledPin = 39;
const int ldrPin = A0;
int value = 0;
int drempelwaarde = 50;
int hysterese = 25;

# define licht 1
# define donker 0

int situatie = licht;

void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(ldrPin, INPUT);
  Serial.begin(9600);
  pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output
  attachInterrupt(0, zero_crosss_int, RISING);  // Choose the zero cross interrupt # from the table above
}

//the interrupt function must take no parameters and return nothing
void zero_crosss_int()  //function to be fired at the zero crossing to dim the light
{
 

  int dimtime = (75*dimming);    // For 60Hz =>65   
  delayMicroseconds(dimtime);    // Wait till firing the TRIAC   
  digitalWrite(AC_LOAD, HIGH);   // Fire the TRIAC
  delayMicroseconds(10);         // triac On propogation delay
         // (for 60Hz use 8.33) Some Triacs need a longer period
  digitalWrite(AC_LOAD, LOW);    // No longer trigger the TRIAC (the next zero crossing will swith it off) TRIAC
}

 
void loop()
{
  value = analogRead(ldrPin);
  Serial.print(value);
  Serial.println();

  if (situatie == licht && value < drempelwaarde) {
    digitalWrite(ledPin, LOW);
    situatie = donker;
  }

  else if (situatie == donker && value > drempelwaarde + hysterese) {
    digitalWrite(ledPin, HIGH);
    situatie = licht;
  }

else if (situatie ==  donker && value > drempelwaarde + hysterese){ 

     dimming=95;
    {
   
   
}}}

Advertisement

Berichten: 20
Geregistreerd: 29 Dec 2020, 12:35

Re: ldr en dimmer

Berichtdoor wappie » 10 Mrt 2022, 22:18

lk heb een regel aangepast in de loop wat ik vreemd vindt is als ik nu dus de regel "else if (situatie == donker && value > drempelwaarde + hysterese){

dimming=95;

als eerst als vooraarde in loop zet werkt het
, wat wil zeggen dat het licht aangaat , maar met els if niet uit dus
wist niet dat dit zo moest om te laten werken

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

Re: ldr en dimmer

Berichtdoor shooter » 12 Mrt 2022, 12:44

als een triac niet meer aan is dan gaat deze ALTIJD pas bij de volgende zero crossing uit dus eigenlijk doe je het dan dubbel.
in je if statements zul je wel wat meer haakjes moeten gaan gebruiken want < voorwaarde + getal is goede vraag maar de volgorde is niet zo strikt in de compiler
paul deelen
shooter@home.nl

Berichten: 20
Geregistreerd: 29 Dec 2020, 12:35

Re: ldr en dimmer

Berichtdoor wappie » 13 Mrt 2022, 22:54

hoi Paul thanks voor de opmerking , ben aan de slag gegaan en het geheel werkt, een paar opmerkingen maak de Hysterese niet groter dan 10 ant anders gaan de relais klapperen ook heb ik in deze code het is if stament aangepast wnant klopte niet het licht ging aan waneer het uit moest dus hoe kleiner de gemeten aarde hoe sneler het licht aan ging . bij de zerro crossing heb ik de voorwaarden aangepast en werken , moet alleen nog de delay er uit halen maar dat lukt.
de fout die gemaakt is mt de bepalende volgorde zat hem in de dubbele benaming

nog even zerro crossing de perfecte dimmer voor led geen knipperen meer. zie code



#include <Debounce.h>


int AC_LOAD = 12; // Output to Opto Triac pin
int dimming = 128; // Dimming level (0-128) 0 = ON, 128 = OFF
// const int ledPin = 31;
const int ldrPin = A0;
int value = 0;
int drempelwaarde = 15;
int hysterese = 10;

# define licht 1
# define donker 0

int situatie = licht;




byte button1 = 22;// schakelaar garage achterdeur
byte button2 = 24;// schakelaar garage deur
byte button3 = 26;// schakelaar koude keuken
byte button4 = 28;// schakelaar koude keuken nieuwe muur
byte button5 = 30;// schakelaar werkbank
byte button6 = 32;// compersor
byte button7 = 34;// afzuiger
byte button8 = 36;// deur contact achterdeur
byte output1 = 31;// verlichting garage
byte output2 = 33;// verlichting boven werkbank
byte output3 = 35;// verlichting koude keuken
byte output4 = 37;// tempertuur uit gang
byte output5 = 39;//
byte output6 = 41;//
byte output7 = 43;//
byte output8 = 45;// verlihting buiten gestuurd door een ldr
Debounce Button1(button1); // Button1
Debounce Button2(button2); // Button2
Debounce Button3(button3); // Button3
Debounce Button4(button4); // Button4
Debounce Button5(button5); // Button5
Debounce Button6(button6); // Button6
Debounce Button7(button7); // Button7
Debounce Button8(button8); // Button8

void setup() {





//pinMode(ledPin, OUTPUT);
// pinMode(ldrPin, INPUT);
Serial.begin(9600);
pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output
attachInterrupt(0, zero_crosss_int, RISING); // Choose the zero cross interrupt # from the table above




pinMode(button1, INPUT_PULLUP); // Watch for the PULLUP
pinMode(button2, INPUT_PULLUP); // Watch for the PULLUP
pinMode(button3, INPUT_PULLUP); // Watch for the PULLUP
pinMode(button4, INPUT_PULLUP); // Watch for the PULLUP
pinMode(button5, INPUT_PULLUP); // Watch for the PULLUP
pinMode(button6, INPUT_PULLUP); // Watch for the PULLUP
pinMode(button7, INPUT_PULLUP); // Watch for the PULLUP
pinMode(button8, INPUT_PULLUP); // Watch for the PULLUP
pinMode(output1, OUTPUT);
pinMode(output2, OUTPUT);
pinMode(output3, OUTPUT);
pinMode(output4, OUTPUT);
pinMode(output5, OUTPUT);
pinMode(output6, OUTPUT);
pinMode(output7, OUTPUT);
pinMode(output8, OUTPUT);
}

//the interrupt function must take no parameters and return nothing
void zero_crosss_int() //function to be fired at the zero crossing to dim the light
{


int dimtime = (75*dimming); // For 60Hz =>65
delayMicroseconds(dimtime); // Wait till firing the TRIAC
digitalWrite(AC_LOAD, HIGH); // Fire the TRIAC
delayMicroseconds(10); // triac On propogation delay
// (for 60Hz use 8.33) Some Triacs need a longer period
digitalWrite(AC_LOAD, LOW); // No longer trigger the TRIAC (the next zero crossing will swith it off) TRIAC
}


void loop() {

digitalWrite(output1, Button1.count() % 2);// On/Off each press.
digitalWrite(output2, Button2.count() % 2);// On/Off each press.
digitalWrite(output3, Button3.count() % 2);// On/Off each press.
digitalWrite(output4, Button4.count() % 2);// On/Off each press.
digitalWrite(output5, Button5.count() % 2);// On/Off each press.
digitalWrite(output6, Button6.count() % 2);// On/Off each press.
digitalWrite(output7, Button7.count() % 2);// On/Off each press.
// digitalWrite(output8, Button8.count() % 2);// On/Off each press.



value = analogRead(ldrPin);
Serial.print(value);
Serial.println();

if (situatie == licht && value > drempelwaarde + hysterese){
dimming=128;
}

else if (situatie == donker ) {
dimming=95;
}
if (situatie == licht && value < drempelwaarde) {
digitalWrite(output8, LOW);
situatie = donker;
}

else if (situatie == donker && value > drempelwaarde + hysterese) {
digitalWrite(output8, HIGH);
situatie = licht;



{







}}}

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 17 gasten