#include "Wire.h"
#include <SD.h>
#include <SPI.h>
#include <ExtendedADCShield.h>
#include <Ethernet.h>
#define DS3231_I2C_ADDRESS 0x68
//Initializierung des 12 Bit ADC-Shiled (LTC1857)
ExtendedADCShield extendedADCShield(12);
float ch0; //Channel o des ADC-Shield
float ch1; //Channel 1 des ADC-Shield
float ch2; //Channel 2 des ADC-Shield
float ch3; //Channel 3 des ADC-Shield
float ch4; //Channel 4 des ADC-Shield
float ch5; //Channel 5 des ADC-Shield
float ch6; //Channel 6 des ADC-Shield
float ch7; //Channel 7 des ADC-Shield
//Erstellung des Dateinamen
File myFile;
//CS Pin belegung
const int CSE = 4; //CS für das Ethernet und SD Card Modul
const int CSADC = 10; //CS Pin für das ADC Shield
EthernetClient client;
int x = 5000;
void setup()
{
Serial.begin(9600);
pinMode(CSE, OUTPUT); //CS für das Ethernet und SD Card Modul als Ausgang deklarien
pinMode(CSADC, OUTPUT); //CS für das ADC Shield als Ausgang deklarien
digitalWrite(CSE, HIGH); //Ethernet und SD Card Modul wird durch das High signal abgeschaltet
digitalWrite(CSADC, HIGH); //ADC Shield wird durch das High Signal abgeschaltet
SPI.begin();
Wire.begin();
extendedADCShield.analogReadConfigNext(0, SINGLE_ENDED, UNIPOLAR, RANGE10V);
while(!Serial)
{
;
}
//Initialisierung der SD Karte
Serial.print("SD Karte wird initialisiert...");
if (!SD.begin(CSE))
{
Serial.println("Initialisierung fehlgeschlagen");
return;
}
Serial.println("SD Karte erfolgreich geladen");
// DS3231 sek,min,std,wt,tag,mon,jahr(Zeit des DS3231 wird hier eingestellt)
setDS3231time(55, 59, 23, 6, 21, 07, 18);
}
//Messungen des ADC Shield
void loop()
{
if(client.available())
{
char c = client.read();
Serial.print(c);
}
if(!client.connected())
{
Serial.println();
Serial.println("disconnected");
client.stop();
}
digitalWrite(10, LOW); //CS des ADC Shield wird durch das Low signal aktiviert
ch0 = extendedADCShield.analogReadConfigNext(1, SINGLE_ENDED, UNIPOLAR, RANGE10V);
Serial.print(ch0,2);
Serial.print("\t");
ch1 = extendedADCShield.analogReadConfigNext(2, SINGLE_ENDED, UNIPOLAR, RANGE10V);
Serial.print(ch1,2);
Serial.print("\t");
ch2 = extendedADCShield.analogReadConfigNext(3, SINGLE_ENDED, UNIPOLAR, RANGE10V);
Serial.print(ch2,2);
Serial.print("\t");
ch3 = extendedADCShield.analogReadConfigNext(4, SINGLE_ENDED, UNIPOLAR, RANGE10V);
Serial.print(ch3,2);
Serial.print("\t");
ch4 = extendedADCShield.analogReadConfigNext(5, SINGLE_ENDED, UNIPOLAR, RANGE10V);
Serial.print(ch4,2);
Serial.print("\t");
ch5 = extendedADCShield.analogReadConfigNext(6, SINGLE_ENDED, UNIPOLAR, RANGE10V);
Serial.print(ch5,2);
Serial.print("\t");
ch6 = extendedADCShield.analogReadConfigNext(7, SINGLE_ENDED, UNIPOLAR, RANGE10V);
Serial.print(ch6,2);
Serial.print("\t");
ch7 = extendedADCShield.analogReadConfigNext(0, SINGLE_ENDED, UNIPOLAR, RANGE10V);
Serial.print(ch7,2);
Serial.print("\n");
delay(1000);
digitalWrite(10, HIGH); //CS des ADC Shield wird durch das High Signal abgeschaltet
displayTime();
}
//Dezimahl Werte des DS3231 wird in Binaer umgewandelt und an der Ds3231 gesetzt
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0);
Wire.write(decToBcd(second));
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(dayOfWeek));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.endTransmission();
}
//Binaer Wert des DS3231 wird aus der Adresse gelesen
void readDS3231time(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month, byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
//Zeit des DS3231 kann im Seriellen Monitor angezeigt werden
void displayTime()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
Serial.print(hour, DEC); //Stunde in Dezimahl wird ausgegeben
Serial.print(":"); //Zur Trennung der Stunden von Minute wird ein ":" ausgegeben
if (minute<10)
{
Serial.print("0");
}
Serial.print(minute, DEC); //Minute wird in Dezimahl ausgegeben
Serial.print(":"); //Zur Trennung der Minuten von Sekunden wird ein ":" ausgegeben
if (second<10)
{
Serial.print("0");
}
Serial.print(second, DEC); //Sekunden wird in Dezimahl ausgegeben
Serial.print(" ");
Serial.print(dayOfMonth, DEC); //Tag des Monat wird in Dezimahl ausgegeben
Serial.print(".");
Serial.print(month, DEC); //Monat wird in Dezimahl ausgegeben
Serial.print(".");
Serial.print(year, DEC); //Jahr wird in dezimahl ausgegeben
Serial.print(" Wochentag: "); //Die Funktion Wochentag (dayOfWeek) ist nur für den Seriellen Monitor vorgesehen und ist wird nicht auf der SD karte gespeichert
switch(dayOfWeek)
{
case 1:
Serial.println("Montag");
break;
case 2:
Serial.println("Dienstag");
break;
case 3:
Serial.println("Mittwoch");
break;
case 4:
Serial.println("Donnerstag");
break;
case 5:
Serial.println("Freitag");
break;
case 6:
Serial.println("Samstag");
break;
case 7:
Serial.println("Sonntag");
break;
}
digitalWrite(4, LOW); //CS des Ethernet und SD Card Modul wird durch das Low Signal aktiviert
//String Erstellung für die Speicherung der Messdaten und der Zeit mit Datum
String doppel = ":";
String frei = " ";
String Datum = dayOfMonth + doppel + month + doppel + year;
String Zeit = hour + doppel + minute + doppel + second;
String zeile = Zeit + " | " + Datum;
String Spannung = ch0 + frei + ch1 + frei + ch2 + frei + ch3 + frei +ch4 + frei + ch5 + frei +ch6 + frei + ch7;
//Speicherung auf der Messdaten mit der entsprechende Zeit auf die Sd Karte
myFile = SD.open("myFile.txt", FILE_WRITE);
if(myFile)
{
myFile.println(zeile);
myFile.println(Spannung);
myFile.close();
}
else
{
Serial.println("error");
}
digitalWrite(4, HIGH); //CS des Ethernet und SD Card Modul wird durch das High Signal abgeschaltet
}
//Umwandlung von dezimahl in Binaer
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
//Umwandlung von Binaer in Dezimahl
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
hoffe das ist so Richtig bin neu im Forum. Entschuldigung schon von meiner Seite das ich meine Frage zwei mal gestellt habe.