Regels HIGH en LOW werken contra in de code

Arduino specifieke Software
Gebruikers-avatar
Berichten: 48
Geregistreerd: 15 Jan 2019, 16:28

Regels HIGH en LOW werken contra in de code

Berichtdoor Bosch » 31 Jan 2019, 13:49

Bijgaand de code van mijn 'automatisch kippenluik', het werkt goed als ik LOW ipv HIGH schrijf en anderom ook.
Iemand een idee ?

// Automatisch Kippenluik versie 31012019

int Luikstatus = 0;
int motorPin1 = 3;
int motorPin2 = 4;
int ledState5 = 5;
int ledState6 = 6;
int ledState7 = 7;
int licht = (analogRead(A0));

void setup() {

Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(ledState5, OUTPUT);
pinMode(ledState6, OUTPUT);
pinMode(ledState7, OUTPUT);
}

void openen() {
int licht = (analogRead(A0));
digitalWrite(ledState5,HIGH);
digitalWrite(motorPin1,LOW); //Hier zou hoog moeten staan.
Serial.println("openen is aan");
Serial.println("lichtsterkte =");
Serial.println(licht);
Serial.println("Luikstatus");
Luikstatus = 1;
Serial.println(Luikstatus);
delay(5000);
digitalWrite(ledState5, LOW);
digitalWrite(motorPin1, HIGH); //Hier zou laag moeten staan.
meten();
}

void sluiten(){
int licht = (analogRead(A0));
digitalWrite(ledState6,HIGH);
digitalWrite(motorPin2, LOW); //Hier zou hoog moeten staan.
Serial.println("Sluiten is aan");
Serial.println("lichtsterkte =");
Serial.println(licht);
Serial.println("Luikstatus");
Luikstatus = 0;
Serial.println(Luikstatus);
delay(5000);
digitalWrite(ledState6,LOW);
digitalWrite(motorPin2,HIGH); //Hier zou laag moeten staan.
meten();
}
void meten(){

int licht = (analogRead(A0));
digitalWrite(ledState7,HIGH); //Hier zou laag moeten staan.
digitalWrite(motorPin1,HIGH); //Hier zou laag moeten staan.
digitalWrite(motorPin2,HIGH);
Serial.println("lichtsterkte =");
Serial.println(licht);
delay(5000);

if
(licht <100 && Luikstatus == 1){Serial.println("Luik is open");}
if
(licht <100 && Luikstatus == 0){Serial.println("Luik openen"); openen();}

if
(licht >100 && Luikstatus == 0){Serial.println("Luik is dicht");}
if
(licht >100 && Luikstatus == 1){Serial.println("Luik sluiten"); sluiten();}
}
void loop(){meten();}

Advertisement

Berichten: 68
Geregistreerd: 21 Apr 2013, 22:48
Woonplaats: Hoorn

Re: Regels HIGH en LOW werken contra in de code

Berichtdoor babbelkwebbel » 31 Jan 2019, 15:20

plaats even het schema.

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

Re: Regels HIGH en LOW werken contra in de code

Berichtdoor Gij Kieken » 31 Jan 2019, 15:49

Ofwel sluit je de draden aan de relais andersom , dus ipv NO & COM gebruik je NC & COM.
Tweede manier waar digitalWrite(motorPin1,LOW); //Hier zou hoog moeten staan.,Zet je <!> teken voor LOW (!LOW),
waar HIGH staat !HIGH , op die manier inverteer je het signaal om de relais te laten werken.(invert logic)
Je zou ook met #define kunnen werken en ipv HIGH & LOW OPEN & DICHT gebruiken.

Gebruikers-avatar
Berichten: 48
Geregistreerd: 15 Jan 2019, 16:28

Re: Regels HIGH en LOW werken contra in de code

Berichtdoor Bosch » 31 Jan 2019, 16:34

//Antwoord op de vraag: post een schema...ik kan een foto posten.
Het idee is ontstaan met kladpapier en uitproberen van deel routines,
kortom een schema heb ik niet voorhanden.//



Uw advies overgenomen en dit voorstel op het net gevonden.....geen idee waarom/hoe het werkt, maar het werkt.
Ofwel hoog is hoog en laag is laag wel zo netjes in de code :)
Dank voor uw hulp.

// Automatisch Kippenluik versie 31012019

int Luikstatus = 0;
# define motorPin1 3
# define motorPin2 4
# define relayAan 0
# define relayUit 1
int ledState5 = 5;
int ledState6 = 6;
int ledState7 = 7;
int licht = (analogRead(A0));

void setup() {

Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(ledState5, OUTPUT);
pinMode(ledState6, OUTPUT);
pinMode(ledState7, OUTPUT);
}

void openen() {
int licht = (analogRead(A0));
digitalWrite(ledState5,HIGH);
digitalWrite(motorPin1,relayAan);
Serial.println("openen is aan");
Serial.println("lichtsterkte =");
Serial.println(licht);
Serial.println("Luikstatus");
Luikstatus = 1;
Serial.println(Luikstatus);
delay(5000);
digitalWrite(ledState5, LOW);
digitalWrite(motorPin1, relayUit);
meten();
}

