Temp logger for EE Web part 2

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 
00004 void button_FSM( void );
00005 void max31855( void );
00006 void init_max31855( void );
00007 
00008 DigitalOut led1(LED1);
00009 DigitalOut led2(LED2);
00010 DigitalOut led3(LED3);
00011 DigitalOut led4(LED4);
00012 DigitalIn  button(p21);
00013 AnalogIn   Ain1(p19);
00014 AnalogIn   Ain2(p20);
00015 Serial     pc(USBTX, USBRX);
00016 DigitalOut spi_clk(p7);
00017 DigitalOut spi_cs(p8);
00018 DigitalIn  spi_data(p6);
00019 LocalFileSystem local("local");
00020 
00021 int enable;
00022 int button_state;
00023 int record_state;
00024 int spi_data_in_temp;
00025 int spi_data_in;
00026 float A1, A2, B1, B2;
00027 time_t seconds = 0;
00028 int openFile = 0;
00029 int closeFile = 0;
00030 
00031 int main()
00032 {
00033     // Opens the root directory of the local file system
00034     pc.printf("Files on mbed\r\n");
00035     DIR *d = opendir("/local");
00036     struct dirent *p;
00037     while((p = readdir(d)) != NULL)
00038     {                                             // Print the names of the files in the local file system
00039         pc.printf("%s\n\r", p->d_name);            // to stdout (USB Serial).
00040     }
00041     closedir(d);
00042     pc.printf("\n");    
00043     // Removes the file "log.csv" from the local file system
00044     //remove("/local/log.csv");
00045     // Open "log.csv" on the local file system for writing
00046     FILE *fp = fopen("/local/log.csv", "a");
00047     //Send headers to csv file
00048     fprintf(fp, "Time_Seconds,T1_C,T2_C,T3_C\r");
00049 
00050     enable = 0;
00051     button_state = 0;
00052     record_state = 0;
00053     init_max31855();
00054     
00055     pc.printf("Data Logger Ready\r\n");
00056     
00057     while(closeFile == 0)
00058     {
00059         wait(1.0);
00060         button_FSM();
00061         max31855();
00062               
00063         if( enable == 1 )
00064         {
00065             A1 = Ain1.read_u16();
00066             B1 = (0.000000029*(A1*A1))-(0.00341*A1)+104;
00067             A2 = Ain2.read_u16();
00068             B2 = (0.000000029*(A2*A2))-(0.00341*A2)+104;
00069             pc.printf("Ain1=%.2f Ain2=%.2f t'c=%d\r\n", B1, B2, spi_data_in);
00070         }
00071         //get time in seconds
00072         seconds = time(NULL);
00073         //and save to log file
00074         fprintf(fp, "%d,%.2f,%.2f,%d\n", seconds, B1, B2, spi_data_in );
00075     }
00076     fclose(fp);
00077 }
00078 
00079 void max31855( void )
00080 {
00081     int bits = 0;
00082 
00083     spi_data_in_temp = 0;
00084 
00085     spi_clk = 0;
00086     spi_cs = 0;
00087     wait(0.01);
00088     
00089     while( bits < 32 )
00090     {
00091         spi_clk = 1;
00092         spi_clk = 1;
00093         if( bits > 0 && bits < 12 )
00094         {
00095             spi_data_in_temp = (spi_data_in_temp *2) + spi_data;
00096         }
00097         spi_clk = 0;
00098         bits++;
00099     }
00100     spi_data_in = spi_data_in_temp;
00101     spi_cs = 1;
00102 }
00103 
00104 void init_max31855( void )
00105 {
00106     spi_cs = 1;
00107     spi_clk = 0;
00108     spi_data_in_temp = 0;
00109     spi_data_in = 0;
00110 }
00111 
00112 void button_FSM( void )
00113 {
00114     if( enable == 0 )
00115     {
00116         switch( button_state )
00117         {
00118             default:
00119             case 0:
00120                 if( button == 1 )
00121                     button_state = 1;
00122                 else
00123                     button_state = 0;
00124                 break;
00125                 
00126             case 1:
00127                 if( button == 1 )
00128                     button_state = 2;
00129                 else
00130                     button_state = 0;
00131                 break;
00132                 
00133             case 2:
00134                 if( button == 1 )
00135                     button_state = 3;
00136                 else
00137                     button_state = 0;
00138                 break;
00139                 
00140             case 3:
00141                 if( button == 1 )
00142                     button_state = 4;
00143                 else
00144                     button_state = 0;
00145                 break;
00146                 
00147             case 4:
00148                 enable = 1;
00149                 button_state = 0;
00150                 pc.printf("Recording...\r\n");
00151                 //reset time to zero
00152                 set_time(0);
00153                 break;
00154         }
00155     }
00156     else
00157     {
00158         switch( button_state )
00159         {
00160             default:
00161             case 0:
00162                 if( button == 1 )
00163                     button_state = 1;
00164                 else
00165                     button_state = 0;
00166                 break;
00167                 
00168             case 1:
00169                 if( button == 1 )
00170                     button_state = 2;
00171                 else
00172                     button_state = 0;
00173                 break;
00174                 
00175             case 2:
00176                 if( button == 1 )
00177                     button_state = 3;
00178                 else
00179                     button_state = 0;
00180                 break;
00181                 
00182             case 3:
00183                 if( button == 1 )
00184                     button_state = 4;
00185                 else
00186                     button_state = 0;
00187                 break;
00188                 
00189             case 4:
00190                 enable = 0;
00191                 button_state = 0;
00192                 closeFile = 1;
00193                 pc.printf("STOPPED!\r\n");
00194                 break;
00195         }
00196     }
00197     switch( button_state )
00198     {
00199         default:
00200         case 0:
00201             led1 = 0;
00202             led2 = 0;
00203             led3 = 0;
00204             led4 = 0;
00205             break;
00206             
00207         case 1:
00208             led1 = 1;
00209             led2 = 0;
00210             led3 = 0;
00211             led4 = 0;
00212             break;
00213             
00214         case 2:
00215             led1 = 1;
00216             led2 = 1;
00217             led3 = 0;
00218             led4 = 0;
00219             break;
00220             
00221         case 3:
00222             led1 = 1;
00223             led2 = 1;
00224             led3 = 1;
00225             led4 = 0;
00226             break;
00227             
00228         case 4:
00229             led1 = 1;
00230             led2 = 1;
00231             led3 = 1;
00232             led4 = 1;
00233             break;
00234     }
00235 }