// // gcc -o interrupt interrupt.c -L/usr/local/lib -lwiringPi // #include #include #include #include #include #include #define DATABASE_NAME "test" #define DATABASE_USERNAME "user" #define DATABASE_PASSWORD "password" MYSQL *mysql1; int counter; char* c_time_string; char outTemp[200], inTemp[200], waterTemp[200]; int hour, min, sec, year, month,day; int setup = 0; unsigned long startmillis, stopmillis; int position = 0, startTemp = 0, c; //***************************************** //***************************************** //********** CONNECT TO DATABASE ********** //***************************************** //***************************************** void mysql_connect(void) { //initialize MYSQL object for connections mysql1 = mysql_init(NULL); if (mysql1 == NULL) { fprintf(stderr, "%s\n", mysql_error(mysql1)); return; } //Connect to the database if (mysql_real_connect(mysql1, "localhost", DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_NAME, 0, NULL, 0) == NULL) { fprintf(stderr, "%s\n", mysql_error(mysql1)); } else { printf("Database connection successful.\n"); } } //********************************************** //********************************************** //********** DISCONNECT FROM DATABASE ********** //********************************************** //********************************************** void mysql_disconnect(void) { mysql_close(mysql1); printf("Disconnected from database.\n"); } void mysql_write_something(void) { //vector times; //a vector of alarm times char commandText[200]; sprintf(commandText, "INSERT INTO messwerte (Counter,outsideTemperature,insideTemperature, waterTemperature) VALUES (%i,%s/1000,%s/1000,%s/1000)",counter,2000,2000,2000); sprintf(commandText, "INSERT INTO messwerte (Counter, outsideTemperature, insideTemperature, waterTemperature) VALUES (%i,%s/1000,%s/1000,%s/1000)",counter, outTemp, inTemp, waterTemp); sprintf(commandText, "INSERT INTO messwerte (Date, Counter, outsideTemperature, insideTemperature, waterTemperature) VALUES (%i-%i-%i %i:%i:%i,%i,%s,%s,%s)", year, month, day, hour, min, sec, counter, outTemp, inTemp, waterTemp); if (mysql1 != NULL) { if (mysql_query(mysql1, commandText)) { fprintf(stderr, "%s\n", mysql_error(mysql1)); return; } } } void getTime(){ time_t current_time; //current_time = time(NULL); //c_time_string = ctime(¤t_time); struct tm *tm_struct; current_time = time(NULL); tm_struct = localtime(¤t_time); hour = tm_struct->tm_hour; min = tm_struct->tm_min; sec = tm_struct->tm_sec; year= tm_struct->tm_year+1900; month=tm_struct->tm_mon+1; day=tm_struct->tm_mday; } void getTemp(int sensorNumber){ FILE *sensorFile; switch(sensorNumber){ default: sensorFile = fopen("/sys/bus/w1/devices/28-00000411b3e3/w1_slave","r");break;//outside // case 1: sensorFile = fopen("/sys/bus/w1/devices/28-000003c56e9b/w1_slave","r");break;//room case 2: sensorFile = fopen("/sys/bus/w1/devices/28-0000041185f0/w1_slave","r");break;//water } switch(sensorNumber){ default:position = 0; startTemp = 0; c=fgetc(sensorFile); memset(outTemp,0,sizeof(outTemp)); while(c != EOF) { if((char) c == 't'){startTemp = 1;c = fgetc(sensorFile);c = fgetc(sensorFile);} if(startTemp == 1 && (char) c != '\n') { outTemp[position]=(char) c; position++; } c=fgetc(sensorFile); } break;//outside case 1: position = 0; startTemp = 0; c=fgetc(sensorFile); memset(inTemp,0,sizeof(inTemp)); while(c != EOF) { if((char) c == 't'){startTemp = 1;c = fgetc(sensorFile);c = fgetc(sensorFile);} if(startTemp == 1 && (char) c != '\n') { inTemp[position]=(char) c; position++; } c=fgetc(sensorFile); } break;//inside case 2: position = 0; startTemp = 0; c=fgetc(sensorFile); memset(waterTemp,0,sizeof(waterTemp)); while(c != EOF) { if((char) c == 't'){startTemp = 1;c = fgetc(sensorFile);c = fgetc(sensorFile);} if(startTemp == 1 && (char) c != '\n') { waterTemp[position]=(char) c; position++; } c=fgetc(sensorFile); } break;//water } fclose(sensorFile); } void interrupt_0(void) { digitalWrite(5,1); delay(1500); digitalWrite(5,0); if(digitalRead(3)==1){ getTime(); getTemp(0); getTemp(1); getTemp(2); counter++; //printf("INSERT INTO messwerte (Date, Counter, outsideTemperature, insideTemperature, waterTemperature) VALUES (%i-%i-%i %i:%i:%i,%i,%s,%s,%s)", year, month, day, hour, min, sec, counter, outTemp, inTemp, waterTemp); mysql_connect(); mysql_write_something(); mysql_disconnect(); FILE *dataFile; dataFile = fopen("./dataStfm.txt","a+"); fprintf(dataFile, "%i %i %i %i %i %i %i %s %s %s\n",year, month, day, hour, min, sec, counter, outTemp, inTemp, waterTemp); fclose(dataFile); printf("%i %i %i %i %i %i %i\n",year, month, day, hour, min, sec, counter); } if(digitalRead(3) == 0){ FILE *impulsFile; impulsFile = fopen("./impulslaenge.txt","a+"); fprintf(impulsFile, "%i %i %i %i %i %i\n",year, month, day, hour, min, sec); fclose(impulsFile); printf("Falscher Impuls entdeckt. %i %i %i %i %i %i\n", year, month, day, hour, min, sec); } } main() { setvbuf (stdout, NULL, _IONBF, 0); wiringPiSetup(); pinMode(3, INPUT); // pullUpDnControl(3, PUD_DOWN); pinMode(5,OUTPUT); wiringPiISR (3, INT_EDGE_RISING, interrupt_0) ; for ( ; ; ) { if (setup ==0){ printf("Zaehlerstand eingeben:"); scanf("%d", &counter); setup = 1; } // waitForInterrupt (3, -1); for( ; ;) {}; } }