ldr

algemene C code
Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: ldr

Berichtdoor ThHe » 01 Nov 2023, 21:30

Ik denk dat je de compiler onderschat.
Om de de sensorValue < SCHEMER_ON mag je haakjes plaatsen maar is niet verplicht.

het eerste wat een compiler doet met formules is via herschrijf regels de haakje verwijderen.
(sensorValue < SCHEMER_ON || sensorValue > SCHEMER_OFF)

Deze regel wordt zonder haakjes herschreven als:
sensorValue, SCHEMER_ON, < , sensorValue, SCHEMER_OFF, > , ||

Het extra plaatsen van haakje is niet verboden maar kan ook fouten veroorzaken.

Advertisement

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

Re: ldr

Berichtdoor wappie » 14 Jan 2024, 19:17

u allen bedankt voor de oplossing , kon niet eerder reageren want heb constant problemen met inlog.

gr rob

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

Re: ldr

Berichtdoor wappie » 26 Jan 2024, 00:27

#include <Time.h>
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68// vast ingestelde waarden
#define SCHEMER_ON 10
#define SCHEMER_OFF 25
#define VERTRAGING 5000

unsigned long timer = 0;
int sensorValue = 0; // variable to store the value coming from the sensor
bool schemer = true; // sensorValue = 0 is schemer = true voor de juiste start.
int Light = 31;
int sensorPin = A0;

void setup() {


Wire.begin();
Serial.begin(9600);
pinMode(Light, OUTPUT);
}

void loop() {
sensorValue = analogRead(sensorPin); // read the value from the sensor

// Indien de sensorValue < SCHEMER_ON of sensorValue > SCHEMER_OFF) dan moet de timer starten of gaan lopen.
if ((sensorValue < SCHEMER_ON || sensorValue > SCHEMER_OFF)){
if (timer == 0){ // Timer aanzetten.
timer = millis();
}
}
else{ // Geen timer tussen SCHEMER_ON en SCHEMER_OFF
timer = 0;
}
// Indien de timer loop maar de tijd is ook verstreken dan schemer zetten en de timer uitzettten.
if (timer != 0 && (millis() - timer) > VERTRAGING)
{
timer = 0;
schemer = sensorValue < 10;
}

if (timer == 1 && (schemer == true))
{
digitalWrite(Light, HIGH);
}

else {
digitalWrite(Light, LOW);
}}

dit is het geworden klopt het?

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: ldr

Berichtdoor ThHe » 26 Jan 2024, 16:55

Snel naar de code gekeken maar dit statement is niet goed'
Code: Alles selecteren
if (timer == 1 && (schemer == true))

De kans dat de timer == 1 is erg klein.

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

Re: ldr

Berichtdoor wappie » 27 Jan 2024, 01:14

Code: Alles selecteren
if (timer =! 0 && (schemer == true))



thans voor zover
in mijn denkpatroon denk als de timer 1 dan is dus tijd verstreken en hier door de hysterese heeft gehad == is zo als het moet zijn.
ik heb nu dit er van gemaakt.

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: ldr

Berichtdoor ThHe » 30 Jan 2024, 12:37

Is het zo dat je hier wl zeggen de timer is verlopen maar moet blijven lopen omdat schermer = true
Dan moet het worden: timer ! 0 of schemer = true

if (timer != 0 || (schemer == true))

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

Re: ldr

Berichtdoor wappie » 03 Feb 2024, 11:02

Code: Alles selecteren
#include <Time.h>
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68// vast ingestelde waarden
#define SCHEMER_ON  10
#define SCHEMER_OFF 25
#define VERTRAGING  5000

unsigned long timer = 0;
int sensorValue = 0;       // variable to store the value coming from the sensor
bool schemer = true;       // sensorValue = 0  is schemer = true voor de juiste start.
int Light = 31;
int sensorPin = A0;

void setup() {

   
  Wire.begin();
  Serial.begin(9600);
  pinMode(Light, OUTPUT);
  }

