Embedded software Assessment 2

Dependencies:   MCP23017 SDFileSystem USBDevice WattBob_TextLCD mbed

Committer:
muaiyd
Date:
Fri Feb 21 09:42:24 2014 +0000
Revision:
10:6e50e26d258b
Parent:
9:539c51b7db52
Its work but need to back

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 7:d9f86e1b8185 6 MCP23017 Port(p9,p10,0x40) ; // 16-bit parallel I/O object
muaiyd 7:d9f86e1b8185 7 WattBob_TextLCD LCD(&Port); // Varaible to 2*16 chacater LCD object
muaiyd 7:d9f86e1b8185 8
muaiyd 7:d9f86e1b8185 9
muaiyd 7:d9f86e1b8185 10 BusOut BinLed(LED4, LED3, LED2, LED1);
muaiyd 8:16a77a68e4b4 11 DigitalIn FrequencyIn(p15);
muaiyd 8:16a77a68e4b4 12 DigitalIn Switch1(p17);
muaiyd 8:16a77a68e4b4 13 DigitalIn Switch2(p18);
muaiyd 7:d9f86e1b8185 14 AnalogIn Analogue_in_1(p19);
muaiyd 7:d9f86e1b8185 15 AnalogIn Analogue_in_2(p20);
muaiyd 7:d9f86e1b8185 16
muaiyd 8:16a77a68e4b4 17 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
muaiyd 0:86bba6bf9b6f 18
muaiyd 7:d9f86e1b8185 19 uint8_t Analug1_valu[5]={0,0,0,0,0};
muaiyd 7:d9f86e1b8185 20 uint8_t Analug2_valu[5]={0,0,0,0,0};
muaiyd 7:d9f86e1b8185 21 uint8_t Bin=0x00;
muaiyd 7:d9f86e1b8185 22 bool Swch1;
muaiyd 7:d9f86e1b8185 23 bool Swch2;
muaiyd 7:d9f86e1b8185 24 bool Ena_job6=0;
muaiyd 7:d9f86e1b8185 25 bool FreqTimeOutE=1;
muaiyd 7:d9f86e1b8185 26 uint8_t Error_Code;
muaiyd 7:d9f86e1b8185 27 uint16_t Freq;
muaiyd 9:539c51b7db52 28 char Temp[4];
muaiyd 9:539c51b7db52 29
muaiyd 7:d9f86e1b8185 30 Timer FreqMsurT;
muaiyd 7:d9f86e1b8185 31 Timer FreqTimeOut;
muaiyd 9:539c51b7db52 32 Timer LogTimer;
muaiyd 7:d9f86e1b8185 33
muaiyd 7:d9f86e1b8185 34 Ticker CallFreqMsur;
muaiyd 7:d9f86e1b8185 35 Ticker CallReadDigitalin;
muaiyd 7:d9f86e1b8185 36 Ticker CallReadAnalogin;
muaiyd 7:d9f86e1b8185 37 Ticker CallDisplay;
muaiyd 7:d9f86e1b8185 38 Ticker CallInputCheck;
muaiyd 7:d9f86e1b8185 39 Ticker CallBinaryCounter;
muaiyd 7:d9f86e1b8185 40 Ticker CallLogFile;
muaiyd 7:d9f86e1b8185 41
muaiyd 0:86bba6bf9b6f 42 void Write_LCD(const char STR[],int8_t PY,int8_t PX,bool clr){
muaiyd 0:86bba6bf9b6f 43 if(clr)
muaiyd 0:86bba6bf9b6f 44 LCD.cls();
muaiyd 0:86bba6bf9b6f 45 LCD.locate(PY,PX);
muaiyd 0:86bba6bf9b6f 46 LCD.printf(STR);
muaiyd 0:86bba6bf9b6f 47 }
muaiyd 0:86bba6bf9b6f 48
muaiyd 0:86bba6bf9b6f 49 void Init_LCD(){
muaiyd 0:86bba6bf9b6f 50 Port.write_bit(1,BL_BIT);
muaiyd 0:86bba6bf9b6f 51 Write_LCD("Muaiyd",0,4,1);
muaiyd 0:86bba6bf9b6f 52 Write_LCD("Heriot-Watt Uni.",1,0,0);
muaiyd 8:16a77a68e4b4 53 //wait(1);
muaiyd 8:16a77a68e4b4 54 //LCD.cls();
muaiyd 4:4bb228d1f6c2 55 }
muaiyd 4:4bb228d1f6c2 56
muaiyd 7:d9f86e1b8185 57
muaiyd 7:d9f86e1b8185 58 /*
muaiyd 7:d9f86e1b8185 59 Measure the frequency of a 3.3v square wave signal once every second. The frequency range
muaiyd 7:d9f86e1b8185 60 is 500Hz to 1000Hz with 50% duty cycle).
muaiyd 7:d9f86e1b8185 61 */
muaiyd 7:d9f86e1b8185 62
muaiyd 7:d9f86e1b8185 63 void FreqMsur(){
muaiyd 7:d9f86e1b8185 64 FreqTimeOut.start();
muaiyd 7:d9f86e1b8185 65 while(!FrequencyIn){
muaiyd 7:d9f86e1b8185 66 if (FreqTimeOut.read_ms() > 50)
muaiyd 7:d9f86e1b8185 67 break;
muaiyd 7:d9f86e1b8185 68 }
muaiyd 7:d9f86e1b8185 69 while(FrequencyIn){
muaiyd 7:d9f86e1b8185 70 if (FreqTimeOut.read_ms() > 50)
muaiyd 7:d9f86e1b8185 71 break;
muaiyd 7:d9f86e1b8185 72 }
muaiyd 7:d9f86e1b8185 73 if (FreqTimeOut.read_ms() > 50)
muaiyd 7:d9f86e1b8185 74 FreqTimeOutE=0;
muaiyd 7:d9f86e1b8185 75
muaiyd 7:d9f86e1b8185 76 if(FreqTimeOutE){
muaiyd 7:d9f86e1b8185 77 FreqMsurT.start();
muaiyd 7:d9f86e1b8185 78 while(!FrequencyIn){
muaiyd 7:d9f86e1b8185 79 }
muaiyd 7:d9f86e1b8185 80 while(FrequencyIn){
muaiyd 7:d9f86e1b8185 81 }
muaiyd 7:d9f86e1b8185 82 FreqMsurT.stop();
muaiyd 7:d9f86e1b8185 83 float Period=FreqMsurT.read_us();
muaiyd 7:d9f86e1b8185 84 Freq=1/Period*1000000.0+0.5; //Adding 0.5 to round the frequency to nearst int
muaiyd 7:d9f86e1b8185 85 }
muaiyd 7:d9f86e1b8185 86 else{
muaiyd 7:d9f86e1b8185 87 Freq=0xffff;
muaiyd 7:d9f86e1b8185 88 }
muaiyd 7:d9f86e1b8185 89 FreqMsurT.reset();
muaiyd 7:d9f86e1b8185 90 FreqTimeOut.stop();
muaiyd 7:d9f86e1b8185 91 FreqTimeOut.reset();
muaiyd 7:d9f86e1b8185 92 FreqTimeOutE=1;
muaiyd 7:d9f86e1b8185 93
muaiyd 4:4bb228d1f6c2 94 }
muaiyd 4:4bb228d1f6c2 95
muaiyd 7:d9f86e1b8185 96 //Read TWO digital inputs every 400mS (switch_1 and switch_2)
muaiyd 4:4bb228d1f6c2 97
muaiyd 7:d9f86e1b8185 98 void ReadDigitalin(){
muaiyd 7:d9f86e1b8185 99 Swch1=Switch1;
muaiyd 7:d9f86e1b8185 100 Swch2=Switch2;
muaiyd 4:4bb228d1f6c2 101 }
muaiyd 4:4bb228d1f6c2 102
muaiyd 7:d9f86e1b8185 103 /*
muaiyd 7:d9f86e1b8185 104 Read TWO analogue inputs every 800mS (Analogue_in_1 at pin 19
muaiyd 7:d9f86e1b8185 105 and Analogue_in_2 at pin 20). Also, averaging the last 4 readings
muaiyd 7:d9f86e1b8185 106 */
muaiyd 7:d9f86e1b8185 107 void ReadAnalogin(){
muaiyd 7:d9f86e1b8185 108 Analug1_valu[4]=0;
muaiyd 7:d9f86e1b8185 109 Analug2_valu[4]=0;
muaiyd 7:d9f86e1b8185 110 for(int i=0;i<3;i++){
muaiyd 7:d9f86e1b8185 111 Analug1_valu[i]=Analug1_valu[i+1];
muaiyd 7:d9f86e1b8185 112 Analug1_valu[4]=Analug1_valu[4]+Analug1_valu[i]/4;
muaiyd 7:d9f86e1b8185 113 Analug2_valu[i]=Analug2_valu[i+1];
muaiyd 7:d9f86e1b8185 114 Analug2_valu[4]=Analug2_valu[4]+Analug2_valu[i]/4;
muaiyd 7:d9f86e1b8185 115 }
muaiyd 7:d9f86e1b8185 116 Analug1_valu[3]=Analogue_in_1.read()*255;
muaiyd 7:d9f86e1b8185 117 Analug2_valu[3]=Analogue_in_2.read()*255;
muaiyd 7:d9f86e1b8185 118 Analug1_valu[4]=Analug1_valu[4]+Analug1_valu[3]/4;
muaiyd 7:d9f86e1b8185 119 Analug2_valu[4]=Analug2_valu[4]+Analug2_valu[3]/4;
muaiyd 7:d9f86e1b8185 120 }
muaiyd 7:d9f86e1b8185 121 /*
muaiyd 7:d9f86e1b8185 122 Display the following on the LCD display every 2 seconds
muaiyd 7:d9f86e1b8185 123 a. Frequency value (show as integer)
muaiyd 7:d9f86e1b8185 124 b. analogue values (show as integers)
muaiyd 7:d9f86e1b8185 125 c. digital values
muaiyd 7:d9f86e1b8185 126 d. Possible error code
muaiyd 7:d9f86e1b8185 127 */
muaiyd 7:d9f86e1b8185 128 void Display(){
muaiyd 7:d9f86e1b8185 129 Write_LCD("F",0,0,1);
muaiyd 7:d9f86e1b8185 130 if( Freq<1200 && Freq>400){
muaiyd 7:d9f86e1b8185 131 sprintf(Temp, "%d", Freq);
muaiyd 7:d9f86e1b8185 132 Write_LCD(Temp,0,1,0);
muaiyd 7:d9f86e1b8185 133 }
muaiyd 7:d9f86e1b8185 134 else{
muaiyd 7:d9f86e1b8185 135 Write_LCD("Err",0,1,0);
muaiyd 7:d9f86e1b8185 136 }
muaiyd 7:d9f86e1b8185 137
muaiyd 7:d9f86e1b8185 138 Write_LCD("A",1,0,0);
muaiyd 7:d9f86e1b8185 139 sprintf(Temp, "%d", Analug1_valu[4]);
muaiyd 7:d9f86e1b8185 140 Write_LCD(Temp,1,2,0);
muaiyd 7:d9f86e1b8185 141
muaiyd 7:d9f86e1b8185 142 Write_LCD("A",1,8,0);
muaiyd 7:d9f86e1b8185 143 sprintf(Temp, "%d", Analug2_valu[4]);
muaiyd 7:d9f86e1b8185 144 Write_LCD(Temp,1,9,0);
muaiyd 7:d9f86e1b8185 145
muaiyd 7:d9f86e1b8185 146 Write_LCD("S",0,7,0);
muaiyd 7:d9f86e1b8185 147 sprintf(Temp, "%d", Swch1);
muaiyd 7:d9f86e1b8185 148 Write_LCD(Temp,0,8,0);
muaiyd 7:d9f86e1b8185 149
muaiyd 7:d9f86e1b8185 150 Write_LCD("S",0,10,0);
muaiyd 7:d9f86e1b8185 151 sprintf(Temp, "%d", Swch2);
muaiyd 7:d9f86e1b8185 152 Write_LCD(Temp,0,11,0);
muaiyd 7:d9f86e1b8185 153
muaiyd 7:d9f86e1b8185 154 Write_LCD("E",0,14,0);
muaiyd 7:d9f86e1b8185 155 sprintf(Temp, "%d", Error_Code);
muaiyd 7:d9f86e1b8185 156 Write_LCD(Temp,0,15,0);
muaiyd 4:4bb228d1f6c2 157 }
muaiyd 4:4bb228d1f6c2 158
muaiyd 7:d9f86e1b8185 159 void InputCheck(){
muaiyd 7:d9f86e1b8185 160 if(Swch1&&(Analug1_valu[4]>Analug2_valu[4])){
muaiyd 7:d9f86e1b8185 161 Error_Code=3;
muaiyd 7:d9f86e1b8185 162 }
muaiyd 7:d9f86e1b8185 163 else{
muaiyd 7:d9f86e1b8185 164 Error_Code=0;
muaiyd 7:d9f86e1b8185 165 }
muaiyd 7:d9f86e1b8185 166 if(Swch2){
muaiyd 7:d9f86e1b8185 167 Ena_job6=1;
muaiyd 7:d9f86e1b8185 168 }
muaiyd 7:d9f86e1b8185 169 else{
muaiyd 7:d9f86e1b8185 170 Ena_job6=0;
muaiyd 7:d9f86e1b8185 171 }
muaiyd 4:4bb228d1f6c2 172 }
muaiyd 4:4bb228d1f6c2 173
muaiyd 7:d9f86e1b8185 174 void BinaryCounter(){
muaiyd 7:d9f86e1b8185 175 if(Ena_job6){
muaiyd 7:d9f86e1b8185 176 BinLed=Bin;
muaiyd 7:d9f86e1b8185 177 Bin++;
muaiyd 7:d9f86e1b8185 178 }
muaiyd 7:d9f86e1b8185 179 else{
muaiyd 7:d9f86e1b8185 180 BinLed=0x00;
muaiyd 7:d9f86e1b8185 181 Bin=0x00;
muaiyd 7:d9f86e1b8185 182 }
muaiyd 4:4bb228d1f6c2 183 }
muaiyd 4:4bb228d1f6c2 184
muaiyd 7:d9f86e1b8185 185 void LogFile(){
muaiyd 10:6e50e26d258b 186 printf("Hello World!\n");
muaiyd 10:6e50e26d258b 187
muaiyd 8:16a77a68e4b4 188 mkdir("/sd/mydir", 0777);
muaiyd 10:6e50e26d258b 189
muaiyd 10:6e50e26d258b 190 FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");
muaiyd 8:16a77a68e4b4 191 if(fp == NULL) {
muaiyd 8:16a77a68e4b4 192 error("Could not open file for write\n");
muaiyd 8:16a77a68e4b4 193 }
muaiyd 10:6e50e26d258b 194 fprintf(fp, "Hello fun SD Card World!");
muaiyd 8:16a77a68e4b4 195 fclose(fp);
muaiyd 8:16a77a68e4b4 196
muaiyd 8:16a77a68e4b4 197 printf("Goodbye World!\n");
muaiyd 0:86bba6bf9b6f 198 }