Berckvens Michiel & Basteyns Jonas

Dependencies:   DS1307 TextLCD mbed

main.cpp

Committer:
Michielber
Date:
2014-12-04
Revision:
2:6330f557c82e
Parent:
1:691e8c893065
Child:
3:201eb46eb4ab

File content as of revision 2:6330f557c82e:

#include "mbed.h"
#include "TextLCD.h"
#include "ds1307.h"
#include "EthernetNetIf.h"
//#include "HTTPClient.h"
//#include "NTPClient.h"
#include "HTTPServer.h"
#include "RPCFunction.h"

TextLCD lcd(p21, p22, p23, p24, p27, p28); // rs, e, d4-d7
AnalogIn LM35_1(p19);                                                                   // Analoge ingang voor LM35 toewijzen op welke pin.
AnalogIn LM35_2(p20);                                                                   // Analoge ingang voor LM35 toewijzen op welke pin.
Serial pc(USBTX, USBRX);                                                                //Zorgen dat we een seriele communicatie tussen computer en MBED kunnen opzetten.
DigitalOut LEDJE1  (p6);                                                                // Uitgang voor LED op breadboard.
DigitalOut LEDJE2  (p7);                                                                // Uitgang voor LED op breadboard.
InterruptIn knopHOGER(p8);                                                                // Aanmaken van ingang voor drukknopje voor hogere temp
InterruptIn knopLAGER(p30);                                                               // Aanmaken van ingang voor drukknopje voor lagere temp
DigitalOut myled1(LED1);                                                                // Aanmaken van LED van MBED te gerbuiken voor hogere temp
DigitalOut myled2(LED2);                                                                // Aanmaken van LED van MBED te gerbuiken voor lagere temp
InterruptIn aanuitknop(p5);
DigitalOut relais(p29);
PwmOut motorout(p25);
DS1307 my1307(p9,p10); // start DS1307 class and give it pins for connections of the DS1307 device

LocalFileSystem fs("webfs");        //Instellingen voor HTTP
LocalFileSystem local("local");     //Instellingen voor HTTP, /local/Project.htm gaan we gebruiken

int c=0;
float waarde = 25;
float temp2;
bool aanuit = 0;
float temp1;                                                                            // variable aanmaken voor temp van 1ste LM35 in te steken.                                                                            // variable aanmaken voor temp van 2de LM35 in te steken.
float afronden;
float graden;
float counter;
float flaginstellen = 0;
int sec = 0;
int minuten = 0;
int hours = 0;
int day = 0;
int date = 0;
int month = 0;
int year = 0;
int junk = 0;
 
DigitalOut led1(LED1, "led1");


/* HTTP Instellingen */

EthernetNetIf eth(
    IpAddr(192,168,1,2), //Ip adress toedienen
    IpAddr(255,255,255,0), //Subnetmasker
    IpAddr(192,168,1,1),
    IpAddr(192,168,1,1));
    //HTTPClient http;
    //NTPClient ntp;
    HTTPServer svr;
    
    
/* END HTTP */

void Hoger(void) {   //Interrupt voor de ingestelde waarde hoger te zetten
  flaginstellen = 1; //Vlag voor instellen op 1 zetten
  waarde += 0.5;    //Waarde hoger zetten
  counter = 0;      //Insteltijd resetten
  wait(0.5);
  
}

void Lager(void) {  //Interrupt voor de ingestelde waarde hoger te zetten
  flaginstellen = 1; //Vlag voor instellen op 1 zetten
  waarde -= 0.5;    //Waarde lager zetten
  counter = 0;      //Insteltijd resetten
  wait(0.5);
}

void AanUit(void) {
  
  if(aanuit == 0) {  
            
            aanuit = 1;
           lcd.cls();
           lcd.printf("Opstarten...");
           motorout = (20 * 0.000511 + 0.026); //Motor op 20 graden zetten
           temp1 = (LM35_1 * 3.22*100);                                                        // omvormen van analoge waarde naar graden celcius
            afronden = 2*temp1;
            afronden = rint(afronden);
            waarde = afronden/2;
            wait(2);
   }else    {
            
            aanuit = 0;
            lcd.cls();
            lcd.printf("Uitschakelen...");
            motorout = (20 * 0.000511 + 0.026); //Motor terug op 20 graden zetten
            wait(2); 
              }
             
            }
      
void temperatuurinlezen(void) {
            temp1 = (LM35_1 * 3.22*100);                                                        // omvormen van analoge waarde naar graden celcius
            afronden = 2*temp1;
            afronden = rint(afronden);
            temp1 = afronden/2; //Temperatuur afronden op 0.5graden
            
            temp2 = (LM35_2 * 3.22*100);                                                        // omvormen van analoge waarde naar grade celcius
            afronden = 2*temp2;
            afronden = rint(afronden); 
            temp2 = afronden/2; //Temperatuur afronden op 0.5graden
    }      
    
