Probleem met code

Software die niet past in bovenstaande onderwerpen
Gebruikers-avatar
Berichten: 48
Geregistreerd: 15 Jan 2019, 16:28

Probleem met code

Berichtdoor Bosch » 16 Jan 2019, 23:41

Onderstaande code is een test om een teller opdrachten te laten uitvoeren......het werkt niet, weet iemand waar de fout zit?

void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}


void teller (){
Serial.println("Optellen:");
for(int A=1; A<=5; A++) {
Serial.print("Schakel deze lamp AAN: ");
Serial.println(A);
delay(1000);
}
}
void test(){
Serial.println(analogRead(A0));
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
}
void loop() {
// laten we voorlopig open
}

Advertisement

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

Re: Probleem met code

Berichtdoor shooter » 17 Jan 2019, 00:21

Nee de loop is leeg dus er gebeurt niks,
schrijf maar eens in de loop teller ();
en test();
paul deelen
shooter@home.nl

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

Re: Probleem met code

Berichtdoor Bosch » 17 Jan 2019, 15:34

Dank voor uw snelle reactie!

void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
void teller (){
int licht = (analogRead(A0));
digitalWrite(5, LOW);
Serial.println("rode led is uit");
digitalWrite(6, LOW);
Serial.println("groene led is uit");
delay(2000);
Serial.println("Lichtsterkte meten:");
for(int A=1; A<=10; A++)
{
Serial.println(analogRead(A0));
Serial.println("lichtsterkte =");
Serial.println(licht);
Serial.println("rode led gaat aan");
digitalWrite(5, HIGH);
Serial.println("groene led gaat aan");
digitalWrite(6, HIGH);
Serial.println(A);
delay(1000);
}
}
void loop() {teller();}


Het gaat de goede kant uit.....nu een timer inbouwen hoelang de leds (lees motortje) aanblijven bij een x waarde.

//

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

Re: Probleem met code

Berichtdoor shooter » 17 Jan 2019, 21:20

doe dat dan niet met delay maar met millis()-oudetijd >= wachttijd of zo.
paul deelen
shooter@home.nl

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

Re: Probleem met code

Berichtdoor Bosch » 17 Jan 2019, 23:48

Binnenkort komt er een lesboek binnen, mijn programmeren is te roestig geworden,
de jaren eisen zijn tol (64) :)

De uitleg op het net over millis() is me niet duidelijk genoeg om mee te werken.

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

Re: Probleem met code

Berichtdoor shooter » 18 Jan 2019, 23:01

millis() is gewoon een teller die elke miliiseconde een omoog gaat, en die je kunt gebruiken om een timer te maken door de beginstand in een variabele te zetten en dan kijklen of de nieuwste stand van die teller genoeg is zodat er een bepaalde tijd is geweest.
Het grote voordeel is dat je proces (loop) gewoon doorloopt.
paul deelen
shooter@home.nl

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

Re: Probleem met code

Berichtdoor Bosch » 19 Jan 2019, 15:35

Met dank aan de schrijvers,
een voorbeeld gevonden met LED_BUILTIN.
Code zoveel mogelijk vertaald en ingekort.
Een LED op pinMode 5 toegevoegd, het werkt!


Nu nog laten indalen hoe het werkt :)

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

Re: Probleem met code

Berichtdoor Bosch » 19 Jan 2019, 21:20

De huidige versie, kan het beter...kan het korter?
Graag uw commentaar.

const int ledPin =LED_BUILTIN;
int ledState = LOW;
int ledState2 = LOW;

unsigned long oudetijd= 0;
const long wachttijd = 1000;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() {

if (millis() - oudetijd >= wachttijd) {

oudetijd = millis();

if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
if (ledState2== LOW) {
ledState2 = HIGH;
} else {
ledState2 = LOW;
}
digitalWrite(ledPin, ledState);
digitalWrite(5, ledState2);
}
}

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

Re: Probleem met code

Berichtdoor Bosch » 21 Jan 2019, 18:19

// Automatisch Kippenluik

int ledState5 = LOW;
int ledState6 = LOW;
int ledState7 = LOW;

unsigned long oudetijd5= 0; const long wachttijd5 = 500;
unsigned long oudetijd6= 0; const long wachttijd6 = 1000;
unsigned long oudetijd7= 0; const long wachttijd7 = 3000;

void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}

void test5(){
if (millis() - oudetijd5 >= wachttijd5) {oudetijd5 = millis();
if (ledState5 ==LOW){ledState5 =HIGH;}else {ledState5 =LOW;}
digitalWrite(5, ledState5);
}}

void test6(){
if (millis() - oudetijd6 >= wachttijd6) {oudetijd6 = millis();
if (ledState6 ==LOW){ledState6 =HIGH;}else {ledState6 =LOW;}
digitalWrite(6, ledState6);
}}

void test7(){
int licht = (analogRead(A0));
if (millis() - oudetijd7 >= wachttijd7) {oudetijd7 = millis();
if (ledState7==LOW){ledState7 =HIGH;}else {ledState7 =LOW;}
digitalWrite(7, ledState7);
Serial.println("Rood is aan");
Serial.println("lichtsterkte =");
Serial.println(licht);

if ((licht)<100){Serial.println("Luik moet open");}
else if ((licht)>100){Serial.println("Luik moet dicht");}

}}
void loop() {test5();test6();test7();}




Aardig op weg denk ik, echter hoe nu een motor bv 10 sec. te lopen als aan de lichtwaarde wordt voldaan?
Met delay() het programma stoppen tot dat het luik dicht/open is gegaan?

Of een millis() binnen een millis(), graag uw commentaar.


//

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

Re: Probleem met code

Berichtdoor shooter » 21 Jan 2019, 20:12

je kunt als je iets gedaan wilt hebben na 10 seconden bijvoorbeeld de oudetijd instellen en dan net zoals je steeds doet dan 10000 msec wachten.
paul deelen
shooter@home.nl

Volgende

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten