Embedded software Assessment 2
Dependencies: MCP23017 SDFileSystem USBDevice WattBob_TextLCD mbed
Function.h@23:ffd758e50c3a, 2014-03-05 (annotated)
- Committer:
- muaiyd
- Date:
- Wed Mar 05 13:26:51 2014 +0000
- Revision:
- 23:ffd758e50c3a
- Parent:
- 22:644d53f1f291
END
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
muaiyd | 0:86bba6bf9b6f | 1 | #include "MCP23017.h" |
muaiyd | 0:86bba6bf9b6f | 2 | #include "WattBob_TextLCD.h" |
muaiyd | 0:86bba6bf9b6f | 3 | #include "mbed.h" |
muaiyd | 8:16a77a68e4b4 | 4 | #include "SDFileSystem.h" |
muaiyd | 0:86bba6bf9b6f | 5 | |
muaiyd | 17:dba09fb3f508 | 6 | MCP23017 Port(p9,p10,0x40) ; // 16-bit object with I2C Chip MCP23017 |
muaiyd | 17:dba09fb3f508 | 7 | WattBob_TextLCD LCD(&Port); // A 2*16 chacater LCD object |
muaiyd | 7:d9f86e1b8185 | 8 | |
muaiyd | 7:d9f86e1b8185 | 9 | |
muaiyd | 7:d9f86e1b8185 | 10 | BusOut BinLed(LED4, LED3, LED2, LED1); |
muaiyd | 16:0a2138a18f26 | 11 | |
muaiyd | 8:16a77a68e4b4 | 12 | DigitalIn FrequencyIn(p15); |
muaiyd | 8:16a77a68e4b4 | 13 | DigitalIn Switch1(p17); |
muaiyd | 8:16a77a68e4b4 | 14 | DigitalIn Switch2(p18); |
muaiyd | 17:dba09fb3f508 | 15 | /* |
muaiyd | 17:dba09fb3f508 | 16 | These pins are used to show the time between every execution. |
muaiyd | 17:dba09fb3f508 | 17 | Because of the execution time is very small I used the pins to flip |
muaiyd | 17:dba09fb3f508 | 18 | high and low with every time the functions are called. Consequently, |
muaiyd | 17:dba09fb3f508 | 19 | the period of high or of low represent the complete time. |
muaiyd | 16:0a2138a18f26 | 20 | |
muaiyd | 17:dba09fb3f508 | 21 | */ |
muaiyd | 18:f485d46a7acb | 22 | DigitalOut TickerPin(p30); |
muaiyd | 18:f485d46a7acb | 23 | |
muaiyd | 16:0a2138a18f26 | 24 | DigitalOut ReadDigitalinPin(p21); |
muaiyd | 16:0a2138a18f26 | 25 | DigitalOut ReadAnaloginPin(p22); |
muaiyd | 16:0a2138a18f26 | 26 | DigitalOut FreqMsurPin(p23); |
muaiyd | 16:0a2138a18f26 | 27 | DigitalOut BinaryCounterPin(p24); |
muaiyd | 16:0a2138a18f26 | 28 | DigitalOut InputCheckPin(p25); |
muaiyd | 16:0a2138a18f26 | 29 | DigitalOut DisplayPin(p26); |
muaiyd | 16:0a2138a18f26 | 30 | DigitalOut LogFilePin(p27); |
muaiyd | 18:f485d46a7acb | 31 | |
muaiyd | 16:0a2138a18f26 | 32 | |
muaiyd | 7:d9f86e1b8185 | 33 | AnalogIn Analogue_in_1(p19); |
muaiyd | 7:d9f86e1b8185 | 34 | AnalogIn Analogue_in_2(p20); |
muaiyd | 7:d9f86e1b8185 | 35 | |
muaiyd | 8:16a77a68e4b4 | 36 | SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board |
muaiyd | 0:86bba6bf9b6f | 37 | |
muaiyd | 7:d9f86e1b8185 | 38 | uint8_t Analug1_valu[5]={0,0,0,0,0}; |
muaiyd | 7:d9f86e1b8185 | 39 | uint8_t Analug2_valu[5]={0,0,0,0,0}; |
muaiyd | 7:d9f86e1b8185 | 40 | uint8_t Bin=0x00; |
muaiyd | 7:d9f86e1b8185 | 41 | bool Swch1; |
muaiyd | 7:d9f86e1b8185 | 42 | bool Swch2; |
muaiyd | 16:0a2138a18f26 | 43 | bool Ena_BinCounter=0; |
muaiyd | 14:17be0f2d153f | 44 | bool FreqTimeOutHpn; |
muaiyd | 7:d9f86e1b8185 | 45 | uint8_t Error_Code; |
muaiyd | 7:d9f86e1b8185 | 46 | uint16_t Freq; |
muaiyd | 9:539c51b7db52 | 47 | char Temp[4]; |
muaiyd | 12:582753a4f1fb | 48 | FILE *fp; |
muaiyd | 12:582753a4f1fb | 49 | |
muaiyd | 7:d9f86e1b8185 | 50 | Timer FreqMsurT; |
muaiyd | 7:d9f86e1b8185 | 51 | Timer FreqTimeOut; |
muaiyd | 9:539c51b7db52 | 52 | Timer LogTimer; |
muaiyd | 7:d9f86e1b8185 | 53 | |
muaiyd | 16:0a2138a18f26 | 54 | Ticker Cycle; |
muaiyd | 12:582753a4f1fb | 55 | |
muaiyd | 12:582753a4f1fb | 56 | void Init_LCD(); |
muaiyd | 12:582753a4f1fb | 57 | void FreqMsur(); |
muaiyd | 12:582753a4f1fb | 58 | void ReadDigitalin(); |
muaiyd | 12:582753a4f1fb | 59 | void ReadAnalogin(); |
muaiyd | 12:582753a4f1fb | 60 | void Display(); |
muaiyd | 12:582753a4f1fb | 61 | void InputCheck(); |
muaiyd | 12:582753a4f1fb | 62 | void BinaryCounter(); |
muaiyd | 12:582753a4f1fb | 63 | void InitFile(); |
muaiyd | 12:582753a4f1fb | 64 | void LogFile(); |
muaiyd | 12:582753a4f1fb | 65 | |
muaiyd | 22:644d53f1f291 | 66 | /****************************************************************************** |
muaiyd | 16:0a2138a18f26 | 67 | Small function to writ on the LCD with one instruction |
muaiyd | 16:0a2138a18f26 | 68 | ********************************************************************************/ |
muaiyd | 0:86bba6bf9b6f | 69 | void Write_LCD(const char STR[],int8_t PY,int8_t PX,bool clr){ |
muaiyd | 0:86bba6bf9b6f | 70 | if(clr) |
muaiyd | 0:86bba6bf9b6f | 71 | LCD.cls(); |
muaiyd | 0:86bba6bf9b6f | 72 | LCD.locate(PY,PX); |
muaiyd | 0:86bba6bf9b6f | 73 | LCD.printf(STR); |
muaiyd | 0:86bba6bf9b6f | 74 | } |
muaiyd | 16:0a2138a18f26 | 75 | /************************************************************************** |
muaiyd | 16:0a2138a18f26 | 76 | Intialise the LCD to be ready to writ on |
muaiyd | 16:0a2138a18f26 | 77 | ***************************************************************************/ |
muaiyd | 0:86bba6bf9b6f | 78 | void Init_LCD(){ |
muaiyd | 17:dba09fb3f508 | 79 | Port.write_bit(1,BL_BIT); |
muaiyd | 13:6094b94b3b7c | 80 | Write_LCD("F=",0,0,1); |
muaiyd | 13:6094b94b3b7c | 81 | Write_LCD("A1=",1,0,0); |
muaiyd | 13:6094b94b3b7c | 82 | Write_LCD("A2=",1,7,0); |
muaiyd | 13:6094b94b3b7c | 83 | Write_LCD("S1=",0,7,0); |
muaiyd | 13:6094b94b3b7c | 84 | Write_LCD("S2=",0,12,0); |
muaiyd | 13:6094b94b3b7c | 85 | Write_LCD("E",1,14,0); |
muaiyd | 16:0a2138a18f26 | 86 | } |
muaiyd | 7:d9f86e1b8185 | 87 | |
muaiyd | 16:0a2138a18f26 | 88 | /************************************************************************* |
muaiyd | 20:00a9a95ef083 | 89 | Cheaking the four input every 1.8 Sec |
muaiyd | 16:0a2138a18f26 | 90 | ************************************************************************/ |
muaiyd | 7:d9f86e1b8185 | 91 | void InputCheck(){ |
muaiyd | 20:00a9a95ef083 | 92 | InputCheckPin = ! (InputCheckPin); //Pin 25 |
muaiyd | 7:d9f86e1b8185 | 93 | if(Swch1&&(Analug1_valu[4]>Analug2_valu[4])){ |
muaiyd | 7:d9f86e1b8185 | 94 | Error_Code=3; |
muaiyd | 7:d9f86e1b8185 | 95 | } |
muaiyd | 7:d9f86e1b8185 | 96 | else{ |
muaiyd | 7:d9f86e1b8185 | 97 | Error_Code=0; |
muaiyd | 7:d9f86e1b8185 | 98 | } |
muaiyd | 7:d9f86e1b8185 | 99 | if(Swch2){ |
muaiyd | 16:0a2138a18f26 | 100 | Ena_BinCounter=1; |
muaiyd | 7:d9f86e1b8185 | 101 | } |
muaiyd | 7:d9f86e1b8185 | 102 | else{ |
muaiyd | 16:0a2138a18f26 | 103 | Ena_BinCounter=0; |
muaiyd | 7:d9f86e1b8185 | 104 | } |
muaiyd | 4:4bb228d1f6c2 | 105 | } |
muaiyd | 20:00a9a95ef083 | 106 | |
muaiyd | 13:6094b94b3b7c | 107 | /*************************************************************** |
muaiyd | 16:0a2138a18f26 | 108 | Initialising the SD card file |
muaiyd | 13:6094b94b3b7c | 109 | *****************************************************************/ |
muaiyd | 12:582753a4f1fb | 110 | void InitFile(){ |
muaiyd | 17:dba09fb3f508 | 111 | fp = fopen( "/sd/LogDir/LogHistory.csv" , "a"); |
muaiyd | 8:16a77a68e4b4 | 112 | if(fp == NULL) { |
muaiyd | 16:0a2138a18f26 | 113 | Write_LCD("SD Card Error",0,0,1); |
muaiyd | 16:0a2138a18f26 | 114 | Write_LCD("Try Reset",1,0,0); |
muaiyd | 12:582753a4f1fb | 115 | } |
muaiyd | 17:dba09fb3f508 | 116 | fprintf(fp,"Time;Freq;Sw1;Sw2;An1;An2\r\n"); |
muaiyd | 12:582753a4f1fb | 117 | fclose(fp); |
muaiyd | 12:582753a4f1fb | 118 | } |
muaiyd | 13:6094b94b3b7c | 119 | /************************************************************** |
muaiyd | 16:0a2138a18f26 | 120 | Saving the flowing data in a file |
muaiyd | 16:0a2138a18f26 | 121 | a. Frequency value |
muaiyd | 16:0a2138a18f26 | 122 | b. digital input values |
muaiyd | 16:0a2138a18f26 | 123 | c. Filtered analogue values |
muaiyd | 13:6094b94b3b7c | 124 | ***************************************************************/ |
muaiyd | 16:0a2138a18f26 | 125 | void LogFile(){ |
muaiyd | 20:00a9a95ef083 | 126 | LogFilePin = ! (LogFilePin); //Pin 27 |
muaiyd | 17:dba09fb3f508 | 127 | fp = fopen( "/sd/LogDir/LogHistory.csv" , "a"); |
muaiyd | 17:dba09fb3f508 | 128 | fprintf(fp,"%i;",(LogTimer.read_ms()/1000)); |
muaiyd | 16:0a2138a18f26 | 129 | if (Freq !=0xffff){ |
muaiyd | 23:ffd758e50c3a | 130 | fprintf(fp,"%4i;",Freq); |
muaiyd | 11:0b2801513f93 | 131 | } |
muaiyd | 16:0a2138a18f26 | 132 | else{ |
muaiyd | 23:ffd758e50c3a | 133 | fprintf(fp,"%4s;","Err"); |
muaiyd | 16:0a2138a18f26 | 134 | } |
muaiyd | 17:dba09fb3f508 | 135 | fprintf(fp,"%i;",Swch1); |
muaiyd | 17:dba09fb3f508 | 136 | fprintf(fp,"%i;",Swch2); |
muaiyd | 23:ffd758e50c3a | 137 | fprintf(fp,"%3d;",Analug1_valu[4]); |
muaiyd | 23:ffd758e50c3a | 138 | fprintf(fp,"%3d;",Analug2_valu[4]); |
muaiyd | 23:ffd758e50c3a | 139 | fprintf(fp,"%s","\r\n"); |
muaiyd | 22:644d53f1f291 | 140 | fclose(fp); |
muaiyd | 22:644d53f1f291 | 141 | //LogFilePin = ! (LogFilePin); |
muaiyd | 0:86bba6bf9b6f | 142 | } |