Test program that talkes to a I2C Microchip MCP9801 and logs results to USB serial and to mbeb local file system

Dependencies:   mbed

Committer:
monpjc
Date:
Wed Oct 13 09:37:50 2010 +0000
Revision:
0:d40fd50424e3
V0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
monpjc 0:d40fd50424e3 1
monpjc 0:d40fd50424e3 2 // Read from I2C slave at address 0x62
monpjc 0:d40fd50424e3 3
monpjc 0:d40fd50424e3 4 #include "mbed.h"
monpjc 0:d40fd50424e3 5
monpjc 0:d40fd50424e3 6 I2C i2c(p28, p27);
monpjc 0:d40fd50424e3 7 Serial pc(USBTX, USBRX);
monpjc 0:d40fd50424e3 8 DigitalOut myled(LED2);
monpjc 0:d40fd50424e3 9 LocalFileSystem local("local"); // Create the local filesystem under the name "local"
monpjc 0:d40fd50424e3 10
monpjc 0:d40fd50424e3 11
monpjc 0:d40fd50424e3 12 int main()
monpjc 0:d40fd50424e3 13 {
monpjc 0:d40fd50424e3 14 unsigned int loop = 1;
monpjc 0:d40fd50424e3 15 unsigned loopCount = 1;
monpjc 0:d40fd50424e3 16 int address = 0x90;
monpjc 0:d40fd50424e3 17 char RXdata[2];
monpjc 0:d40fd50424e3 18 char TXdata[2];
monpjc 0:d40fd50424e3 19 float temperature = 0;
monpjc 0:d40fd50424e3 20 time_t seconds = 0;
monpjc 0:d40fd50424e3 21
monpjc 0:d40fd50424e3 22 //Hello splash screen
monpjc 0:d40fd50424e3 23 printf("\r\n\nmbeb Temperature logger V0.1\r\nBy Paul J clarke MIET\r\n13th Oct 2010\r\n\n");
monpjc 0:d40fd50424e3 24
monpjc 0:d40fd50424e3 25 //clear serial buffer
monpjc 0:d40fd50424e3 26 while( pc.readable() );
monpjc 0:d40fd50424e3 27
monpjc 0:d40fd50424e3 28 //Configure sensor at 0.0625'C steps
monpjc 0:d40fd50424e3 29 TXdata[0] = 0x01;
monpjc 0:d40fd50424e3 30 TXdata[1] = 0x60;
monpjc 0:d40fd50424e3 31 i2c.write(address, TXdata, 2);
monpjc 0:d40fd50424e3 32 //Set dat for reading temperature
monpjc 0:d40fd50424e3 33 TXdata[0] = 0x00;
monpjc 0:d40fd50424e3 34 myled = 0;
monpjc 0:d40fd50424e3 35
monpjc 0:d40fd50424e3 36 // Opens the root directory of the local file system
monpjc 0:d40fd50424e3 37 printf("Files on mbed\r\n");
monpjc 0:d40fd50424e3 38 DIR *d = opendir("/local");
monpjc 0:d40fd50424e3 39 struct dirent *p;
monpjc 0:d40fd50424e3 40 while((p = readdir(d)) != NULL)
monpjc 0:d40fd50424e3 41 { // Print the names of the files in the local file system
monpjc 0:d40fd50424e3 42 printf("%s\n\r", p->d_name); // to stdout (USB Serial).
monpjc 0:d40fd50424e3 43 }
monpjc 0:d40fd50424e3 44 closedir(d);
monpjc 0:d40fd50424e3 45 printf("\n");
monpjc 0:d40fd50424e3 46
monpjc 0:d40fd50424e3 47 // Removes the file "out.txt" from the local file system
monpjc 0:d40fd50424e3 48 remove("/local/log.csv");
monpjc 0:d40fd50424e3 49 // Open "log.csv" on the local file system for writing
monpjc 0:d40fd50424e3 50 FILE *fp = fopen("/local/log.csv", "w");
monpjc 0:d40fd50424e3 51
monpjc 0:d40fd50424e3 52 //reset time to zero
monpjc 0:d40fd50424e3 53 set_time(0);
monpjc 0:d40fd50424e3 54
monpjc 0:d40fd50424e3 55 //Send headers to csv file
monpjc 0:d40fd50424e3 56 fprintf(fp, "Time_Seconds,Temperature_C\r");
monpjc 0:d40fd50424e3 57
monpjc 0:d40fd50424e3 58 //main loop
monpjc 0:d40fd50424e3 59 while(loop)
monpjc 0:d40fd50424e3 60 {
monpjc 0:d40fd50424e3 61 //toggle LED to show we are running
monpjc 0:d40fd50424e3 62 myled = !myled;
monpjc 0:d40fd50424e3 63 //set I2C device to point at temperature registor
monpjc 0:d40fd50424e3 64 i2c.write(address, TXdata, 1);
monpjc 0:d40fd50424e3 65 //read two bytes of raw data back
monpjc 0:d40fd50424e3 66 i2c.read(address, RXdata, 2);
monpjc 0:d40fd50424e3 67 //generate floating point number from raw data recived
monpjc 0:d40fd50424e3 68 temperature = (((float)RXdata[1]) / 256) + RXdata[0];
monpjc 0:d40fd50424e3 69 //stream temperature to USB serial port
monpjc 0:d40fd50424e3 70 printf("Temperature = %.4f'C Data Point = %d \r", temperature, loopCount);
monpjc 0:d40fd50424e3 71 //get time in seconds
monpjc 0:d40fd50424e3 72 seconds = time(NULL);
monpjc 0:d40fd50424e3 73 //and save to log file
monpjc 0:d40fd50424e3 74 fprintf(fp, "%d,%.4f\n", seconds, temperature);
monpjc 0:d40fd50424e3 75 //wait 250ms - time for ADC in temp sensor to re calculate new value
monpjc 0:d40fd50424e3 76 wait(1);
monpjc 0:d40fd50424e3 77
monpjc 0:d40fd50424e3 78 //inc loop counter
monpjc 0:d40fd50424e3 79 loopCount++;
monpjc 0:d40fd50424e3 80
monpjc 0:d40fd50424e3 81 if( pc.readable() || loopCount==1200 ) //1200 = 5 min's of loggin time
monpjc 0:d40fd50424e3 82 {
monpjc 0:d40fd50424e3 83 loop = 0;
monpjc 0:d40fd50424e3 84 }
monpjc 0:d40fd50424e3 85 }
monpjc 0:d40fd50424e3 86 printf("\r\n\n Finished...\r\nTotal data points = %d\r\n", (loopCount-1));
monpjc 0:d40fd50424e3 87 fclose(fp);
monpjc 0:d40fd50424e3 88
monpjc 0:d40fd50424e3 89 while(1); //HALT
monpjc 0:d40fd50424e3 90
monpjc 0:d40fd50424e3 91 }