conflict in code?
17 berichten
• Pagina 2 van 2 • 1, 2
- chrisvoorma
- Berichten: 9
- Geregistreerd: 16 Jun 2017, 15:03
Re: conflict in code?
zal er zo meteen weer mee aan de slag gaan, je hebt alweer heel veel verduidelijkt.
thanx
thanx
Advertisement
- chrisvoorma
- Berichten: 9
- Geregistreerd: 16 Jun 2017, 15:03
Re: conflict in code?
zo daar was ik weer samen met de code die ik er nu van gebakken heb.
Enige waar ik nu nog tegen aan loop, is dat ledRed en ledGreen niet knipperen op intervalRed/intervalGreen maar op die van intervalProbe (5000)
- Code: Alles selecteren
//Automatische bewatering
//Arduino Uno V3, Adafruit RTC DS3231, Adafruit temp, Adafruit lcd 16x2, vochtsensor, relais
//Juni 2017
//Bij droogte 'snachts tussen 0200 en 0600 uur eventueel sproeien (Relay) ,
//en rode led aan tijdens sproeien en voor het sproeien
//bij te lage vochtigheid rode led knipperen
//vochtigheid goed groene led aan
//vochtigheid te hoog groene led knipperen (of beide leds knipperen)
//1x per 15 minuten vochtigheid meten
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal.h>
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const int ledRed = 3; //controle led, op afstand zien of relais aan of uit staat
const int ledGreen = 4;
const int relais = 5; //relais
const int probe = 6; //voeding vochtsensor
const int humidityPin = A0; //data vochtsensor
int ledRedState = LOW;
int ledGreenState = LOW;
unsigned long previousMillisProbe;
const long intervalProbe = 5000; //wordt als de sketch werkt 900000
unsigned long previousMillisRed; //knipper rode led
const long intervalRed = 250;
unsigned long previousMillisGreen; //knipper groene led
const long intervalGreen = 250;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //aansluitingen LCD
void setup()
{
Serial.begin(9600);
Serial.println("sketch is begonnen");
lcd.begin (16, 2);
rtc.begin();
//als ik de volgende 10 regels uncomment dan weet ik zeker dat er helemaal niks begint te lopen, maar dat is voor latere zorg (klok loopt nu op juiste tijd)
//if (! rtc.begin());
//{
//Serial.println("Cant't find RTC");
//lcd.print("Can't find RTC");
//while (1);
//}
//if (rtc.lostPower())
//{
// Serial.println("lost power,set");
//lcd.print("lost power,set");
// following line sets the RTC to the date & time this sketch was compiled
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//}
// setting the pins to outputs
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(relais, OUTPUT);
pinMode(probe, OUTPUT);
pinMode(13, OUTPUT);
//startup meting naar serial monitor
digitalWrite(probe, HIGH); // voeding vochtsensor aan
delay(200); //korte vertraging voor nauwkeurige meting vochtsensor
int humidity = analogRead(humidityPin);
Serial.println(humidity);
digitalWrite(probe, LOW); //voeding vochtsensor uit
digitalWrite(13, LOW);
}
void loop()
{
DateTime now = rtc.now(); //vraag huidige tijd op
//weergave tijd op lcd
lcd.setCursor(0, 0);
if (now.hour() < 10)
lcd.print('0');
lcd.print(now.hour(), DEC);
lcd.print(':');
if (now.minute() < 10)
lcd.print('0');
lcd.print(now.minute(), DEC);
lcd.print(':');
if (now.second() < 10)
lcd.print('0');
lcd.print(now.second(), DEC);
lcd.print(" ");
// weergave tijd naar serial monitor
//if (now.hour() < 10)
//Serial.print('0');
//Serial.println(now.hour(), DEC);
//Serial.print(':');
//if (now.minute() < 10)
//Serial.print('0');
//Serial.print(now.minute(), DEC);
//Serial.print(':');
//if (now.second() < 10)
//Serial.print('0');
//Serial.print(now.second(), DEC);
//Serial.println();
//De currentMillis, wordt gebruikt door de softwaretimers
unsigned long currentMillis = millis();
if (currentMillis - previousMillisProbe >= intervalProbe)
{
previousMillisProbe = currentMillis;
//Het aan en uitzetten van de probe voorkomt dat er een constante spanning op staat,
//waardoor er dus zo min mogelijke chemische recatie (electrolyse) plaatsvind
//en de probe (staat in vochtige grond) erg snel vergaat.
digitalWrite(probe, HIGH);
Serial.println(now.hour(), DEC);
//zeer kleine pauze om een naurkeurige meting van de vochtsensor te krijgen,
//erg onnauwkeurig zonder vertraging (delay)
delay(200);
//vraag eenamlig de waarde van humidity op
//hierdoor wordt het later mogelijk een gemiddelde te nemen
//De 'humidity'is de ruwe waarde van de vochtsensor A0 0...1023 (0=verzadigt, 1023=kurkdroog,
//deze waardes kunnen per vochtsensor verschillen, de gebruikte vochtsensor geeft,
//bij volledig verzadigde grond een waarde van 196
int humidity = analogRead(humidityPin); //lees de waarde van de vohtsensor
//omzetten waarde vochtsensor naar percentage
//let op, test de uiterste waardes van de vochtsensor in kurkdroge en kletsnatte grond
//en noteer de waardes, hoogste waarde is 100%, laagste waarde is 0% vocht
int percent = map(humidity, 1023.00, 196.00, 0.00, 100.);
//de humidity is opgevraagd, de sensor kan uit.
digitalWrite(probe, LOW);
//print de waarde die gelezen wordt van de vochtsensor
// print out the value you read:
Serial.print(percent);
Serial.print("% = ");
Serial.println(humidity);
lcd.setCursor(0, 1);
if (percent < 10)
lcd.print('0');
lcd.print(percent, DEC);
lcd.print("% vocht");
lcd.println(" ");
//er zijn vier states:
//rode led is aan, grond te droog, er wordt gesproeit of er gaat gesproeit worden
//rode led knippert, grond is droog, er wordt binnenkort gesproeit
//groene led aan, grond is precies vochtig genoeg
//groene led knippert, grond is te nat
//int humidity = analogRead(humidityPin);
//int percent = map(humidity, 1023.00, 196.00, 0.00, 100.);
if (now.hour() >= 20 && (now.hour() <= 23)) //LET OP, tijden waartussen daadwerkelijk gesproeit word
{
if (percent <= 20) //vochtpercentage kleiner dan 20%, te droog
{
//digitalWrite(ledRed, HIGH);
digitalWrite(relais, HIGH);
}
else
{
digitalWrite(relais, LOW);
//digitalWrite(ledRed, LOW);
}
}
if (percent < 20)
{
digitalWrite(ledRed, HIGH);
Serial.println("percentage <20%");
}
else
{
digitalWrite(ledRed, LOW);
}
if (percent > 20 && percent < 23)
{
if (currentMillis - previousMillisRed >= intervalRed)
{
previousMillisRed = currentMillis; //opslaan laatste keer knipperen ledred
if (ledRedState == LOW) // als de ledred uit is aanzetten en vice verca
ledRedState = HIGH;
else
ledRedState = LOW;
digitalWrite(ledRed, ledRedState);
Serial.println("percentage tussen 20 en 23");
}
else
{
digitalWrite(ledRed, LOW);
}
}
if (percent > 20 && percent <= 30) //vochtpercentage perfect 20% - 30%
{
digitalWrite(ledGreen, HIGH);
Serial.println("percentage tussen 20 en 30");
}
else
{
digitalWrite(ledGreen, LOW);
}
if (percent > 30) //vochtpercentage groter dan 30%, te nat
{
if (currentMillis - previousMillisGreen >= intervalGreen)
{
previousMillisGreen = currentMillis; //opslaan laatste keer knipperen ledred
if (ledGreenState == LOW) // als de ledgreen uit is aanzetten en vice verca
ledGreenState = HIGH;
else
ledGreenState = LOW;
digitalWrite(ledGreen, ledGreenState);
Serial.println("percentage boven 30");
}
}
else
{
digitalWrite(ledGreen, LOW);
}
}
}
Enige waar ik nu nog tegen aan loop, is dat ledRed en ledGreen niet knipperen op intervalRed/intervalGreen maar op die van intervalProbe (5000)
Re: conflict in code?
Precies om 0:00 crashte de knop "Voorbeeld" en was mijn hele antwoord weg ! Aaaaaaaaaaah Het staat ook niet bij de Concepten
Dit is mijn sterk ingekorte antwoord:
Je code kan ik nu lezen Heel goed https://www.youtube.com/watch?v=35mzCoMjjcE
De now.hour() en het relais blijven in de intervalProbe. Het schrijven van percentage naar seriele monitor ook.
Het aansturen van de leds gaat daar uit, om te kunnen knipperen.
Dit deel blijft dus zo, maar zonder de if-staments van de leds en met het schrijven van het percentage naar de seriele monitor. Ik laat dit zomaar zien om duidelijk te maken dat dit deel niet veranderd:
cpp code
De if-statements voor leds zet ik nu netjes op, zonder overlappingen en zonder gaten, en zelfs met de 'zeef'-methode.
De if-statements komen in de loop(), op hetzelfde niveau als intervalProbe:
cpp code
Het invullen van de if-statements kun je zelf. Zodra je ergens iets met de rode led doet, zet dan altijd de groene led uit, en andersom.
Aan de hand van het percentage heb je vier 'states' (vier toestanden voor de vochtigheid en vier toestanden waarin je code zich kan bevinden). Je sketch kan eenvoudiger en duidelijker worden (en helaas wat groter) waarneer je sketch zich op de verschillende 'states' gaat baseren. Dan kun je detecteren dat de 'state' verandert, en dan hoef je alleen op dat moment iets te wijzigen. Dat is betere code dan honderden keren per seconde een led uit of aan te zetten.
Wist je dat het ledje op het Arduino board een eigen define heeft voor het pin nummer ? Dat is "LED_BUILTIN" https://www.arduino.cc/en/Reference/Constants. Je zou dus ook pinMode(LED_BUILTIN,OUTPUT); kunnen doen.
Dit is mijn sterk ingekorte antwoord:
Je code kan ik nu lezen Heel goed https://www.youtube.com/watch?v=35mzCoMjjcE
De now.hour() en het relais blijven in de intervalProbe. Het schrijven van percentage naar seriele monitor ook.
Het aansturen van de leds gaat daar uit, om te kunnen knipperen.
Dit deel blijft dus zo, maar zonder de if-staments van de leds en met het schrijven van het percentage naar de seriele monitor. Ik laat dit zomaar zien om duidelijk te maken dat dit deel niet veranderd:
cpp code
//
if (currentMillis - previousMillisProbe >= intervalProbe)
{
previousMillisProbe = currentMillis;
...
if (now.hour() >= 20 && (now.hour() <= 23)) //LET OP, tijden waartussen daadwerkelijk gesproeit word
{
if (percent <= 20) //vochtpercentage kleiner dan 20%, te droog
{
//digitalWrite(ledRed, HIGH);
digitalWrite(relais, HIGH);
}
else
{
digitalWrite(relais, LOW);
//digitalWrite(ledRed, LOW);
}
}
Serial.print("percentage = ");
Serial.println( percent);
} // einde van intervalProbe
De if-statements voor leds zet ik nu netjes op, zonder overlappingen en zonder gaten, en zelfs met de 'zeef'-methode.
De if-statements komen in de loop(), op hetzelfde niveau als intervalProbe:
cpp code
//
if (currentMillis - previousMillisProbe >= intervalProbe)
{
...
} // einde van intervalProbe
if (percent < 20)
{
...
}
else if (percent < 23) // tussen 20 en 23
{
...
}
else if (percent < 30) // vochtpercentage perfect 20% - 30%
{
...
}
else // hier komt de rest, dus boven de 30.
{
...
}
Het invullen van de if-statements kun je zelf. Zodra je ergens iets met de rode led doet, zet dan altijd de groene led uit, en andersom.
Aan de hand van het percentage heb je vier 'states' (vier toestanden voor de vochtigheid en vier toestanden waarin je code zich kan bevinden). Je sketch kan eenvoudiger en duidelijker worden (en helaas wat groter) waarneer je sketch zich op de verschillende 'states' gaat baseren. Dan kun je detecteren dat de 'state' verandert, en dan hoef je alleen op dat moment iets te wijzigen. Dat is betere code dan honderden keren per seconde een led uit of aan te zetten.
Wist je dat het ledje op het Arduino board een eigen define heeft voor het pin nummer ? Dat is "LED_BUILTIN" https://www.arduino.cc/en/Reference/Constants. Je zou dus ook pinMode(LED_BUILTIN,OUTPUT); kunnen doen.
- chrisvoorma
- Berichten: 9
- Geregistreerd: 16 Jun 2017, 15:03
Re: conflict in code?
zo, weer even aan het knutselen geweest.
Wat vreselijk lullig dat je je hele tekst kwijt was, dus super dat je het alsnog weer getypt hebt.
Alles werkt bijna naar behoren, een ding blijf ik mee zitten en dat is het volgende:
zodra de sketch begint te lopen springt die gelijk naar de laatste state terwijl percentage anders is, oftewel de ledGreen begint direct te knipperen (maar hij knippert nu tenminste wel met de ingestelde millis)
hieronder een klein stukje van de seriële monitor:
en natuurlijk zoals de code nu is
Wat vreselijk lullig dat je je hele tekst kwijt was, dus super dat je het alsnog weer getypt hebt.
Alles werkt bijna naar behoren, een ding blijf ik mee zitten en dat is het volgende:
zodra de sketch begint te lopen springt die gelijk naar de laatste state terwijl percentage anders is, oftewel de ledGreen begint direct te knipperen (maar hij knippert nu tenminste wel met de ingestelde millis)
hieronder een klein stukje van de seriële monitor:
sketch is begonnen (begint setup)
lost power,set (instellen RTC)
846 (de gelezen analoge waarde van de probe)
percentage boven 30 (de state waarin die uiteindelijk uit komt)
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
22 (tijd)
21% = 842 (percentage, dus zeker niet boven de 30)
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
percentage boven 30
en natuurlijk zoals de code nu is
- Code: Alles selecteren
//Automatische bewatering
//Arduino Uno V3, Adafruit RTC DS3231, Adafruit temp, Adafruit lcd 16x2, vochtsensor, relais
//Juni 2017
//Bij droogte 'snachts tussen 0200 en 0600 uur eventueel sproeien (Relay) ,
//en rode led aan tijdens sproeien en voor het sproeien
//bij te lage vochtigheid rode led knipperen
//vochtigheid goed groene led aan
//vochtigheid te hoog groene led knipperen (of beide leds knipperen)
//1x per 15 minuten vochtigheid meten
#include <RTClib.h>
#include <Wire.h>
#include <LiquidCrystal.h>
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const int ledRed = 3; //controle led, op afstand zien of relais aan of uit staat
const int ledGreen = 4;
const int relais = 5; //relais
const int probe = 6; //voeding vochtsensor
const int humidityPin = A0; //data vochtsensor
int ledRedState = LOW;
int ledGreenState = LOW;
unsigned long previousMillisProbe;
const long intervalProbe = 5000; //wordt als de sketch werkt 900000
unsigned long previousMillisRed; //knipper rode led
const long intervalRed = 250;
unsigned long previousMillisGreen; //knipper groene led
const long intervalGreen = 250;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //aansluitingen LCD
void setup()
{
Serial.begin(9600);
Serial.println("sketch is begonnen");
lcd.begin (16, 2);
rtc.begin();
//als ik de volgende 10 regels uncomment dan weet ik zeker dat er helemaal niks begint te lopen, maar dat is voor latere zorg (klok loopt nu op juiste tijd)
//if (! rtc.begin());
//{
//Serial.println("Cant't find RTC");
//lcd.print("Can't find RTC");
//while (1);
//}
//if (rtc.lostPower())
{
Serial.println("lost power,set");
lcd.print("lost power,set");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// setting the pins to outputs
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(relais, OUTPUT);
pinMode(probe, OUTPUT);
pinMode(13, OUTPUT);
//startup meting naar serial monitor
digitalWrite(probe, HIGH); // voeding vochtsensor aan
delay(200); //korte vertraging voor nauwkeurige meting vochtsensor
int humidity = analogRead(humidityPin);
Serial.println(humidity);
digitalWrite(probe, LOW); //voeding vochtsensor uit
digitalWrite(13, LOW);
}
void loop()
{
DateTime now = rtc.now(); //vraag huidige tijd op
//weergave tijd op lcd
lcd.setCursor(0, 0);
if (now.hour() < 10)
lcd.print('0');
lcd.print(now.hour(), DEC);
lcd.print(':');
if (now.minute() < 10)
lcd.print('0');
lcd.print(now.minute(), DEC);
lcd.print(':');
if (now.second() < 10)
lcd.print('0');
lcd.print(now.second(), DEC);
lcd.print(" ");
// weergave tijd naar serial monitor
//if (now.hour() < 10)
//Serial.print('0');
//Serial.println(now.hour(), DEC);
//Serial.print(':');
//if (now.minute() < 10)
//Serial.print('0');
//Serial.print(now.minute(), DEC);
//Serial.print(':');
//if (now.second() < 10)
//Serial.print('0');
//Serial.print(now.second(), DEC);
//Serial.println();
//De currentMillis, wordt gebruikt door de softwaretimers
unsigned long currentMillis = millis();
if (currentMillis - previousMillisProbe >= intervalProbe)
{
previousMillisProbe = currentMillis;
//Het aan en uitzetten van de probe voorkomt dat er een constante spanning op staat,
//waardoor er dus zo min mogelijke chemische recatie (electrolyse) plaatsvind
//en de probe (staat in vochtige grond) erg snel vergaat.
digitalWrite(probe, HIGH);
Serial.println(now.hour(), DEC);
//zeer kleine pauze om een naurkeurige meting van de vochtsensor te krijgen,
//erg onnauwkeurig zonder vertraging (delay)
delay(50);
//vraag eenamlig de waarde van humidity op
//hierdoor wordt het later mogelijk een gemiddelde te nemen
//De 'humidity'is de ruwe waarde van de vochtsensor A0 0...1023 (0=verzadigt, 1023=kurkdroog,
//deze waardes kunnen per vochtsensor verschillen, de gebruikte vochtsensor geeft,
//bij volledig verzadigde grond een waarde van 196
int humidity = analogRead(humidityPin); //lees de waarde van de vohtsensor
//omzetten waarde vochtsensor naar percentage
//let op, test de uiterste waardes van de vochtsensor in kurkdroge en kletsnatte grond
//en noteer de waardes, hoogste waarde is 100%, laagste waarde is 0% vocht
int percent = map(humidity, 1023.00, 196.00, 0.00, 100.);
//de humidity is opgevraagd, de sensor kan uit.
digitalWrite(probe, LOW);
//print de waarde die gelezen wordt van de vochtsensor
// print out the value you read:
Serial.print(percent);
Serial.print("% = ");
Serial.println(humidity);
lcd.setCursor(0, 1);
if (percent < 10)
lcd.print('0');
lcd.print(percent, DEC);
lcd.print("% vocht");
lcd.println(" ");
//er zijn vier states:
//rode led is aan, grond te droog, er wordt gesproeit of er gaat gesproeit worden tussen de gestelde tijden
//rode led knippert, grond is droog, er wordt binnenkort gesproeit
//groene led aan, grond is precies vochtig genoeg
//groene led knippert, grond is te nat
if (now.hour() >= 20 && (now.hour() <= 23)) //LET OP, tijden waartussen daadwerkelijk gesproeit word
{
if (percent <= 20) //vochtpercentage kleiner dan 20%, te droog
{
digitalWrite(relais, HIGH);
}
else
{
digitalWrite(relais, LOW);
}
}
}
int humidity = analogRead(humidityPin); //lees de waarde van de vohtsensor
int percent = map(humidity, 1023.00, 196.00, 0.00, 100.);
if (percent < 20)
{
digitalWrite(ledRed, HIGH);
digitalWrite(ledGreen, LOW);
Serial.println("percentage <20%");
}
else if (percent <= 23)
{
if (currentMillis - previousMillisRed >= intervalRed)
{
previousMillisRed = currentMillis; //opslaan laatste keer knipperen ledred
if (ledRedState == LOW) // als de ledred uit is aanzetten en vice verca
ledRedState = HIGH;
else
ledRedState = LOW;
digitalWrite(ledRed, ledRedState);
digitalWrite(ledGreen, HIGH);
Serial.println("percentage tussen 20 en 23");
}
}
else if (percent <= 30) //vochtpercentage perfect 20% - 30%
{
digitalWrite(ledGreen, HIGH);
digitalWrite(ledRed, LOW);
Serial.println("percentage tussen 20 en 30");
}
else //vochtpercentage groter dan 30%, te nat
{
if (currentMillis - previousMillisGreen >= intervalGreen)
{
previousMillisGreen = currentMillis; //opslaan laatste keer knipperen ledgreen
if (ledGreenState == LOW) // als de ledgreen uit is aanzetten en vice verca
ledGreenState = HIGH;
else
ledGreenState = LOW;
digitalWrite(ledGreen, ledGreenState);
digitalWrite(ledRed, LOW);
Serial.println("percentage boven 30");
}
else
{
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, LOW);
}
}
}
Re: conflict in code?
Ik dacht dat je de vochtigheid alleen maar af en toe bepaalt.
Dus dat zit netjes binnen de intervalProbe.
Vervolgens heb je nu de humidity toegevoegd tussen de intervalProbe en de if-statements. Op dat moment staat de spanning niet eens op de sensor.
Het gaat dus om deze twee regels:
Een beginwaarde bepalen gebeurt in setup(). Daar kun je nog de berekening van de 'percent' toevoegen om het compleet te maken.
Dat stukje code kan het beste precies hetzelfde zijn als binnen de intervalProbe, zodat je er een functie van kunt maken.
De 'percent' kun je misschien als globale variabele doen. Zoek in je sketch naar 'percent' om te kijken dat die niet meerdere keren wordt gedeclareerd.
Dan het percentage berekenen. Dat gaat echt niet op die manier met de 'map()' functie. Die functie werkt met integers, en als de humidity onder de 196 komt, dan gaat het mis. Wanneer je die functie hebt gemaakt voor humidity en percent, kun je dan het percentage berekenen zonder de 'map()' functie ? Op een manier die altijd werkt ?
Het is nog een kwartier voor 0:00, dus dit zal wel goed gaan.
Dus dat zit netjes binnen de intervalProbe.
Vervolgens heb je nu de humidity toegevoegd tussen de intervalProbe en de if-statements. Op dat moment staat de spanning niet eens op de sensor.
Het gaat dus om deze twee regels:
- Code: Alles selecteren
int humidity = analogRead(humidityPin); //lees de waarde van de vohtsensor
int percent = map(humidity, 1023.00, 196.00, 0.00, 100.);
Een beginwaarde bepalen gebeurt in setup(). Daar kun je nog de berekening van de 'percent' toevoegen om het compleet te maken.
Dat stukje code kan het beste precies hetzelfde zijn als binnen de intervalProbe, zodat je er een functie van kunt maken.
De 'percent' kun je misschien als globale variabele doen. Zoek in je sketch naar 'percent' om te kijken dat die niet meerdere keren wordt gedeclareerd.
Dan het percentage berekenen. Dat gaat echt niet op die manier met de 'map()' functie. Die functie werkt met integers, en als de humidity onder de 196 komt, dan gaat het mis. Wanneer je die functie hebt gemaakt voor humidity en percent, kun je dan het percentage berekenen zonder de 'map()' functie ? Op een manier die altijd werkt ?
Het is nog een kwartier voor 0:00, dus dit zal wel goed gaan.
- chrisvoorma
- Berichten: 9
- Geregistreerd: 16 Jun 2017, 15:03
Re: conflict in code?
als ik die twee regels code achterwege laat: humidity en percent dan krijg ik de volgende foutmelding??
Daarom heb ik die er dus maar weer tussen gezet, mij ontbrak nhet echter wel aan de logica, maar tja het werkte wel op de een of ander manier.
Arduino: 1.8.2 (Windows 10), TD: 1.36, Board:"Arduino/Genuino Uno"
WAARSCHUWING: Categorie 'Real-time clock' in bibliotheek DS3231 is niet geldig. Wordt gewijzigd naar 'Uncategorized'
F:\ARDUINO\sprinkler_FINAL\sprinkler_FINAL.ino: In function 'void loop()':
sprinkler_FINAL:145: error: 'percent' was not declared in this scope
Serial.print(percent);
^
sprinkler_FINAL:147: error: 'humidity' was not declared in this scope
Serial.println(humidity);
^
sprinkler_FINAL:179: error: 'percent' was not declared in this scope
if (percent < 20)
^
exit status 1
'percent' was not declared in this scope
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Daarom heb ik die er dus maar weer tussen gezet, mij ontbrak nhet echter wel aan de logica, maar tja het werkte wel op de een of ander manier.
Re: conflict in code?
Je gaat met analogRead() de sensor lezen, terwijl de spanning op de sensor niet is aangezet. Het getal dat daar uit komt, daar heb je dus niets aan.
De compiler zegt: ik snap de variabele 'percent' niet, die ken ik niet.
Dat kun je voorkomen door 'percent' een globale variabele te maken. En dan vervolgens 'percent' ook in setup() berekenen is wel zo handig, en dan ook nog je sketch doorzoeken dat je 'percent' niet dubbel declareert. En 'percent' op een goede manier berekenen in plaats van op een verkeerde manier.
Wat hierboven staat, dat heb ik dus al geschreven
De compiler zegt: ik snap de variabele 'percent' niet, die ken ik niet.
Dat kun je voorkomen door 'percent' een globale variabele te maken. En dan vervolgens 'percent' ook in setup() berekenen is wel zo handig, en dan ook nog je sketch doorzoeken dat je 'percent' niet dubbel declareert. En 'percent' op een goede manier berekenen in plaats van op een verkeerde manier.
Wat hierboven staat, dat heb ik dus al geschreven
17 berichten
• Pagina 2 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 54 gasten