Help beginner :) Dag/nacht schakeling met button..

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 3
Geregistreerd: 08 Sep 2015, 02:22

Help beginner :) Dag/nacht schakeling met button..

Berichtdoor korne1983 » 08 Sep 2015, 03:13

Beste mensen,

Ik ben nieuw op dit forum. Sinds kort ben ik geinteresseerd in arduino. Ik heb twee aquariums en ik heb op youtube al veel filmpjes gezien van mensen die met een arduino hun hele aquarium bedienen. Led lampen die 's ochtends gedurende een aantal uur van minimale sterkte naar maximale sterkte gaan. Een ingebouwde voederprogramma waarbij de filterpomp wordt stilgelegd waarna er gevoerd wordt. Lampen die 's avonds weer dimmen en rood opkleuren om avondlicht te simuleren. En als klap op de vuurpijl 's nachts een zwak blauw ledlampje als maan. Kortom schitterend en allemaal met zo'n kleine controller, de arduino :) Dit zou ik erg graag ergens in de toekomst willen maken en is mijn ultieme doel..

Ik heb wat spullen besteld en heb nu redelijk wat spullen in huis om mee te oefenen. Ik dacht met een simpel projectje te beginnen om het programmeren ed onder de knie te krijgen. Echter ik kom er helaas niet uit en ik heb er al uren en uren aan gezeten en ik snap niet wat ik fout doe.

Wat wil ik?
Ik heb aan mijn schuur een lamp hangen. Ik wil dat deze lamp inschakelt wanneer het donker wordt 's avonds en weer uitgaat als het 's ochtends licht wordt. Ook wil ik hem nog handmatig kunnen bedienen met een knop. Dus stel hij staat 's nachts aan en ik wil hem uitzetten met een knop.

Ik dacht dit is niet zo moeilijk en maak ik wel even.. Niet dus :( Ik heb inmiddels meerdere circuits geprobeerd en vele codes geschreven..
Kan iemand vertellen wat ik fout doe? Ik krijg het maar niet voor elkaar.

De code voor de LDR alleen krijg ik goed werkend.
De code voor de button alleen krijg ik goed werkend.

Maar dit samenvoegen lukt mij niet. Na googlen kwam ik erachter dat ik XOR code in mijn code moest inbrengen maar ik denk dat ik dat ook niet goed heb gedaan..
Op het punt waar ik nu ben werkt alleen de button :(

Ik voeg het schema en code bij als bijlage.
Als iemand er eens naar wil kijken en feedback wil geven heel graag!

Code: Alles selecteren
const int sensorPin = 0;        // Analog 0 LDR sensor
const int buttonPin = 3;        // Digital 3 BUTTON
const int uitgangSensor = 7;     // LDR on analog 0 sets D7 high or low
const int uitgangButton = 8;     // Botton on D3 sets D8 high or low
const int relaisSwitch = 13;     // Relais connected to pin 13

int sensorState;
int buttonState;
int relaisState;
int lastButtonState = LOW;
int lichtWaarde;
int uitgangButtonState;
int waardeLDR = 0;
int waardeBUTTON = 0;

const int lichtDrempel=675;      // The point where it switch from off to on reading sensor LDR

long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;    // the debounce time; increase if the output flickers


void setup() {
 
  pinMode (uitgangSensor, OUTPUT);
  pinMode (uitgangButton, OUTPUT);
  pinMode (buttonPin, INPUT);
  pinMode (relaisSwitch, OUTPUT);
 
  digitalWrite (buttonPin, buttonState);      // Wat betekend dit?*****
 
 
  Serial.begin(9600);}
 
void loop(){

  lichtWaarde = analogRead(sensorPin);
  if (lichtWaarde < lichtDrempel){digitalWrite (uitgangSensor, HIGH);}
  else {digitalWrite (uitgangSensor, LOW);}
 

{
  // read the state of the switch into a local variable:
  int reading = digitalRead(buttonPin);

  // check to see if you just pressed the button
  // (i.e. the input went from LOW to HIGH),  and you've waited
  // long enough since the last press to ignore any noise: 

  // If the switch changed, due to noise or pressing:
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }
 
  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:

    // if the button state has changed:
    if (reading != buttonState) {
      buttonState = reading;

      // only toggle the LED if the new button state is HIGH
      if (buttonState == HIGH) {
        uitgangButtonState = !uitgangButtonState;
      }
    }
  }
 
  // set the LED:
  digitalWrite (uitgangButton, uitgangButtonState);

  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState:
  lastButtonState = reading;
}

{
  // read the state of the pushbuttons value:
  waardeLDR = digitalRead(uitgangSensor);
  waardeBUTTON = digitalRead(uitgangButton);
  // check if the pushbuttons is pressed.
  // Based on the pushbutton status and truth table of XOR, turn on or off the LED at Pin 13
  if ((waardeLDR == HIGH && waardeBUTTON == LOW) || (waardeLDR == LOW && waardeBUTTON == HIGH)) {
    // turn LED on:
    digitalWrite(relaisSwitch, HIGH);
  }
  else {
    // turn LED off:
    digitalWrite(relaisSwitch, LOW);
  }
}



}
Bijlagen
IMG_20150828_171048.jpg
IMG_20150828_171048.jpg (34.59 KiB) 12980 keer bekeken
duvellamp-verkleind.jpg
duvellamp-verkleind.jpg (48.53 KiB) 12980 keer bekeken