void loop() {
   sensorValue = analogRead(sensorPin); // read the value from the sensor

    // Indien de sensorValue < SCHEMER_ON of sensorValue > SCHEMER_OFF) dan moet de timer starten of gaan lopen.
    if ((sensorValue < SCHEMER_ON || sensorValue > SCHEMER_OFF)){
        if (timer == 0){   // Timer aanzetten.
            timer = millis();
        }
    }
    else{ // Geen timer tussen SCHEMER_ON en SCHEMER_OFF
        timer = 0;
    }
   // Indien de timer loop maar de tijd is ook verstreken dan schemer zetten en de timer uitzettten.
    if (timer != 0 && (millis() - timer) > VERTRAGING)
    {
        timer = 0;
        schemer =  sensorValue < 10;   
    }

if (timer =! 0 && (schemer = true))
digitalWrite(Light, HIGH);


} else{
  digitalWrite(Light, LOW);
}}}}




ik denk dat ik het onderschat heb wat deze code betreft het is wel een grote leerschool ,maar ik wil deze code complemeren en gaat fout , kan een heledag gaan zoeken , maar kan ook de vraag stellen waar doe ik het fout ?

Berichten: 62
Geregistreerd: 05 Feb 2023, 13:30

Re: ldr

Berichtdoor sterretjeToo » 04 Feb 2024, 10:51

wappie schreef: maar kan ook de vraag stellen waar doe ik het fout ?

Ik zou eens accolades gaan tellen en kijken welke bij elkaar horen.

Op dit moment eidigt loop() bij de accolade die hieronder staat en alles daarna is verkeerd
Code: Alles selecteren
  if (timer = !0 && (schemer = true))
    digitalWrite(Light, HIGH);
}


Op deze manier ziet het er all een stuke beter uit
Code: Alles selecteren
  if (timer = !0 && (schemer = true))
  {
    digitalWrite(Light, HIGH);
  }
  else
  {
    digitalWrite(Light, LOW);
  }
}
}
}


Je hebt nog steeds een paar sluit accolades teveel.

Je kunt tools → autoformat gebruiken om dit soort problemen te vinden.

Berichten: 80
Geregistreerd: 02 Nov 2022, 13:03

Re: ldr

Berichtdoor ThHe » 04 Feb 2024, 15:46

Pas op want
Code: Alles selecteren
if (timer =! 0)
is een foutief statement hiermee wordt de timer op 1 gezet.
Het juiste statement is
Code: Alles selecteren
if (timer != 0)
de ! gevolgd door een = teken en niet anders om.

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

Re: ldr

Berichtdoor wappie » 04 Feb 2024, 22:18

Code: Alles selecteren
#include <Time.h>
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68// vast ingestelde waarden
#define SCHEMER_ON  10
#define SCHEMER_OFF 25
#define VERTRAGING  5000

unsigned long timer = 0;
int sensorValue = 0;       // variable to store the value coming from the sensor
bool schemer = true;       // sensorValue = 0  is schemer = true voor de juiste start.
int Light = 31;
int sensorPin = A0;

void setup() {

   
  Wire.begin();
  Serial.begin(9600);
  pinMode(Light, OUTPUT);
  }

void loop() {
   sensorValue = analogRead(sensorPin); // read the value from the sensor

    // Indien de sensorValue < SCHEMER_ON of sensorValue > SCHEMER_OFF) dan moet de timer starten of gaan lopen.
    if ((sensorValue < SCHEMER_ON || sensorValue > SCHEMER_OFF)){
        if (timer == 0){   // Timer aanzetten.
            timer = millis();
        }
    }
    else{ // Geen timer tussen SCHEMER_ON en SCHEMER_OFF
        timer = 0;
    }
   // Indien de timer loop maar de tijd is ook verstreken dan schemer zetten en de timer uitzettten.
    if (timer != 0 && (millis() - timer) > VERTRAGING)
    {
        timer = 0;
        schemer =  sensorValue < 10;   
    }

  if (timer != 0 && (schemer = true))
  {
    digitalWrite(Light, HIGH);
  }
  else
  {
    digitalWrite(Light, LOW);
  }
}








heel erg bedankt het werkt , even wat een domme fout van mij zelf

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 57 gasten