#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
void setup()
{
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
setSyncProvider(RTC.get); // the function to get the time from the RTC
pinMode(11, OUTPUT); //Defniert den dimmbaren Ausgang
digitalWrite(11,LOW);
}
void loop()
{
tmElements_t tm; //Dient als Variable
if(RTC.read(tm)) //Liest immer die aktuelle Zeit aus
{
delay(750);
Serial.println(RTC.get());
Serial.print(tm.Hour);
Serial.print(":");
Serial.print(tm.Minute);
Serial.print(":");
Serial.println(tm.Second);
if(tm.Hour == 8 && tm.Minute == 45) /*Immer wenn if( ... == Zeit && ... == Zeit) angegeben ist könnt ihr eure eigene Wunschzeit festlegen, dafür üsst ihr nur die Zahlen ändern.*/
{
dimmHochMorgens(); //Sorgt fuer ein er helles Becken um 9:15 Uhr
}
if(tm.Hour == 11 && tm.Minute == 45)
{
dimmRunterMittags(); //Und um 12 ist Mittagsruhe
}
if(tm.Hour == 14 && tm.Minute == 0)
{
dimmHochMittags(); //und um 14:15 Uhr ist es wieder hell
}
if(tm.Hour == 22 && tm.Minute == 0)
{
dimmRunterAbends(); //Somit ist es um 11 dunkel
}
}
}
void dimmHochMorgens()
{
for(int i=255;i>=0;i--)
{
analogWrite(11,i); //Schreibt den aktuellen Wert auf den Ausgang
Serial.print("Ich dimme Hoch morgens");
delay(7000); /*Regelt die Schleifendauer, hierdurch bestimmt ihr wie lange es dauert bis fertig gedimmt ist. Die Zeit wird dabei in millisek angegeben. Dieser Dimmvorgang dauert somit 255*7 Sekunden. Hier könnt ihr eure eigene Wunschdauer reinschreiben, das könnt ihr bei allen delay(..) machen*/
}
}
void dimmRunterAbends()
{
for(int i=0;i<=255;i++)
{
analogWrite(11,i);
Serial.print("Ich dimme Runter abends");
delay(14000);
}
}
void dimmRunterMittags()
{
for(int i=0;i<=255;i++)
{
analogWrite(11,i);
Serial.print("Ich dimme Hoch mittags");
delay(3500);
}
}
void dimmHochMittags()
{
for(int i=255;i>=0;i--)
{
analogWrite(11,i);
Serial.print("Ich dimme Runter mittags");
delay(3500);
}
}
Hallo,
ich sage es einmal einfach:
alles was Du über Serial.print ausgibst, das läßt sich auch auf einem
Display darstellen.
Deine Dimmstufe sollte "analogWrite(11,i);" sein?
der Wert der "Dimmung" ist also "i"
Ich würde aus dem "i" für die Zeiten:
Morgens = mo
Mittags = mi
Abends = ab
machen. analogWrite(11,mo);
Dann hast Du einen eindeutigen Wert.
Wenn Du das in "%" haben möchtest, dann nutze die "map" Funktion. http://arduino.cc/de/pmwiki.php?n=Reference/Map
Gruß und Spaß
Andreas
Gibt es irgendwie eine Möglichkeit diese ganzen Funktionen (und evtl weiter folgende) in einen Sketch zu packen?
Habe leider nichts genaues gefunden wie das funktionieren soll
PS: Wenn ich die RTC einmal eingestellt habe muss ich den Sketch ja neu aufspielen (in meinem Fall den o.g) ist das richtig?
Geht der RTC nicht dann die Uhrzeit/Datum verloren?
Bin leider noch zu neu auf dem Gebiet daher die vielen Fragen
Hallo,
Du hast doch schon etwas geschafft. Wie erwähnt, die Uhr läuft weiter.
Zum Display- besorge Dir gleich ein 4x20, das ist komfortabler.
Wie man so etwas anschließt steht hier:
Deinen Sketch kannst Du so weiter verwenden, tausche einfach das "Serial.print"
aus, (bei der Gelegenheit gewöhne Dir gleich "delay()" ab) dann schaust Du mal weiter.
Das, was Du da vor hast ist noch nicht schwer, das schaffst Du.
Gruß und Spaß dabei
Andreas
P.S.
Falls Du MICH nach einem Display fragst, ich nutze dieses:
Warum gleich ein 20x4? Finde die 16x2 persönlich viel besser. Vorteil ist, der Rahmen trägt deutlich weniger auf. Des weiteren sind diese deutlich günstiger zu bekommen. Des weiteren, gab es bei den 20x4 nicht das Problem, dass die Zeilenanordnung wie folgt ist
Zeile 1
Zeile 3
Zeile 2
Zeile 4
Ich habe hier noch 2 Stk 20x4 hier rumliegen. EInes wurde mit einem Verarbeitungsfehler in der Displayscheibe geliefert. Von den 16x2 hab ich mir vor einem Monat mal eine größere Charge geholt. 10 Stk für 12€ inkl. Versand. Jedoch ohne I2C Adapter. Diesen brauch ich idR auch nicht. Display ist immer in der Nähe von Attiny/Atmega. Wenn es aber etwas kompatker sein soll, zB wenn das Board ~20-30cm entfernt ist, dann kannste auch I2C Adapter problemlos einsetzen. Sind 16x2 und 20x4 kompatibel. Wird von der LiquidCrystal_I2C unterstützt.
SkobyMobil:
Hallo,
was meinst Du mit Zeilenanordnung, die ist bei mir:
0,0
0,1
0,2
0,3
Spalte:
0,0 bis 19,0
Gruß und Spaß
Andreas
Ja, ich mein, dass es früher so war, dass die Zeilen nicht untereinander sich befanden. So dass der Versatz reinkommt. Oder aber es kam bei bestimmten Steuerbefehlen, bei denen man in die nächste Zeile springt. print(\n), weiß aber gerade nicht, ob das überhaupt ging, oder ob da nur ein kryptisches Steuerzeichen rauskam. Habe gerade keines verdrahtet, sonst würd ich es schnell testen.
Der Teil was von mir im loop steht, muss auch ins loop rein. Die anderen beiden Funktionen ganz an das Ende des Sketches. LCD wird nirgends initialisiert.
Einmal muss ich leider noch nerven mein Problem ist das morgen die Dimmung fürs Aquarium laufen muss da die Fische einziehen daher diese Eile mich damit nicht so ausführlich zu beschäftigen
Besorge mir aber noch einen zweiten Ardu um mit diesem dann üben zu können 8)
Ich würde euch bitten nochmal hier einen Blick drüber zu werfen u ggf. mir freundlicherweise den Sketch zu korregieren
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>
void setup()
{
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
setSyncProvider(RTC.get); // the function to get the time from the RTC
pinMode(11, OUTPUT); //Defniert den dimmbaren Ausgang
digitalWrite(11,LOW);
}
void loop()
{
tmElements_t tm; //Dient als Variable
if(RTC.read(tm)) //Liest immer die aktuelle Zeit aus
{
delay(750);
Serial.println(RTC.get());
Serial.print(tm.Hour);
Serial.print(":");
Serial.print(tm.Minute);
Serial.print(":");
Serial.println(tm.Second);
if(tm.Hour == 8 && tm.Minute == 45) /*Immer wenn if( ... == Zeit && ... == Zeit) angegeben ist könnt ihr eure eigene Wunschzeit festlegen, dafür üsst ihr nur die Zahlen ändern.*/
{
dimmHochMorgens(); //Sorgt fuer ein er helles Becken um 9:15 Uhr
}
if(tm.Hour == 11 && tm.Minute == 45)
{
dimmRunterMittags(); //Und um 12 ist Mittagsruhe
}
if(tm.Hour == 14 && tm.Minute == 0)
{
dimmHochMittags(); //und um 14:15 Uhr ist es wieder hell
}
if(tm.Hour == 22 && tm.Minute == 0)
{
dimmRunterAbends(); //Somit ist es um 11 dunkel
}
{
static unsigned int lastSecond;
if(lastSecond != second()
{
lastSecond = second();
lcd.setCursor(0,0);
lcd.print("ZEIT: ");
lcd.print(hour());
lcd.print(":");
lcd.print(minute());
lcd.print(":");
lcd.print(second());
lcd.setCursor(0,1);
lcd.print("DIM ");
if(hour() >= 6 && hour() < 12) lcd.print("morgens");
else if(hour() >= 12 && hour() <18) lcd.print("mittags");
else if(hour() >= 18 && hour() <24) lcd.print("abends ");
else lcd.print("#######");
lcd.print(print3digits(map(dim, 0, 255, 0, 100)));
}
}
void dimmHochMorgens()
{
for(int i=255;i>=0;i--)
{
analogWrite(11,i); //Schreibt den aktuellen Wert auf den Ausgang
Serial.print("Ich dimme Hoch morgens");
delay(7000); /*Regelt die Schleifendauer, hierdurch bestimmt ihr wie lange es dauert bis fertig gedimmt ist. Die Zeit wird dabei in millisek angegeben. Dieser Dimmvorgang dauert somit 255*7 Sekunden. Hier könnt ihr eure eigene Wunschdauer reinschreiben, das könnt ihr bei allen delay(..) machen*/
}
}
void dimmRunterAbends()
{
for(int i=0;i<=255;i++)
{
analogWrite(11,i);
Serial.print("Ich dimme Runter abends");
delay(14000);
}
}
void dimmRunterMittags()
{
for(int i=0;i<=255;i++)
{
analogWrite(11,i);
Serial.print("Ich dimme Hoch mittags");
delay(3500);
}
}
void dimmHochMittags()
{
for(int i=255;i>=0;i--)
{
analogWrite(11,i);
Serial.print("Ich dimme Runter mittags");
delay(3500);
}
}
void print3digits(int i)
{
if(i < 100) lcd.print(" ");
if(i < 10) lcd.print(" ");
lcd.print(i);
}
void print2digits(int i)
{
if(i < 10) lcd.print(" ");
lcd.print(i);
}
}
Erhalte folgende Fehler:
sketch_jul25a.ino: In function 'void loop()':
sketch_jul25a:56: error: expected )' before '{' token sketch_jul25a:73: error: expected primary-expression before '}' token sketch_jul25a:73: error: expected ;' before '}' token
sketch_jul25a:77: error: a function-definition is not allowed here before '{' token
sketch_jul25a:127: error: expected }' at end of input sketch_jul25a:127: error: expected }' at end of input
Ich bitte um euer Verständnis das ich den Ardu schon morgen fertig einsetzen muss, werde mich aber nachdem alles im Becken eingefahren ist in Ruhe mit einem zweiten Ardu für weitere Projekte auseinandersetzen.