Advertisement

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Help beginner :) Dag/nacht schakeling met button..

Berichtdoor baco1978 » 08 Sep 2015, 13:46

je probleem zit hier denk ik in
if ((waardeLDR == HIGH && waardeBUTTON == LOW) || (waardeLDR == LOW && waardeBUTTON == HIGH)) {

Ik denk dat wel werkt als je het zo neer zet
if (((waardeLDR == HIGH) && (waardeBUTTON == LOW)) || ((waardeLDR == LOW) && (waardeBUTTON == HIGH))) {
Met vriendelijke groet Arjan

Berichten: 3
Geregistreerd: 08 Sep 2015, 02:22

Re: Help beginner :) Dag/nacht schakeling met button..

Berichtdoor korne1983 » 08 Sep 2015, 21:57

Hoi Baco,

Bedankt voor het meedenken! Ik heb het geprobeerd. Helaas werkte het niet :(
Ik ben nog niet goed genoeg in het programmeren helaas :(

Ik heb een goed werkende code voor een LDR sensor en een goed werkende code voor de Button. Maar om dit samen te voegen vind ik lastig :(
Ik kan helaas ook nergens op internet de opstelling + code vinden van wat ik wil. Anders had ik kunnen zien wat ik nou fout doe...
Maar ik blijf proberen :) Als het me lukt zal ik het posten..

Groeten Korné

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Help beginner :) Dag/nacht schakeling met button..

Berichtdoor baco1978 » 09 Sep 2015, 09:28

[ code2=cpp][/ code2]
Als je bovenstaande gebruikt wordt het net even iets beter om te lezen

nu heb ik 2 dingen gevonden
//*1
hier staat een blok tussen accolade's, hier lijkt een functie aan te ontbreken

en als ik verder kijk bij //*2 dan lijkt hier het einde te zijn van je void() loop
wat er daarna nog komt, dat wordt niet meer verwerkt

Graag gedaan Korne,
ik rommel er zelf ook nog maar wat mee, maar het is leuke materie om het jezelf aan te leren, ik ben zelf ook nog volop aan het experimenteren.
het is iig een leuke bezigheid.

Hopelijk kan je wat met bovenstaande punten.
Ik hoor het wel weer als je ergens op vast loopt ;)

groetjes
Arjan




cpp code
const int sensorPin = 0;        // Analog 0 LDR sensor
const int buttonPin = 3; // Digital 3 BUTTON
const int uitgangSensor = 7; // LDR on analog 0 sets D7 high or low
const int uitgangButton = 8; // Botton on D3 sets D8 high or low
const int relaisSwitch = 13; // Relais connected to pin 13

int sensorState;
int buttonState;
int relaisState;
int lastButtonState = LOW;
int lichtWaarde;
int uitgangButtonState;
int waardeLDR = 0;
int waardeBUTTON = 0;

const int lichtDrempel=675; // The point where it switch from off to on reading sensor LDR

long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers


void setup() {

pinMode (uitgangSensor, OUTPUT);
pinMode (uitgangButton, OUTPUT);
pinMode (buttonPin, INPUT);
pinMode (relaisSwitch, OUTPUT);

digitalWrite (buttonPin, buttonState); // Wat betekend dit?*****


Serial.begin(9600);}

void loop(){

lichtWaarde = analogRead(sensorPin);
if (lichtWaarde < lichtDrempel){digitalWrite (uitgangSensor, HIGH);}
else {digitalWrite (uitgangSensor, LOW);}


//*1
{
// read the state of the switch into a local variable:
int reading = digitalRead(buttonPin);

// check to see if you just pressed the button
// (i.e. the input went from LOW to HIGH), and you've waited
// long enough since the last press to ignore any noise:

// If the switch changed, due to noise or pressing:
if (reading != lastButtonState) {
// reset the debouncing timer
lastDebounceTime = millis();
}

if ((millis() - lastDebounceTime) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:

// if the button state has changed:
if (reading != buttonState) {
buttonState = reading;

// only toggle the LED if the new button state is HIGH
if (buttonState == HIGH) {
uitgangButtonState = !uitgangButtonState;
}
}
}

// set the LED:
digitalWrite (uitgangButton, uitgangButtonState);

// save the reading. Next time through the loop,
// it'll be the lastButtonState:
lastButtonState = reading;
} //*2

{
// read the state of the pushbuttons value:
waardeLDR = digitalRead(uitgangSensor);
waardeBUTTON = digitalRead(uitgangButton);
// check if the pushbuttons is pressed.
// Based on the pushbutton status and truth table of XOR, turn on or off the LED at Pin 13
if ((waardeLDR == HIGH && waardeBUTTON == LOW) || (waardeLDR == LOW && waardeBUTTON == HIGH)) {
// turn LED on:
digitalWrite(relaisSwitch, HIGH);
}
else {
// turn LED off:
digitalWrite(relaisSwitch, LOW);
}
}



}
Met vriendelijke groet Arjan

Gebruikers-avatar
Berichten: 270
Geregistreerd: 30 Dec 2012, 11:42

Re: Help beginner :) Dag/nacht schakeling met button..

