Embedded software Assessment 2

Dependencies:   MCP23017 SDFileSystem USBDevice WattBob_TextLCD mbed

Committer:
muaiyd
Date:
Wed Mar 05 13:05:41 2014 +0000
Revision:
22:644d53f1f291
Parent:
20:00a9a95ef083
Child:
23:ffd758e50c3a
END!!!!!!!!!!!!!!!!!!!!!!!!

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 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 17:dba09fb3f508 130 fprintf(fp,"%i;",Freq);
muaiyd 11:0b2801513f93 131 }
muaiyd 16:0a2138a18f26 132 else{
muaiyd 17:dba09fb3f508 133 fprintf(fp,"%s;","Err");
muaiyd 16:0a2138a18f26 134 }
muaiyd 17:dba09fb3f508 135 fprintf(fp,"%i;",Swch1);
muaiyd 17:dba09fb3f508 136 fprintf(fp,"%i;",Swch2);
muaiyd 17:dba09fb3f508 137 fprintf(fp,"%d%3;",Analug1_valu[4]);
muaiyd 17:dba09fb3f508 138 fprintf(fp,"%d%3;",Analug2_valu[4]);
muaiyd 11:0b2801513f93 139 fprintf(fp," %s","\r\n");
muaiyd 22:644d53f1f291 140 fclose(fp);
muaiyd 22:644d53f1f291 141 //LogFilePin = ! (LogFilePin);
muaiyd 0:86bba6bf9b6f 142 }