Probleem met delay

Arduino specifieke Software
Berichten: 14
Geregistreerd: 02 Aug 2016, 22:09

Probleem met delay

Berichtdoor bertjenl » 05 Aug 2016, 17:12

Hallo.Eerst even voorstellen.
ik ben Bert ben monteur van beroep en heb teveel hobby's.
Een van die hobby's is dingen bouwen en sinds kort ook proberen te programmeren. Ben nu bezig met een kleine trommelfilter voor mijn vijver en ik zit met een probleem waar ik nog niet uitkom. Ik wil als er een sensor wordt geactiveerd dat er een relais wordt bekrachtigt voor een bepaalde tijd en ik krijg het niet voor elkaar in de sketch zonder foutmeldingen heeft iemand advies
cpp code
const int knop = 2;
const int pin = 13;
const int sensor = 5;
const int pinMo = 11;

// variables will change:
int knopState = 0; // variable for reading the knop status
int sensorState = 0; // variable for reading the sensor status




void setup() {

pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(2, INPUT_PULLUP);
pinMode(5, INPUT);
}


void loop() {
digitalWrite(12, LOW); // relais aan
delay(15000); // 15 sec draaien
digitalWrite(12, HIGH); // relais uit
delay(18000); // 30 min wachttijd

// read the state of of the knop value:
knopState = digitalRead(knop);

//check if the knop is pressed
//if it is the knopState is LOW:
if (knopState == LOW) {
// turn 13 of:
digitalWrite(13, LOW);
} else {
// turn 13 on:
digitalWrite(13, HIGH);

}
// read the state of of the sensor value:
knopState = digitalRead(knop);

//check if the sensor is pressed
//if it is the sensorState is LOW:
if (sensorState == LOW) {
// turn 11 of:
digitalWrite(11, LOW);
} else {
// turn 11 on:
digitalWrite(11, HIGH);
}
}

Advertisement

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

Re: Probleem met delay

Berichtdoor nicoverduin » 05 Aug 2016, 17:34

Compileer technisch is ie goed.
Op regel 27 wacht je 18 seconden. Geen 30 minuten
Op regel 43 lees je wederom knop en niet de sensor.
Als je langer iets wilt bekrachtigen zonder delay (is dodelijk voor je programma) moet je eens kijken op "blink without delay". Daar wordt gewerkt met timers.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 14
Geregistreerd: 02 Aug 2016, 22:09

Re: Probleem met delay

Berichtdoor bertjenl » 05 Aug 2016, 19:20

Bedankt voor de reactie. Maar dit roept wat vragen op hoezo is dit dodelijk voor het programma. Is delay dodelijk of is het dodelijk om sneller dan de de delay functie te moeten schakelen

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

Re: Probleem met delay

Berichtdoor nicoverduin » 05 Aug 2016, 19:50

Dat laatste... zolang de delay() loopt kun je niets anders doen in het programma.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 14
Geregistreerd: 02 Aug 2016, 22:09

Re: Probleem met delay

Berichtdoor bertjenl » 05 Aug 2016, 21:40

bedankt
Als ik het goed begrijp kan ik in de eerste wachttijd van het programma niks doen met de rest van de code?.
De wachttijd(delay ) is /moet dan 30 minuten zijn.
is dit dan op te lossen met de sketch blink without delay of zit ik dan op het verkeerde pad

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

Re: Probleem met delay

Berichtdoor nicoverduin » 05 Aug 2016, 22:31

in blink without delay ligt de basis van wat je moet doen. Ik heb al meerdere malen hier ook al eens voorbeelden van timers gezet.
Als je zegt dat hij toch niets anders hoeft te doen, kun je gerust delay() gebruiken.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Probleem met delay

Berichtdoor Koepel » 06 Aug 2016, 01:12

Hallo, ik ben "Koepel" en houdt me graag bezig met millis() en I2C.

Als je nog meer wilt doen, bijvoorbeeld ledjes knipperen, geluiden maken enzovoorts tijdens de wachttijd, dan is het handig om millis() te gebruiken. In dat geval wordt niet gewacht met delay(), maar tijdens de loop() wordt gekeken of het tijd is om op dat moment iets te doen. Als er niets te doen is, wordt de loop() weer opnieuw uitgevoerd om te kijken of er dan iets gedaan moet worden, enzovoorts.

Berichten: 14
Geregistreerd: 02 Aug 2016, 22:09

Re: Probleem met delay

Berichtdoor bertjenl » 06 Aug 2016, 10:54

Allemaal bedankt voor de reacties
ik begrijp dat er een denkfout in mijn programma zit als de dertig minuten wachttijd actief is moet er wel degelijk naar de sensor en de knop worden gekeken dus geen delay. Als het relais wordt bekrachtigd is het systeem al bezig en moet er dus nergens meer naar gekeken worden = delay. Dus weer terug naar de programma,s .
Meteen een vraag hoe krijg ik die millis geimpleteerd in het programma. staan /zijn er voorbeelden van gebruikers

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Probleem met delay

Berichtdoor Gij Kieken » 06 Aug 2016, 11:13


Berichten: 14
Geregistreerd: 02 Aug 2016, 22:09

Re: Probleem met delay

Berichtdoor bertjenl » 06 Aug 2016, 12:23

Okay sketch verandert maar geeft nu een ander probleem heb nu een conflict met const int relais=12 en int=HIGH relais wat doe ik fout ?
const int knop = 2;
const int pin = 13;
const int sensor = 5;
const int pinMo = 11;
const int relais = 12;

int knopState = 0;
int sensorState = 0;
int relais = HIGH;

unsigned long previousMillis = 0;

const long interval = 1800000;


void setup() {

pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(2, INPUT_PULLUP);
pinMode(5, INPUT);
}


void loop() {
digitalWrite(12, LOW); // relais aan
delay(15000); // 15 sec draaien
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (relais == LOW) {
relais = HIGH;
} else {
relais = LOW;
}


digitalWrite(relais, relais);

knopState = digitalRead(knop);


if (knopState == LOW) {
// turn 13 of:
digitalWrite(13, LOW);
} else {
// turn 13 on:
digitalWrite(13, HIGH);

}
// read the state of of the sensor value:
sensorState = digitalRead(sensor);

//check if the sensor is pressed
//if it is the sensorState is LOW:
if (sensorState == LOW) {
// turn 11 of:
digitalWrite(11, LOW);
} else {
// turn 11 on:
digitalWrite(11, HIGH);
}
}
}

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: ikocapeqitak en 90 gasten