/*----------------------------------------------------------------------------------------------------------------------------------/ *--------------------------------------------* * * * B I B L I O T H E K E N * * * *-----------------------------------------------/ *---------------------------------------------------------------------------------------------------------------------------------*/ #include #include "RTClib.h" /*----------------------------------------------------------------------------------------------------------------------------------/ *--------------------------------------------------* * * * G L O B A L * * * *-----------------------------------------------------/ *---------------------------------------------------------------------------------------------------------------------------------*/ //Variable für Real Time Clock RTC_DS1307 rtc; //Sensor ID const char *sID = "1"; //Sensor Bestätigungs String const char *OK; //Sting für Kommandos char *CMD; //String für den Zeitstempel char *dateANDtime; //Batteriestatus char *battStat; //Wert der auf 0 gesetzt wird, wenn der Sensor angemeldet ist int sensorAnmelden = 1; /*----------------------------------------------------------------------------------------------------------------------------------/ *---------------------------------------------------* * * * S E T U P * * * *------------------------------------------------------/ *---------------------------------------------------------------------------------------------------------------------------------*/ void setup() { /*----------------------------------------------------------------------------------------* *---Alles inizialisieren was der Senor bzw. das Protokoll benötigt-----------------------* *---In diesem Fall alles für den DHT22 und der Real Time Clock---------------------------* *----------------------------------------------------------------------------------------*/ Serial.begin(9600); //Sensor Wire.begin(); //RealTimeClock rtc.begin(); if (! rtc.isrunning()) { Serial.println("RTC is NOT running!"); // following line sets the RTC to the date & time this sketch was compiled rtc.adjust(DateTime(__DATE__, __TIME__)); } } /*----------------------------------------------------------------------------------------------------------------------------------/ *----------------------------------------------------* * * * L O O P * * * *-------------------------------------------------------/ *---------------------------------------------------------------------------------------------------------------------------------*/ void loop() { delay(1000); //im fertigen Zustand auf 10 reduzieren /*----------------------------------------------------------------------------------------* *---Hier stratet die eigentlich Routine, mit dem Senden der Nutzdaten, bzw. sende der----* *---angeforderten Nutzdaten--------------------------------------------------------------* *----------------------------------------------------------------------------------------*/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/ *!!!!!!!hier (nach diesem Kommentar) gehört noch die Funktion zum auslesen des Kommandos (CMD) her!!!!/ *!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ Serial.println("Test1"); Serial.println(CMD); CMD = "SMS"; //1.4.2 Raspberry Response if(CMD == "RES") { //dann Arduino schlafen legen } Serial.println("Test2"); Serial.println(CMD); //1.4.3 Messdaten senden if(CMD == "SMS") { //Senden der Temperatur dateANDtime = (char*)malloc(19); getDATEandTIME(dateANDtime); SendMeasurement(Temperatur(), "TMP", sID, dateANDtime); Serial.println("Temperatur"); free(dateANDtime); //Senden der Lüftfeuchte dateANDtime = (char*)malloc(19); getDATEandTIME(dateANDtime); SendMeasurement(Feuchte(), "HUM", sID, dateANDtime); Serial.println("Feuchte"); free(dateANDtime); //Senden der Windgeschwindigkeit dateANDtime = (char*)malloc(19); getDATEandTIME(dateANDtime); SendMeasurement(Windgeschw(), "WDG", sID, dateANDtime); Serial.println("Wind"); free(dateANDtime); //Senden der Daemmerung dateANDtime = (char*)malloc(19); getDATEandTIME(dateANDtime); SendMeasurement(Daemmerung(), "DAM", sID, dateANDtime); Serial.println("Dämmerung"); free(dateANDtime); //Senden der HelligkeitW dateANDtime = (char*)malloc(19); getDATEandTIME(dateANDtime); SendMeasurement(HelligkeitW(), "LUX", sID, dateANDtime); Serial.println("Helligkeit"); free(dateANDtime); //Senden der HelligkeitO /*dateANDtime = (char*)malloc(19); getDATEandTIME(dateANDtime); SendMeasurement(HelligkeitO(), "LUX", sID, dateANDtime); free(dateANDtime); //Senden der HelligkeitS dateANDtime = (char*)malloc(19); getDATEandTIME(dateANDtime); SendMeasurement(HelligkeitS(), "LUX", sID, dateANDtime); free(dateANDtime);*/ //Senden der Niederschlag dateANDtime = (char*)malloc(19); getDATEandTIME(dateANDtime); SendMeasurement(Niederschlag(), "NID", sID, dateANDtime); Serial.println("Niederschlag"); free(dateANDtime); free(CMD); } delay(100); } /*----------------------------------------------------------------------------------------------------------------------------------/ *----------------------------------------------* * * * F U N K T I O N E N * * * *-------------------------------------------------/ *---------------------------------------------------------------------------------------------------------------------------------*/ /**------------------------------------------------------------------------------------------------------------ * @Funktion * float Niederschlag * * @toDo * diese Funktion liest den niederschlag aus *------------------------------------------------------------------------------------------------------------*/ float Niederschlag() { //Imput am Pin A2 einlesen int sensorValueA2 = analogRead(A2); //Den Analogen Wert (welcher von 0 - 1023 reicht) in eine Spanung (0 - 5V) umrechnen float Niederschlag = sensorValueA2 * (5.0 / 1023.0); if (sensorValueA2 == 5) { //Serial.print(Niederschlag); //Serial.println("0"); return 0; } else { //Serial.print(Niederschlag); //Serial.println("1"); return 1; } delay(1); } /**------------------------------------------------------------------------------------------------------------ * @Funktion * float HelligkeitW * * @toDo * diese Funktion liest die helligkeit aus *------------------------------------------------------------------------------------------------------------*/ float HelligkeitW() { //Imput am Pin A7 einlesen int sensorValueA7 = analogRead(A7); //Den Analogen Wert (welcher von 0 - 1023 reicht) in eine Spanung (0 - 10V) umrechnen float HelligkeitW = sensorValueA7 * (10.0 / 1023.0)*10; //Serial.print(Helligkeit); //Serial.println("Lux"); return HelligkeitW; delay(1); } /**------------------------------------------------------------------------------------------------------------ * @Funktion * float HelligkeitO * * @toDo * diese Funktion liest die helligkeit aus *------------------------------------------------------------------------------------------------------------*/ /*float HelligkeitO() { //Imput am Pin A9 einlesen int sensorValueA9 = analogRead(A9); //Den Analogen Wert (welcher von 0 - 1023 reicht) in eine Spanung (0 - 5V) umrechnen float HelligkeitO = sensorValueA9 * (100000.0 / 1023.0); //Serial.print(Helligkeit); //Serial.println("Lux"); return HelligkeitO; }*/ /**------------------------------------------------------------------------------------------------------------ * @Funktion * float HelligkeitS * * @toDo * diese Funktion liest die helligkeit aus *------------------------------------------------------------------------------------------------------------*/ /*float HelligkeitS() { //Imput am Pin A10 einlesen int sensorValueA10 = analogRead(A10); //Den Analogen Wert (welcher von 0 - 1023 reicht) in eine Spanung (0 - 5V) umrechnen float HelligkeitS = sensorValueA10 * (100000.0 / 1023.0); //Serial.print(Helligkeit); //Serial.println("Lux"); return HelligkeitS; }*/ /**------------------------------------------------------------------------------------------------------------ * @Funktion * float Daemmerung * * @toDo * diese Funktion liest den Daemmerungswert aus *------------------------------------------------------------------------------------------------------------*/ float Daemmerung() { //Imput am Pin A4 einlesen int sensorValue04 = analogRead(A4); //Den Analogen Wert (welcher von 0 - 1023 reicht) in eine Spanung (0 - 5V) umrechnen float Daemmerung = sensorValue04 * (250.0 / 1023); // wegen dem Wertebereich 0--250 //Serial.print(Daemmerung); //Serial.println("Lux"); return Daemmerung; delay(1); } /**------------------------------------------------------------------------------------------------------------ * @Funktion * float Windgeschw * * @toDo * diese Funktion liest die Windgeschw aus *------------------------------------------------------------------------------------------------------------*/ float Windgeschw() { //Imput am Pin A5 einlesen int sensorValue05 = analogRead(A5); //Den Analogen Wert (welcher von 0 - 1023 reicht) in eine Spanung (0 - 10V) umrechnen float Windgeschw = sensorValue05 * (10.0 / 1023.0)*4; //Serial.print(Windgeschw); //Serial.println("m/s"); return Windgeschw; delay(1); } /**------------------------------------------------------------------------------------------------------------ * @Funktion * float Feuchte * * @toDo * diese Funktion liest die Feuchte aus *------------------------------------------------------------------------------------------------------------*/ float Feuchte() { //Imput am Pin A6 einlesen int sensorValue06 = analogRead(A6); //Den Analogen Wert (welcher von 0 - 1023 reicht) in eine Spanung (0 - 10V) umrechnen float Feuchte = sensorValue06 * (10.0 / 1023.0)*10; //Serial.print(Feuchte); //Serial.println("%"); return Feuchte; delay(1); } /**------------------------------------------------------------------------------------------------------------ * @Funktion * float Temperatur * * @toDo * diese Funktion liest die Temperatur aus *------------------------------------------------------------------------------------------------------------*/ float Temperatur() { //Imput am Pin A3 einlesen int sensorValue03 = analogRead(A3); //Den Analogen Wert (welcher von 0 - 1023 reicht) in eine Spanung (0 - 10V) umrechnen float voltage = sensorValue03 * (10.0 / 1023.0); float temperatur = 0; if (voltage == 0) { temperatur = -20; } else { temperatur = voltage * 8 -20; } return temperatur; delay(1); } /**------------------------------------------------------------------------------------------------------------ * @Funktion * void SendMeasurment * * @toDo * diese Funktion erzeugt den zu String mit allen Informationen zum Sensor und gibt diesen dann Zeichenweise weiter zum senden. *------------------------------------------------------------------------------------------------------------*/ void SendMeasurement(float messure, char *unit, const char *sID, char *DandT) { //Messwete dür die Übergabe umrechenen int num = 0; if (messure > 100) { num = messure*10; } else { num = messure*100; } //Größe für den Sendestring size_t mSize = 8+strlen(unit)+strlen(sID)+strlen(DandT); //Speicherplatz char *data = (char*)malloc(mSize); char *temp = (char*)malloc(4); data[0]='\0'; temp[0]='\0'; //integer in char[] wandeln sprintf(temp,"%d ", num); //variante wenn float übertragen werden soll //sprintf(temp, "%d.%d ", num/100, ((num>=0)?(num%100):(-num%100))); malloc muss 5 sein //erstellen des kompletten Sendestrings strcat(data, sID); strcat(data, ";"); strcat(data, DandT); strcat(data, ";"); strcat(data, temp); strcat(data, "="); strcat(data, unit); //Übertragung der Daten an den Xbee bzw. Ausgabe zur Kontrolle for(int i = 0; i