Berichtdoor Rudi » 09 Sep 2015, 16:22

Er zit een foute gedachtengang in de code want je probeert de waarde van als output gedefinieerde pinnen 7 en 8
Code: Alles selecteren
pinMode (uitgangSensor, OUTPUT);
pinMode (uitgangButton, OUTPUT);
in te lezen
Code: Alles selecteren
waardeLDR = digitalRead(uitgangSensor);
waardeBUTTON = digitalRead(uitgangButton);
en dat kan niet.

Je kan de toestand in een variabele opslaan.
Om je op weg te zetten, vervang het digitalWrite() statement op regels 37 en 38 door waardeLDR = 1 respektievelijk waardeLDR = 0. De variabele waardeLDR kan je dan uitlezen wanneer nodig.
Iets gelijkaardigs moet je doen voor de button maar dat zoek je best zelf uit, zo leer je wat.

Zoals baco1978 terecht opmerkt wordt alles na regel 77 niet uitgevoerd.
Twee onafhankelijk werkende sketches samenvoegen is geen garantie voor sukses zolang je niet begrijpt wat iedere regel code doet. Dat is geen rotte opmerking naar TS toe maar gewoon realiteit :-)

Los daarvan klopt de Fritzing tekening niet wat het relais betreft (+, gnd én pin 13 ?)
Arduinows!
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Help beginner :) Dag/nacht schakeling met button..

Berichtdoor baco1978 » 09 Sep 2015, 20:26

het kan natuurlijk ook zo zijn, dat de TS gebruikt maakt van zo'n relais printje en dan kan de tekening weer wel kloppen
Met vriendelijke groet Arjan

Gebruikers-avatar
Berichten: 188
Geregistreerd: 23 Dec 2011, 00:12

Re: Help beginner :) Dag/nacht schakeling met button..

Berichtdoor Duality » 10 Sep 2015, 02:07

de ldr hangt aan een analoge pin, en ik denk dat het de bedoeling is dat er analogRead() gebruikt word.

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Help beginner :) Dag/nacht schakeling met button..

Berichtdoor baco1978 » 10 Sep 2015, 08:39

een analog read wordt al aan het begin van de loop gedaan, dus daar wordt al aan voldaan
Met vriendelijke groet Arjan

Berichten: 3
Geregistreerd: 08 Sep 2015, 02:22

Re: Help beginner :) Dag/nacht schakeling met button..

Berichtdoor korne1983 » 12 Sep 2015, 03:59

Hallo allemaal,

Wat super dat jullie er allemaal naar gekeken hebben. Sorry dat ik zo laat reageer. Ik ben de laatste dagen erg druk geweest met werk. Ik ben zondag vrij en ga dan met jullie tips aan de slag! Die relais heb ik idd gewoon in fritzing getrokken. Ik kon op dat plaatje niet echt wijs worden hoe dat volgens het plaatje goed aangesloten moest worden. Maar in het echt is de relais wel goed aangesloten want hij schakelt op de button wel aan en uit.

Oke dus ik begrijp dat ik het laatste deel van de code helemaal niet uitvoer.. dat kan ook het een en ander verklaren. Bedankt voor alle tips. Ik ga er zondag weer aan zitten en ik laat jullie weten of ik mindfuck eindelijk overwonnen heb :) Het wordt bijna zo`n kubus die niet op te lossen is voor me haha..

Ik had in eerste instantie ook niet twee digitale out`s ingesteld voor de button en relais. Ik liet toen zowel de LDR en de button de relais regelen. Alleen toen dacht ik dat dat natuurlijk nooit kon omdat dan de LDR de pin op laag zet terwijl de button het bijvb op hoog zet. Dat conflicteerde met elkaar. Daarom wilde ik de XOR erin brengen zodat ik dmv een vergelijking een bepaling kon laten maken. Daarom heb ik die twee digitale OUT`s gemaakt. Misschien is mijn logica totaal onzin. Ik hoop het natuurlijk niet :)
Ik houd jullie op de hoogte!

Nogmaals dank,

Groeten Korné

Gebruikers-avatar
Berichten: 210
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Help beginner :) Dag/nacht schakeling met button..

Berichtdoor baco1978 » 14 Sep 2015, 09:05

graag gedaan,

Hopelijk heb je gisteren verder kunnen komen.

Zolang je maar voor jezelf je doel kan bereiken, kom je al een heel eind.
En juist als het een hele puzzel is, is de uitdaging des te leuker, althans dat vind ik :)

veel succes en ben benieuwd naar je resultaten.

Groetjes
Arjan
Met vriendelijke groet Arjan

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten