1ste keer hulp nodig met code aub
12 berichten
• Pagina 1 van 2 • 1, 2
1ste keer hulp nodig met code aub
Allen,
Sinds enige tijd bezig met simpele dingen (ledjes aansturen)
Nu heb ik via internet een wekker opgezocht.
deze wekker was standaard geprogrameerd met buzzer.
deze buzzer heb ik eruit gehaald.
Hiervoor in plaats heb ik 2 leds.
Pin 9 moet aangaan indien wekker (ahours en amins) < dan hour en min is.
verder moet pin 12 aangaan indien wekker groter is dan huidige tijd.
Onderstaand de gehele code,
kan iemand mij hierbij helpen?
er zit iets mis bij het stukje
Alvast bedankt
Sinds enige tijd bezig met simpele dingen (ledjes aansturen)
Nu heb ik via internet een wekker opgezocht.
deze wekker was standaard geprogrameerd met buzzer.
deze buzzer heb ik eruit gehaald.
Hiervoor in plaats heb ik 2 leds.
Pin 9 moet aangaan indien wekker (ahours en amins) < dan hour en min is.
verder moet pin 12 aangaan indien wekker groter is dan huidige tijd.
Onderstaand de gehele code,
- Code: Alles selecteren
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int starttime;
int activetime;
int prevoustime = 0;
int hours = 0;
int mins = 0;
int ahours = 0;
int amins = 0;
void setup()
{
lcd.begin(16, 2);
lcd.clear();
Serial.begin(9600);
pinMode(13, INPUT);
digitalWrite(13, HIGH);
pinMode(11, INPUT);
digitalWrite(11, HIGH);
pinMode(10, INPUT);
digitalWrite(10, HIGH);
pinMode(8, INPUT);
digitalWrite(8, HIGH);
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);
starttime = millis()/1000;
}
void loop()
{
while(digitalRead(8) == LOW)
{
lcd.setCursor(6,1);
lcd.print("Alarm");
lcd.setCursor(6,0);
if(digitalRead(11) == LOW)
{
amins++;
}
else if (digitalRead(10) == LOW)
{
ahours++;
}
lcd.setCursor(6,0);
if(ahours < 10)
{
lcd.print("0");
lcd.print(ahours);
}
else
{
lcd.print(ahours);
}
lcd.print(":");
if (amins < 10)
{
lcd.print("0");
lcd.print(amins);
}
else
{
lcd.print(amins);
}
if(amins > 59)
{
ahours++;
amins = 0;
}
if(ahours > 23)
{
ahours = 0;
}
delay(500);
lcd.clear();
}
if(digitalRead(13) == LOW)
{
lcd.setCursor(5,1);
lcd.print("Set Time");
lcd.setCursor(6,0);
if(digitalRead(11) == LOW)
{
mins++;
}
else if (digitalRead(10) == LOW)
{
hours++;
}
}
activetime = (millis() / 1000) - starttime;
if(prevoustime < (activetime - 59))
{
mins++;
prevoustime = activetime;
}
if(mins > 59)
{
hours++;
mins = 0;
}
if(hours > 23)
{
hours = 0;
}
lcd.setCursor(6,0);
if(hours < 10)
{
lcd.print("0");
lcd.print(hours);
}
else
{
lcd.print(hours);
}
lcd.print(":");
if (mins < 10)
{
lcd.print("0");
lcd.print(mins);
}
else
{
lcd.print(mins);
}
if(ahours >> hours && amins >> mins )
{
digitalWrite(9, HIGH);
digitalWrite(12, LOW);
}
else
{
delay(300);
}
if(ahours << hours && amins << mins )
{
digitalWrite(9, LOW);
digitalWrite(12, HIGH);
}
else
{
delay(300);
}
Serial.println(mins);
Serial.println(hours);
Serial.println("");
Serial.println(amins);
Serial.println(ahours);
Serial.println("");
Serial.println(activetime);
Serial.println(prevoustime);
Serial.println(starttime);
Serial.println("");
}
kan iemand mij hierbij helpen?
er zit iets mis bij het stukje
- Code: Alles selecteren
if(ahours >> hours && amins >> mins )
{
digitalWrite(9, HIGH);
digitalWrite(12, LOW);
}
else
{
delay(300);
}
if(ahours << hours && amins << mins )
{
digitalWrite(9, LOW);
digitalWrite(12, HIGH);
}
else
{
delay(300);
}
Alvast bedankt
Advertisement
Re: 1ste keer hulp nodig met code aub
Nog even enkele achtergrond info.
Kinderen zijn leuk, echter om 06:00 wakker gemaakt worden is toch wel iets minder.
Ik wil hiermee visueel maken dat het nog bedtijd is.
Dus alarmtijd is 07:00. Zolang het nog geen 07:00 is zal blauw led aangestuurd worden. -> dus blijven slapen of zelf gaan spelen op de kamer.
Indien het na 07:00 is gaat groene led aan waarmee duidelijk is dat ze ons wakker mogen maken.
Kinderen zijn leuk, echter om 06:00 wakker gemaakt worden is toch wel iets minder.
Ik wil hiermee visueel maken dat het nog bedtijd is.
Dus alarmtijd is 07:00. Zolang het nog geen 07:00 is zal blauw led aangestuurd worden. -> dus blijven slapen of zelf gaan spelen op de kamer.
Indien het na 07:00 is gaat groene led aan waarmee duidelijk is dat ze ons wakker mogen maken.
Re: 1ste keer hulp nodig met code aub
Het is een leuk project maar er is veel onduidelijk
Weet je nog waar je die code voor een wekker hebt gevonden ? Kun je er een link naar geven ?
Wil je het X-tal van het Arduino board gebruiken om de tijd bij te houden ?
Dat werkt best wel goed, maar op sommige Arduino boards zit een resonator in plaats van een X-tal.
Kun je meer commentaar toevoegen ?
Vooral bovenaan de sketch, een beschrijving wat het is, met een datum.
Dat is voor jezelf ook gemakkelijk als je over een paar jaar je eigen sketch weer eens ziet.
Kun je beschrijven waar welke tekst staat op het LCD display ?
Ik doe dat in de code zelf, bijvoorbeeld zo:
cpp code
Zou je de pin nummers 8,9,10,11,12,13 een naam willen geven ?
Heb je aan pin 8 een knop naar GND ? Heb je aan pin 8 een weerstand naar 5V ?
En de knop op pin 8 indrukken is de alarm tijd goed zetten ?
Dezelfde vragen heb ik voor pin 9. Is die voor de gewone tijd goed zetten ?
Je deelt millis() door 1000. Dat kun je beter niet doen, maar dat zou nog kunnen werken. Het gaat een tijdje goed, maar het moet een keer fout gaan. Ik zie namelijk drie fouten in dat stukje code (het zijn 'signed' integers; millis / 1000 past niet in een integer; met 'previoustime = activetime' wordt het interval vertraagt als er vertraging in de code zit en er zit soms een delay van 300ms in de sketch). Dat het op internet veel wordt overgeschreven, dat betekent nog niet dat het goede code is.
Het eenvoudigste is om millis() altijd met "unsigned long" en altijd in milliseconden te gebruiken.
De BlinkWithoutDelay is de eerste stap om millis() te gebruiken: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
Ken je de 'sprintf' functie ? Die kan met één regel code automatisch een tekst in een bepaald formaat maken met aanvullende nullen en zo.
Vergelijken gaat met '>' en niet met '>>'.
Hier staat het beschreven: https://www.arduino.cc/en/Reference/If
Die dubbele dingen zijn voor 'AND' '&&' en 'OR' '||'.
Ik zou iets aan de sketch willen toevoegen. Zodat bijvoorbeeld eenmalig de lamp anders wordt gezet op een bepaalde tijd.
De compiler die je sketch compileert, die weet de tijd van de computer. Het is mogelijk om die tijd naar je sketch te krijgen. Dan kun je bij het uploaden van een sketch automatisch de tijd goed zetten.
Dan kun je niet alleen de tijd maar ook de datum naar je sketch krijgen, dat maakt het zelfs mogelijk (voor gevorderden) om automatisch om te schakelen tussen winter- en zomertijd.
Ben je bereid om libraries te gaan gebruiken ?
Er is een TimeAlarms library: https://www.pjrc.com/teensy/td_libs_TimeAlarms.html
Die werkt samen met de TimeLib: https://www.pjrc.com/teensy/td_libs_Time.html
Die heeft helaas geen automatische zomer- en wintertijd omzetting.
Ik hoop dat je niet teveel van mijn lange verhaal bent geschrokken. Dit is normaal wanneer ik zulke code zie
Weet je nog waar je die code voor een wekker hebt gevonden ? Kun je er een link naar geven ?
Wil je het X-tal van het Arduino board gebruiken om de tijd bij te houden ?
Dat werkt best wel goed, maar op sommige Arduino boards zit een resonator in plaats van een X-tal.
Kun je meer commentaar toevoegen ?
Vooral bovenaan de sketch, een beschrijving wat het is, met een datum.
Dat is voor jezelf ook gemakkelijk als je over een paar jaar je eigen sketch weer eens ziet.
Kun je beschrijven waar welke tekst staat op het LCD display ?
Ik doe dat in de code zelf, bijvoorbeeld zo:
cpp code
// 0123456789012345
// ----------------
// 12:48
// 7 januari
Zou je de pin nummers 8,9,10,11,12,13 een naam willen geven ?
- Code: Alles selecteren
const int alarmButtonPin = 8;
const int timeButtonPin = 9;
...
Heb je aan pin 8 een knop naar GND ? Heb je aan pin 8 een weerstand naar 5V ?
En de knop op pin 8 indrukken is de alarm tijd goed zetten ?
Dezelfde vragen heb ik voor pin 9. Is die voor de gewone tijd goed zetten ?
Je deelt millis() door 1000. Dat kun je beter niet doen, maar dat zou nog kunnen werken. Het gaat een tijdje goed, maar het moet een keer fout gaan. Ik zie namelijk drie fouten in dat stukje code (het zijn 'signed' integers; millis / 1000 past niet in een integer; met 'previoustime = activetime' wordt het interval vertraagt als er vertraging in de code zit en er zit soms een delay van 300ms in de sketch). Dat het op internet veel wordt overgeschreven, dat betekent nog niet dat het goede code is.
Het eenvoudigste is om millis() altijd met "unsigned long" en altijd in milliseconden te gebruiken.
De BlinkWithoutDelay is de eerste stap om millis() te gebruiken: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
Ken je de 'sprintf' functie ? Die kan met één regel code automatisch een tekst in een bepaald formaat maken met aanvullende nullen en zo.
Vergelijken gaat met '>' en niet met '>>'.
Hier staat het beschreven: https://www.arduino.cc/en/Reference/If
Die dubbele dingen zijn voor 'AND' '&&' en 'OR' '||'.
Ik zou iets aan de sketch willen toevoegen. Zodat bijvoorbeeld eenmalig de lamp anders wordt gezet op een bepaalde tijd.
De compiler die je sketch compileert, die weet de tijd van de computer. Het is mogelijk om die tijd naar je sketch te krijgen. Dan kun je bij het uploaden van een sketch automatisch de tijd goed zetten.
Dan kun je niet alleen de tijd maar ook de datum naar je sketch krijgen, dat maakt het zelfs mogelijk (voor gevorderden) om automatisch om te schakelen tussen winter- en zomertijd.
Ben je bereid om libraries te gaan gebruiken ?
Er is een TimeAlarms library: https://www.pjrc.com/teensy/td_libs_TimeAlarms.html
Die werkt samen met de TimeLib: https://www.pjrc.com/teensy/td_libs_Time.html
Die heeft helaas geen automatische zomer- en wintertijd omzetting.
Ik hoop dat je niet teveel van mijn lange verhaal bent geschrokken. Dit is normaal wanneer ik zulke code zie
Re: 1ste keer hulp nodig met code aub
http://fritzing.org/projects/arduino-lcd-alarm-clock
Deze site heb ik als basis gebruikt. Hier word gebruik gemaakt van 4 push buttons. TIME, ALARM, HOURS EN MINS.
Dmv pushbutten kan tijd en alarm ingesteld worden. Daar ik geen rtc heb leek dit me een mooie oplossing.
Voordeel is dat ik tijd opnieuw kan instellen na een spanningsuitval.
Ivm vakantie kan ik momenteel niet bij arduino (uno).
Voordeel is wel dat ik me nog wat kan verdiepen in andere manieren van tijd berekenen.
2de voordeel is als ik alarm tijd aanpas ik hiermee dus direct het gedrag van de leds aanpas zonder dat ik code hoef aan te passen omdat dit niet in code is aangebracht. (Bv. Weekend langer slapen).
Iig alvast bedankt voor het meedenken en ga me zeker verdiepen in bovenstaande link.
Remco
Deze site heb ik als basis gebruikt. Hier word gebruik gemaakt van 4 push buttons. TIME, ALARM, HOURS EN MINS.
Dmv pushbutten kan tijd en alarm ingesteld worden. Daar ik geen rtc heb leek dit me een mooie oplossing.
Voordeel is dat ik tijd opnieuw kan instellen na een spanningsuitval.
Ivm vakantie kan ik momenteel niet bij arduino (uno).
Voordeel is wel dat ik me nog wat kan verdiepen in andere manieren van tijd berekenen.
2de voordeel is als ik alarm tijd aanpas ik hiermee dus direct het gedrag van de leds aanpas zonder dat ik code hoef aan te passen omdat dit niet in code is aangebracht. (Bv. Weekend langer slapen).
Iig alvast bedankt voor het meedenken en ga me zeker verdiepen in bovenstaande link.
Remco
Re: 1ste keer hulp nodig met code aub
Met alleen de uren en minuten blijft de code heel eenvoudig, de datum toevoegen maakt het ingewikkelder, maar met zo'n library ben je meteen van die rare code met millis() af.
Ik zit maar te staren naar dat millis()/1000. Ik zie dat echt niet werken en ik krijg er jeuk van. Als je daar een gewone millis timer van maakt en laat zien, dan helpen we je natuurlijk verder.
Dus jij hebt in je vakantie geen Arduino board bij je
Ik zit maar te staren naar dat millis()/1000. Ik zie dat echt niet werken en ik krijg er jeuk van. Als je daar een gewone millis timer van maakt en laat zien, dan helpen we je natuurlijk verder.
Dus jij hebt in je vakantie geen Arduino board bij je
Re: 1ste keer hulp nodig met code aub
Heb de leds redelijk perfect werkend.
had in eerste versie nog een issue omdat groene led tot 00:00 aan bleven.
Dit ondervangen door een of functie erbij waarbij deze om 19:00 omgaan naar rood.
onderstaand de code tot dusver.
zoals al van te voren aangegeven door jullie loopt tijd wonderbaarlijk in de ochtend 1 uur voor. (had juist verwacht dat deze achter ging lopen.)
Ik ben vanavond aan het stoeien geweest met de millis als unsigned long.
ik krijg dit echter niet in mijn code verwerkt.
als iemand hier nog tips over heeft dan graag.......(datum hoeft niet weergegeven te worden)
onderstaand de aangepaste code. straks misschien even een filmpje maken ervan.
had in eerste versie nog een issue omdat groene led tot 00:00 aan bleven.
Dit ondervangen door een of functie erbij waarbij deze om 19:00 omgaan naar rood.
onderstaand de code tot dusver.
zoals al van te voren aangegeven door jullie loopt tijd wonderbaarlijk in de ochtend 1 uur voor. (had juist verwacht dat deze achter ging lopen.)
Ik ben vanavond aan het stoeien geweest met de millis als unsigned long.
ik krijg dit echter niet in mijn code verwerkt.
als iemand hier nog tips over heeft dan graag.......(datum hoeft niet weergegeven te worden)
onderstaand de aangepaste code. straks misschien even een filmpje maken ervan.
- Code: Alles selecteren
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int starttime;
int activetime;
int prevoustime = 0;
int hours = 0;
int mins = 0;
int ahours = 0;
int amins = 0;
void setup()
{
lcd.begin(16, 2);
lcd.clear();
Serial.begin(9600);
pinMode(13, INPUT); //tijd button
digitalWrite(13, HIGH);
pinMode(11, INPUT); //minuten button
digitalWrite(11, HIGH);
pinMode(10, INPUT); // uren button
digitalWrite(10, HIGH);
pinMode(8, INPUT); // alarm button
digitalWrite(8, HIGH);
pinMode(9, OUTPUT); //rode leds
pinMode(12, OUTPUT); //groene leds
pinMode(A1, OUTPUT); // oranje leds
starttime = millis()/1000;
}
void loop()
{
while(digitalRead(8) == LOW) //alarm tijd instellen
{
lcd.setCursor(6,1);
lcd.print("Alarm");
lcd.setCursor(6,0);
if(digitalRead(11) == LOW) // minuten van alarm klok instellen
{
amins++;
}
else if (digitalRead(10) == LOW) // uren van alarm klok instellen
{
ahours++;
}
lcd.setCursor(6,0);
if(ahours < 10)
{
lcd.print("0");
lcd.print(ahours);
}
else
{
lcd.print(ahours);
}
lcd.print(":");
if (amins < 10)
{
lcd.print("0");
lcd.print(amins);
}
else
{
lcd.print(amins);
}
if(amins > 59) // min 60 terug zetten nar 0 en 1 uur erbij tellen
{
ahours++;
amins = 0;
}
if(ahours > 23) // uur 24 terug naar 00:00 zetten
{
ahours = 0;
}
delay(500);
lcd.clear();
}
if(digitalRead(13) == LOW) // tijd instellen
{
lcd.setCursor(5,1);
lcd.print("Set Time");
lcd.setCursor(6,0);
if(digitalRead(11) == LOW) // minuten van tijd instellen
{
mins++;
}
else if (digitalRead(10) == LOW) // uren van tijd instellen
{
hours++;
}
}
activetime = (millis() / 1000) - starttime;
if(prevoustime < (activetime - 59))
{
mins++;
prevoustime = activetime;
}
if(mins > 59) // min van tijd naar 0 ipv 60
{
hours++; // 1 uur erbij tellen
mins = 0; // minuten terug naar 0 zetten
}
if(hours > 23) // uren van 24 naar 0 terug zetten
{
hours = 0;
}
lcd.setCursor(6,0);
if(hours < 10)
{
lcd.print("0");
lcd.print(hours);
}
else
{
lcd.print(hours);
}
lcd.print(":");
if (mins < 10)
{
lcd.print("0");
lcd.print(mins);
}
else
{
lcd.print(mins);
}
if((ahours > hours) || hours >= 19 ) // als het te vroeg is om op te staan of het is na 19:00 DAN RODE LEDS BRANDEN.
{
digitalWrite(9, HIGH); //RODE LEDS AAN
digitalWrite(12, LOW); //GROENE LEDS UIT
digitalWrite(A1, LOW); // ORANJE LEDS UIT
delay(100);
}
else // ALS HET TIJD IS OM OP TE STAAN
{
digitalWrite(9, LOW); //RODE LEDS UIT
digitalWrite(12, HIGH); //GROENE LEDS AAN
digitalWrite(A1, LOW); // ORANJE LEDS UIT
delay(100);
}
if (ahours == hours && amins > mins) // ALS DE WERKELIJKE UREN OVEREEN KOMEN MAAR DE MINUTEN NOG NIET DAN IS HET BIJNA TIJD OM OP TE STAAN
{
digitalWrite(9, LOW); // RODE LEDS UIT
digitalWrite(12, LOW); //GROENE LEDS UIT
digitalWrite(A1, HIGH); // ORANJE LEDS AAN
delay(100);
}
lcd.clear();
Serial.println(mins);
Serial.println(hours);
Serial.println("");
Serial.println(amins);
Serial.println(ahours);
Serial.println("");
Serial.println(activetime);
Serial.println(prevoustime);
Serial.println(starttime);
Serial.println("");
}
Re: 1ste keer hulp nodig met code aub
Wanneer je een gewone millis() hebt, en de interval optelt bij previousMillis, dan loopt het met de nauwkeurigheid van het X-tal van het Arduino board. Dat gaat altijd goed, het raakt nooit uit de pas.
Je kunt je oude sketch bewaren of een andere naam geven. Daarna kun je eens het onderstaande proberen:
cpp code
Begrijp je de bedoeling ? Twee globale variabelen erbij. In de loop() en los van de rest de millis() gebruiken op een goede manier. En ik kon het niet laten om de 'mins' en 'hours' op een andere manier te doen.
Als je wilt weten wat je eigen code doet die je zelf geschreven hebt... verbeter dan de layout van de tekst: doe het inspringen, de haakjes, de spaties altijd op een consequente en nette manier.
Je kunt je oude sketch bewaren of een andere naam geven. Daarna kun je eens het onderstaande proberen:
cpp code
//
unsigned long previousMillis;
unsigned long interval = 60000UL; // 1 minute, UL means Unsigned Long
void setup()
{
...
// set previousMillis at the end of setup()
previousMillis = millis();
}
void loop()
{
...
unsigned long currentMillis = millis();
if( currentMillis - previousMillis >= interval)
{
previousMillis += interval; // keep exactly in pace with time, add interval
mins++;
if( mins > 59)
{
mins = 0;
hours++;
if( hours > 23)
{
hours = 0;
}
}
}
...
}
Begrijp je de bedoeling ? Twee globale variabelen erbij. In de loop() en los van de rest de millis() gebruiken op een goede manier. En ik kon het niet laten om de 'mins' en 'hours' op een andere manier te doen.
Als je wilt weten wat je eigen code doet die je zelf geschreven hebt... verbeter dan de layout van de tekst: doe het inspringen, de haakjes, de spaties altijd op een consequente en nette manier.
Re: 1ste keer hulp nodig met code aub
Ga morgen even alles overtypen ipv kopiëren.
Mogelijk een spatie ofzo of een haakje teveel
Mogelijk een spatie ofzo of een haakje teveel
12 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 47 gasten