Embedded software Assessment 2

Dependencies:   MCP23017 SDFileSystem USBDevice WattBob_TextLCD mbed

Committer:
muaiyd
Date:
Tue Mar 04 18:42:38 2014 +0000
Revision:
20:00a9a95ef083
Parent:
18:f485d46a7acb
Child:
22:644d53f1f291
I finish it !!!!!!!

Who changed what in which revision?

UserRevisionLine numberNew 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 12:582753a4f1fb 66 /********************************************************************************
muaiyd 12:582753a4f1fb 67 Functions
muaiyd 16:0a2138a18f26 68 ###############################################################################
muaiyd 16:0a2138a18f26 69 Small function to writ on the LCD with one instruction
muaiyd 16:0a2138a18f26 70 ********************************************************************************/
muaiyd 0:86bba6bf9b6f 71 void Write_LCD(const char STR[],int8_t PY,int8_t PX,bool clr){
muaiyd 0:86bba6bf9b6f 72 if(clr)
muaiyd 0:86bba6bf9b6f 73 LCD.cls();
muaiyd 0:86bba6bf9b6f 74 LCD.locate(PY,PX);
muaiyd 0:86bba6bf9b6f 75 LCD.printf(STR);
muaiyd 0:86bba6bf9b6f 76 }
muaiyd 16:0a2138a18f26 77 /**************************************************************************
muaiyd 16:0a2138a18f26 78 Intialise the LCD to be ready to writ on
muaiyd 16:0a2138a18f26 79 ***************************************************************************/
muaiyd 0:86bba6bf9b6f 80 void Init_LCD(){
muaiyd 17:dba09fb3f508 81 Port.write_bit(1,BL_BIT);
muaiyd 13:6094b94b3b7c 82 Write_LCD("F=",0,0,1);
muaiyd 13:6094b94b3b7c 83 Write_LCD("A1=",1,0,0);
muaiyd 13:6094b94b3b7c 84 Write_LCD("A2=",1,7,0);
muaiyd 13:6094b94b3b7c 85 Write_LCD("S1=",0,7,0);
muaiyd 13:6094b94b3b7c 86 Write_LCD("S2=",0,12,0);
muaiyd 13:6094b94b3b7c 87 Write_LCD("E",1,14,0);
muaiyd 16:0a2138a18f26 88 }
muaiyd 7:d9f86e1b8185 89
muaiyd 16:0a2138a18f26 90 /*************************************************************************
muaiyd 20:00a9a95ef083 91 Cheaking the four input every 1.8 Sec
muaiyd 16:0a2138a18f26 92 ************************************************************************/
muaiyd 7:d9f86e1b8185 93 void InputCheck(){
muaiyd 20:00a9a95ef083 94 InputCheckPin = ! (InputCheckPin); //Pin 25
muaiyd 7:d9f86e1b8185 95 if(Swch1&&(Analug1_valu[4]>Analug2_valu[4])){
muaiyd 7:d9f86e1b8185 96 Error_Code=3;
muaiyd 7:d9f86e1b8185 97 }
muaiyd 7:d9f86e1b8185 98 else{
muaiyd 7:d9f86e1b8185 99 Error_Code=0;
muaiyd 7:d9f86e1b8185 100 }
muaiyd 7:d9f86e1b8185 101 if(Swch2){
muaiyd 16:0a2138a18f26 102 Ena_BinCounter=1;
muaiyd 7:d9f86e1b8185 103 }
muaiyd 7:d9f86e1b8185 104 else{
muaiyd 16:0a2138a18f26 105 Ena_BinCounter=0;
muaiyd 7:d9f86e1b8185 106 }
muaiyd 4:4bb228d1f6c2 107 }
muaiyd 20:00a9a95ef083 108
muaiyd 13:6094b94b3b7c 109 /***************************************************************
muaiyd 16:0a2138a18f26 110 Initialising the SD card file
muaiyd 13:6094b94b3b7c 111 *****************************************************************/
muaiyd 12:582753a4f1fb 112 void InitFile(){
muaiyd 17:dba09fb3f508 113 fp = fopen( "/sd/LogDir/LogHistory.csv" , "a");
muaiyd 8:16a77a68e4b4 114 if(fp == NULL) {
muaiyd 16:0a2138a18f26 115 Write_LCD("SD Card Error",0,0,1);
muaiyd 16:0a2138a18f26 116 Write_LCD("Try Reset",1,0,0);
muaiyd 12:582753a4f1fb 117 }
muaiyd 17:dba09fb3f508 118 fprintf(fp,"Time;Freq;Sw1;Sw2;An1;An2\r\n");
muaiyd 12:582753a4f1fb 119 fclose(fp);
muaiyd 12:582753a4f1fb 120 }
muaiyd 13:6094b94b3b7c 121 /**************************************************************
muaiyd 16:0a2138a18f26 122 Saving the flowing data in a file
muaiyd 16:0a2138a18f26 123 a. Frequency value
muaiyd 16:0a2138a18f26 124 b. digital input values
muaiyd 16:0a2138a18f26 125 c. Filtered analogue values
muaiyd 13:6094b94b3b7c 126 ***************************************************************/
muaiyd 16:0a2138a18f26 127 void LogFile(){
muaiyd 20:00a9a95ef083 128 LogFilePin = ! (LogFilePin); //Pin 27
muaiyd 17:dba09fb3f508 129 fp = fopen( "/sd/LogDir/LogHistory.csv" , "a");
muaiyd 17:dba09fb3f508 130 fprintf(fp,"%i;",(LogTimer.read_ms()/1000));
muaiyd 16:0a2138a18f26 131 if (Freq !=0xffff){
muaiyd 17:dba09fb3f508 132 fprintf(fp,"%i;",Freq);
muaiyd 11:0b2801513f93 133 }
muaiyd 16:0a2138a18f26 134 else{
muaiyd 17:dba09fb3f508 135 fprintf(fp,"%s;","Err");
muaiyd 16:0a2138a18f26 136 }
muaiyd 17:dba09fb3f508 137 fprintf(fp,"%i;",Swch1);
muaiyd 17:dba09fb3f508 138 fprintf(fp,"%i;",Swch2);
muaiyd 17:dba09fb3f508 139 fprintf(fp,"%d%3;",Analug1_valu[4]);
muaiyd 17:dba09fb3f508 140 fprintf(fp,"%d%3;",Analug2_valu[4]);
muaiyd 11:0b2801513f93 141 fprintf(fp," %s","\r\n");
muaiyd 16:0a2138a18f26 142 fclose(fp);
muaiyd 0:86bba6bf9b6f 143 }