Hallo an alle,
vorweg möchte ich sagen dass ich was den Arduino angeht ein absoluter Anfänger bin Nachdem ich erst ein wenig mit meinem UNO rumexperimentiert habe, wollte ich nun mein erstes Programm schreiben.
Das Programm sollte z.B. Um 8.00 Uhr eine LED Lampe langsam hochdimmen (so über ne halbe stunde) und um 18Uhr wieder langsam runter. Nachdem ich durch jede Menge googeln den Arduino dazu bekommen habe die Uhrzeit (DS1307) auf meinem LCD anzuzeigen, stellt sich jetzt das Problem, dass ich nicht weiß wie ich beim Dimmen die delay Funktion umgehe weil dann ja sonst meine Uhr während des Dimmens stehen bleibt.
Das zweite ist dass ich nicht weiß wie ich den dann hochgedimmten ausgang dann angeschalten lasse obwohl er ja jede sekunde den loop wiederholt und die Zeit abruft.
Wenn mir jemand helfen kann, freue ich mich
Grüße Bruzzzler
#include "LCD4Bit_mod.h"
#include "Wire.h"
int ledPin = 3; // LED Pin setzen
#define DS1307_I2C_ADDRESS 0x68 // I2C Adresse
char buffer[20] = ""; // Speicherbereich für Datenkonvertierung
LCD4Bit_mod lcd = LCD4Bit_mod(2); // LCD-Display
/****************************************************************************************************
* Konvertierung BCD-kodierter Dezimalzahl
*/
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
/****************************************************************************************************
* Zeit und Datum aus DS1307 auslesen und konvertieren
*/
void getDateDs1307(int date[])
{
Wire.beginTransmission(DS1307_I2C_ADDRESS); // I2C-Kommunikation im Schreibmodus starten
Wire.write(0x00); // Registerzeiger auf 0 setzen
Wire.endTransmission(); // I2C-Kommunikation beenden
Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // I2C-Kommunikation im Lesemodus starten
date[ 0 ] = bcdToDec(Wire.read() & 0x7f); // Sekunden
date[ 1 ] = bcdToDec(Wire.read()); // Minuten
date[ 2 ] = bcdToDec(Wire.read() & 0x3f); // Stunden
date[ 3 ] = bcdToDec(Wire.read()); // Wochentag
date[ 4 ] = bcdToDec(Wire.read()); // Tag
date[ 5 ] = bcdToDec(Wire.read()); // Monat
date[ 6 ] = bcdToDec(Wire.read()); // Jahr
}
/****************************************************************************************************
*/
void setup() {
Wire.begin(); // I2C-Bus einrichten
lcd.init(); // LCD-Anzeige initialisieren
lcd.clear();
lcd.printIn( "DS1307 - Uhr" );
}
/****************************************************************************************************
*/
void loop() {
int datum[ 7 ];
getDateDs1307( datum ); // Datum und Uhrzeit aus DS1307 holen
lcd.cursorTo(2, 0); // Datum und Uhrzeit in 2. Zeile schreiben
if( datum[ 4 ] < 10 )
lcd.printIn( "0" );
lcd.printIn( itoa( datum[ 4 ], buffer, 10 ) );
lcd.printIn( "." );
if( datum[ 5 ] < 10 )
lcd.printIn( "0" );
lcd.printIn( itoa( datum[ 5 ], buffer, 10 ) );
lcd.printIn( "." );
/*
if( datum[ 6 ] < 10 )
lcd.printIn( "0" );
lcd.printIn( itoa( datum[ 6 ], buffer, 10 ) );
*/
lcd.printIn( " " );
if( datum[ 2 ] < 10 )
lcd.printIn( "0" );
lcd.printIn( itoa( datum[ 2 ], buffer, 10 ) );
lcd.printIn( ":" );
if( datum[ 1 ] < 10 )
lcd.printIn( "0" );
lcd.printIn( itoa( datum[ 1 ], buffer, 10 ) );
lcd.printIn( ":" );
if( datum[ 0 ] < 10 )
lcd.printIn( "0" );
lcd.printIn( itoa( datum[ 0 ], buffer, 10 ) );
lcd.printIn( " " );
/****************************************************************************************************
Tageslichtsteuerung
*/
//Morgens
if ( datum[ 2 ] >= 10 ) // Stunde
if ( datum[ 1 ] >= 2 ) // Minute
if ( ledPin <1){
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(3, fadeValue);
delay(30);
}
}
{
delay(1000); // grobes Sekundenraster für Anzeige
}
}