void temperatuuruitsturen(void) {
             if(temp1 > (waarde + 1)) {                                                              //Als de waarde van de eerste LM35 hoger is als de ingestelde waarde
                LEDJE1 = 1;                                                                     // Lamp1 op breadboard aan.
                LEDJE2 = 0;                                                                     // Lamp2 op breadboard uit.
                lcd.cls();
                lcd.printf("BIN: %5.2f C",temp1); //Temperatuur binnen op LCD
                lcd.locate(0,1);
                lcd.printf("BUI: %5.2f C",temp2); //Temperatuur buiten op LCD
                wait(0.3);
                relais = 0;
                                                                                     // Een halve seconden wachten, zodat we onze temperatuur kunnen aflezen op het scherm.
            } else if(temp1 <= (waarde - 1) ) {                                                        //Als de waarde van de eerste LM35 lager is als de ingestelde waarde
                LEDJE1 = 0;                                                                     // Lamp1 op breadboard uit.
                LEDJE2 = 1;                                                                     // Lamp2 op breadboard aan.
                lcd.cls();
                lcd.printf("BIN: %5.2f C",temp1);
                lcd.locate(0,1);
                lcd.printf("BUI: %5.2f C",temp2);
                wait(0.3);                                                                  // Een halve seconden wachten, zodat we onze temperatuur kunnen aflezen op het scherm.
                relais = 1;
                }
                
 }
 
 void motor(float graden) {
    
            if ( (graden > 20) && (graden < 160) ) {
                 motorout = (graden * 0.000511 + 0.026);
                }
            else if (graden >= 160){
                motorout = (160 * 0.000511 + 0.026); //Beveiliging => niet boven 160graden
                }
            else {
                motorout = (20 * 0.000511 + 0.026); //Beveiliging => niet onder 20 graden
                }
                return;
    }
   
void initHTTP(void) {
     printf("Start initialisatie HTTP\r\n");
    EthernetErr ethErr;
    int count = 0;
    do {
        printf("Setting up %d...\n\r", ++count);
        ethErr = eth.setup();
        if (ethErr) printf("Timeout\n\r", ethErr);
    } while (ethErr != ETH_OK);

    printf("Connected OK\n\r");
    const char* hwAddr = eth.getHwAddr();

    IpAddr ethIp = eth.getIp();
    printf("IP address : %d.%d.%d.%d\n\r", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);

    //LocalFileSystem fs("webfs");

    svr.addHandler<SimpleHandler>("/hello");
    svr.addHandler<FSHandler>("");

    svr.bind(80);
    printf("Server listening\n\r");

    }
    
void klokophalen() {
    my1307.gettime(&sec, &minuten, &hours, &day, &date, &month, &year); //De tijden van de klok ophalen

    }
    
void klokuitsturen() {
    klokophalen(); //De tijden van de klok ophalen
    lcd.cls();
    lcd.locate(0,0);
    lcd.printf("%d:%d:%d",hours,minuten,sec); //Tijd op LCD zetten
    lcd.locate(0,1);
    lcd.printf("%d/%d/%d",date,month,year); //Datum op LCD zetten
 
    }

int main(void)
{
 
    
    /* START INITIALISATIE */
    knopHOGER.rise(&Hoger);
    knopLAGER.rise(&Lager);
    aanuitknop.rise(&AanUit);
    initHTTP();
    Timer tm;
    tm.start();
    
    /* STOP INITIALISATIE */
    
    while(true) {
            
            
    if( (aanuit == 1) && (flaginstellen == 0) ) { //open if
            
            temperatuurinlezen();
            temperatuuruitsturen();
            klokophalen();
            
           /* START HTTP */ 
           printf("Net poll start\r\n");
           Net::poll();
           if (tm.read() > 0.5) {
            led1 = !led1;
            tm.start(); //Start timer 
            c++; //Optellen zodat om de 1s de 
            }
           printf("Net poll gedaan\r\n");
            if (c==1) {
            printf("Ik probeer nu de file te openen..\r\n"); 
            //FILE *fp = fopen("/webfs/mydata.htm","w");
            FILE *fp = fopen("/local/Project.htm", "w");  // Open "Test.htm" on the local file system for writing
            printf("File geopend!\r\n"); 
            fprintf(fp,"<HTML>\r\n");
            fprintf(fp,"<HEAD>\r\n");
            fprintf(fp,"</HEAD>\r\n");
            fprintf(fp,"<BODY>\r\n");
            fprintf(fp," \r\n");
            printf("Variabelen printen\r\n");
            fprintf(fp,"De binnen temperatuur is %f\r\n",temp1);
            fprintf(fp," \r\n");
            fprintf(fp,"De buiten temperatuur is %f\r\n",temp2);
            fprintf(fp," \r\n");
            fprintf(fp,"De tijd is: %d:%d:%d",hours,minuten,sec);
            fprintf(fp," \r\n");
            fprintf(fp,"De datum is: %d/%d/%d",date,month,year);
            fprintf(fp," \r\n");
            fprintf(fp,"</BODY>\r\n");
            fprintf(fp,"</HTML>\r\n");
            printf("Sessie stoppen \r\n"); 
            fclose(fp);          //Stop schrijven
            printf("staat online\r\n"); 
            c=0;
           }
           /* EINDE HTTP */
           
           
            
            /* Motor sturing hier */
            graden = waarde - temp1;
            graden = 20 + (graden*5); //5 Graden per Graad celsius. (Max 28 graden)
            motor(graden); //Motor aansturen
            
            /* Stop motor sturing hier */
            
            } //sluit if
            else if( (aanuit == 1) && (flaginstellen == 1) ) { //open else if
                /* Programmatie instellen */
                printf("Programma instelmodus aan\r\n");
                while (counter <= 3) {
                lcd.cls();
                lcd.printf("BIN: %5.2f C",waarde);
                lcd.locate(0,1);
                lcd.printf("BUI: %5.2f C",temp2);
                wait(0.8);
                lcd.cls();
                lcd.printf(""); //Lcd laten flikkeren voor instellen
                lcd.locate(0,1);
                lcd.printf("BUI: %5.2f C",temp2);
                wait(0.2);
                counter++;
                                     }
                
                                    
                
                flaginstellen = 0; //Instellen stoppen
               } 
            else { //open else
                lcd.cls(); //LCD Clearen
               klokuitsturen(); //De waarde van de klok op de LCD zetten
               printf("Staat uit\r\n");
                } //sluit else
                
      }  
}