void sluiten(){
int licht = (analogRead(A0));
digitalWrite(ledState6,HIGH);
digitalWrite(motorPin2, relayAan);
Serial.println("Sluiten is aan");
Serial.println("lichtsterkte =");
Serial.println(licht);
Serial.println("Luikstatus");
Luikstatus = 0;
Serial.println(Luikstatus);
delay(5000);
digitalWrite(ledState6,LOW);
digitalWrite(motorPin2,relayUit);
meten();
}
void meten(){

int licht = (analogRead(A0));
digitalWrite(ledState7,HIGH);
digitalWrite(motorPin1,relayUit);
digitalWrite(motorPin2,relayUit);
Serial.println("lichtsterkte =");
Serial.println(licht);
delay(5000);

if
(licht <100 && Luikstatus == 1){Serial.println("Luik is open");}
if
(licht <100 && Luikstatus == 0){Serial.println("Luik openen"); openen();}

if
(licht >100 && Luikstatus == 0){Serial.println("Luik is dicht");}
if
(licht >100 && Luikstatus == 1){Serial.println("Luik sluiten"); sluiten();}
}
void loop(){meten();}

Gebruikers-avatar
Berichten: 48
Geregistreerd: 15 Jan 2019, 16:28

Re: Regels HIGH en LOW werken contra in de code

Berichtdoor Bosch » 31 Jan 2019, 17:07

Even een grapje...….met deze schets is het begonnen.
Het remote verhaal werkte niet met 500 meter afstand, vandaar op zoek naar een andere list.

Belangrijk detail.....we hebben geen 220 volt, dus heel zuinig met de energie van een klein zonnepaneel.



Het begin 11 januari2.jpg
Het begin 11 januari2.jpg (20.27 KiB) 7100 keer bekeken

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

Re: Regels HIGH en LOW werken contra in de code

Berichtdoor Gij Kieken » 31 Jan 2019, 20:25

Leuke tekening.
En je hebt gekozen voor #define, dit leest vlotter verderop in de code.
Een stapje verder is je Arduino in slaap te zetten en werken met interrupts om energie te besparen, maar dit is ineens een hele hap meer.
Het leuke is dat je het zelf gevonden hebt.
In setup zou je op het einde van je code nog kunnen zetten
digitalWrite(motorPin1, relayUit);
digitalWrite(motorPin2, relayUit);
Wat waarschijnlijk de bedoeling was in je eerste code.

Gebruikers-avatar
Berichten: 48
Geregistreerd: 15 Jan 2019, 16:28

Re: Regels HIGH en LOW werken contra in de code

Berichtdoor Bosch » 31 Jan 2019, 21:33

Dit in setup() plaatsen,

digitalWrite(motorPin1,relayUit);
digitalWrite(motorPin2,relayUit);

in plaats van de huidige versie in meten() ?

Er liggen heel veel 'vervolgen' in de toekomst, eerst
wil ik millis() zodanig onder de knie krijgen, zodat ik er mee kan werken.
Ik schrijf wel wat testen.....op basis van blink met millis().


Het is duidelijk dat ik werk met schetsjes op een velletje, ik post hieronder hoe ik
het me voorstel om te bouwen. Daar zit de conversie van 12 volt naar 5 volt nog niet in getekend.


Werkschets2.jpg
Werkschets2.jpg (19.6 KiB) 7083 keer bekeken


Het motortje is er één die 12 volt/90 omwentelingen per minuut,
is denk eenvoudig af te stellen.

Het project vordert langzaam maar gestaag :)

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

Re: Regels HIGH en LOW werken contra in de code

Berichtdoor Gij Kieken » 31 Jan 2019, 21:46

void setup() {

Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(motorPin1, OUTPUT); // motorpin1 is een uitgang
pinMode(motorPin2, OUTPUT); // motorpin2 is een uitgang
pinMode(ledState5, OUTPUT); // ledState5 is een uitgang
pinMode(ledState6, OUTPUT); // ledState6 is een uitgang
pinMode(ledState7, OUTPUT); // ledState7 is een uitgang
// initialiseer dat beide motoren uit zijn na een Reset of bij onder
// spanning plaatsen van je schakeling
digitalWrite(motorPin1,relayUit); // de motor1 draait niet
digitalWrite(motorPin2,relayUit); // de motor2 draait niet
}

Koepel heeft iets moois gemaakt over millis()
https://github.com/Koepel/Fun_with_mill ... /README.md

Gebruikers-avatar
Berichten: 48
Geregistreerd: 15 Jan 2019, 16:28

Re: Regels HIGH en LOW werken contra in de code

Berichtdoor Bosch » 31 Jan 2019, 22:13

Prachtig.....ik had het al ingevoerd en werkt prima!

De link ga ik bestuderen, mijn dank,

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

Re: Regels HIGH en LOW werken contra in de code

Berichtdoor shooter » 01 Feb 2019, 14:00

kijk maar in je andere post.
wel relayUit definieren.
paul deelen
shooter@home.nl

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: eahagda en 20 gasten