mbed board program for Program Design Exercise use UART on USB, AD, tact SW, LED

Dependencies:   TextLCD mbed

Committer:
tamaki
Date:
Sat Jul 11 01:22:12 2015 +0000
Revision:
0:d14a5eeef3d4
Program Design Ex

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tamaki 0:d14a5eeef3d4 1 //program design practice
tamaki 0:d14a5eeef3d4 2 //mbed program
tamaki 0:d14a5eeef3d4 3 //use Standard LCD #define STD_LCD
tamaki 0:d14a5eeef3d4 4 //use I2C LCD #define I2C_LCD
tamaki 0:d14a5eeef3d4 5 //**need Inport TextLCD, ACM1602NI.cpp, ACM1602NI.h
tamaki 0:d14a5eeef3d4 6 //
tamaki 0:d14a5eeef3d4 7 #include "mbed.h"
tamaki 0:d14a5eeef3d4 8
tamaki 0:d14a5eeef3d4 9 #define STD_LCD
tamaki 0:d14a5eeef3d4 10
tamaki 0:d14a5eeef3d4 11 #ifdef STD_LCD
tamaki 0:d14a5eeef3d4 12 #include "TextLCD.h"
tamaki 0:d14a5eeef3d4 13 TextLCD lcd(p27,p28,p26,p29,p25,p30); // rs,e, d4,d5,d6,d7
tamaki 0:d14a5eeef3d4 14 #endif
tamaki 0:d14a5eeef3d4 15 #ifdef I2C_LCD
tamaki 0:d14a5eeef3d4 16 #include "ACM1602NI.h"
tamaki 0:d14a5eeef3d4 17 ACM1602NI lcd(p28, p27); //sda scl
tamaki 0:d14a5eeef3d4 18 #endif
tamaki 0:d14a5eeef3d4 19
tamaki 0:d14a5eeef3d4 20 Ticker flipper;
tamaki 0:d14a5eeef3d4 21 DigitalOut led1(p21);
tamaki 0:d14a5eeef3d4 22 DigitalOut led2(p22);
tamaki 0:d14a5eeef3d4 23 DigitalOut led3(p23);
tamaki 0:d14a5eeef3d4 24 DigitalOut led4(p24);
tamaki 0:d14a5eeef3d4 25 DigitalIn sw1(p14);
tamaki 0:d14a5eeef3d4 26 DigitalIn sw2(p15);
tamaki 0:d14a5eeef3d4 27 DigitalIn sw3(p16);
tamaki 0:d14a5eeef3d4 28 AnalogIn vr(p17);
tamaki 0:d14a5eeef3d4 29 Serial pc(USBTX, USBRX); // tx, rx
tamaki 0:d14a5eeef3d4 30
tamaki 0:d14a5eeef3d4 31 unsigned char cnt;
tamaki 0:d14a5eeef3d4 32 char msg1[] = "S1:0 S2:0 S3:0";
tamaki 0:d14a5eeef3d4 33 char msg2[] = " 511 1010";
tamaki 0:d14a5eeef3d4 34 char msg3[] = " ";
tamaki 0:d14a5eeef3d4 35 char StBuf[5];
tamaki 0:d14a5eeef3d4 36 char SendBuf[17];
tamaki 0:d14a5eeef3d4 37 int flg_rdet, recv_cnt;
tamaki 0:d14a5eeef3d4 38 int vrad;
tamaki 0:d14a5eeef3d4 39
tamaki 0:d14a5eeef3d4 40 void Cnv210(int val)
tamaki 0:d14a5eeef3d4 41 {
tamaki 0:d14a5eeef3d4 42 unsigned char temp;
tamaki 0:d14a5eeef3d4 43 int i;
tamaki 0:d14a5eeef3d4 44 StBuf[0] = StBuf[1] = StBuf[2] = StBuf[3] = StBuf[4] = ' ';
tamaki 0:d14a5eeef3d4 45 i = 0;
tamaki 0:d14a5eeef3d4 46 do {
tamaki 0:d14a5eeef3d4 47 temp = val % 10;
tamaki 0:d14a5eeef3d4 48 StBuf[i++] = temp + '0';
tamaki 0:d14a5eeef3d4 49 } while (( val /= 10 ) != 0 );
tamaki 0:d14a5eeef3d4 50 }
tamaki 0:d14a5eeef3d4 51
tamaki 0:d14a5eeef3d4 52 void rxRecieve()
tamaki 0:d14a5eeef3d4 53 {
tamaki 0:d14a5eeef3d4 54 char ch;
tamaki 0:d14a5eeef3d4 55
tamaki 0:d14a5eeef3d4 56 ch = pc.getc();
tamaki 0:d14a5eeef3d4 57 if ( flg_rdet == 0 ) {
tamaki 0:d14a5eeef3d4 58 if ( ch == 'r' ) {
tamaki 0:d14a5eeef3d4 59 flg_rdet = 1;
tamaki 0:d14a5eeef3d4 60 recv_cnt = 5;
tamaki 0:d14a5eeef3d4 61 }
tamaki 0:d14a5eeef3d4 62 }
tamaki 0:d14a5eeef3d4 63 if ( flg_rdet == 1 ) {
tamaki 0:d14a5eeef3d4 64 switch ( recv_cnt ) {
tamaki 0:d14a5eeef3d4 65 case 0:
tamaki 0:d14a5eeef3d4 66 msg3[0] = ch;
tamaki 0:d14a5eeef3d4 67 recv_cnt = 1;
tamaki 0:d14a5eeef3d4 68 break;
tamaki 0:d14a5eeef3d4 69 case 1:
tamaki 0:d14a5eeef3d4 70 msg3[1] = ch;
tamaki 0:d14a5eeef3d4 71 recv_cnt = 2;
tamaki 0:d14a5eeef3d4 72 break;
tamaki 0:d14a5eeef3d4 73 case 2:
tamaki 0:d14a5eeef3d4 74 msg3[2] = ch;
tamaki 0:d14a5eeef3d4 75 recv_cnt =3;
tamaki 0:d14a5eeef3d4 76 break;
tamaki 0:d14a5eeef3d4 77 case 3:
tamaki 0:d14a5eeef3d4 78 msg3[3] = ch;
tamaki 0:d14a5eeef3d4 79 recv_cnt = 0;
tamaki 0:d14a5eeef3d4 80 flg_rdet = 0;
tamaki 0:d14a5eeef3d4 81 lcd.locate(12,1);
tamaki 0:d14a5eeef3d4 82 lcd.printf(msg3);
tamaki 0:d14a5eeef3d4 83 break;
tamaki 0:d14a5eeef3d4 84 default:
tamaki 0:d14a5eeef3d4 85 recv_cnt = 0;
tamaki 0:d14a5eeef3d4 86 break;
tamaki 0:d14a5eeef3d4 87
tamaki 0:d14a5eeef3d4 88 }
tamaki 0:d14a5eeef3d4 89 }
tamaki 0:d14a5eeef3d4 90 }
tamaki 0:d14a5eeef3d4 91
tamaki 0:d14a5eeef3d4 92 void flip() {
tamaki 0:d14a5eeef3d4 93 if((cnt & 0x8) == 0) led4= 0;
tamaki 0:d14a5eeef3d4 94 else led4 = 1;
tamaki 0:d14a5eeef3d4 95 if((cnt & 0x4) == 0) led3= 0;
tamaki 0:d14a5eeef3d4 96 else led3 = 1;
tamaki 0:d14a5eeef3d4 97 if((cnt & 0x2) == 0) led2= 0;
tamaki 0:d14a5eeef3d4 98 else led2 = 1;
tamaki 0:d14a5eeef3d4 99 if((cnt & 0x1) == 0) led1= 0;
tamaki 0:d14a5eeef3d4 100 else led1 = 1;
tamaki 0:d14a5eeef3d4 101
tamaki 0:d14a5eeef3d4 102 if(!sw1 == 0) msg1[3] = '0';
tamaki 0:d14a5eeef3d4 103 else msg1[3] = '1';
tamaki 0:d14a5eeef3d4 104 if(!sw2 == 0) msg1[8] = '0';
tamaki 0:d14a5eeef3d4 105 else msg1[8] = '1';
tamaki 0:d14a5eeef3d4 106 if(!sw3 == 0) msg1[13] = '0';
tamaki 0:d14a5eeef3d4 107 else msg1[13] = '1';
tamaki 0:d14a5eeef3d4 108
tamaki 0:d14a5eeef3d4 109 if(!led4 == 0) msg2[7] = '1';
tamaki 0:d14a5eeef3d4 110 else msg2[7] = '0';
tamaki 0:d14a5eeef3d4 111 if(!led3 == 0) msg2[8] = '1';
tamaki 0:d14a5eeef3d4 112 else msg2[8] = '0';
tamaki 0:d14a5eeef3d4 113 if(!led2 == 0) msg2[9] = '1';
tamaki 0:d14a5eeef3d4 114 else msg2[9] = '0';
tamaki 0:d14a5eeef3d4 115 if(!led1 == 0) msg2[10] = '1';
tamaki 0:d14a5eeef3d4 116 else msg2[10] = '0';
tamaki 0:d14a5eeef3d4 117
tamaki 0:d14a5eeef3d4 118 vrad = (int)(vr.read() * 1023);
tamaki 0:d14a5eeef3d4 119 Cnv210(vrad);
tamaki 0:d14a5eeef3d4 120 msg2[0] = StBuf[4];
tamaki 0:d14a5eeef3d4 121 msg2[1] = StBuf[3];
tamaki 0:d14a5eeef3d4 122 msg2[2] = StBuf[2];
tamaki 0:d14a5eeef3d4 123 msg2[3] = StBuf[1];
tamaki 0:d14a5eeef3d4 124 msg2[4] = StBuf[0];
tamaki 0:d14a5eeef3d4 125 ;
tamaki 0:d14a5eeef3d4 126
tamaki 0:d14a5eeef3d4 127 lcd.locate(0,0);
tamaki 0:d14a5eeef3d4 128 lcd.printf(msg1);
tamaki 0:d14a5eeef3d4 129
tamaki 0:d14a5eeef3d4 130 lcd.locate(0,1);
tamaki 0:d14a5eeef3d4 131 lcd.printf(msg2);
tamaki 0:d14a5eeef3d4 132 SendBuf[2] = StBuf[4];
tamaki 0:d14a5eeef3d4 133 SendBuf[3] = StBuf[3];
tamaki 0:d14a5eeef3d4 134 SendBuf[4] = StBuf[2];
tamaki 0:d14a5eeef3d4 135 SendBuf[5] = StBuf[1];
tamaki 0:d14a5eeef3d4 136 SendBuf[6] = StBuf[0];
tamaki 0:d14a5eeef3d4 137
tamaki 0:d14a5eeef3d4 138 SendBuf[7] = msg2[10];
tamaki 0:d14a5eeef3d4 139 SendBuf[8] = msg2[9];
tamaki 0:d14a5eeef3d4 140 SendBuf[9] = msg2[8];
tamaki 0:d14a5eeef3d4 141 SendBuf[10] = msg2[7];
tamaki 0:d14a5eeef3d4 142
tamaki 0:d14a5eeef3d4 143 SendBuf[11] = msg1[3];
tamaki 0:d14a5eeef3d4 144 SendBuf[12] = msg1[8];
tamaki 0:d14a5eeef3d4 145 SendBuf[13] = msg1[13];
tamaki 0:d14a5eeef3d4 146 pc.printf(SendBuf);
tamaki 0:d14a5eeef3d4 147 cnt++;
tamaki 0:d14a5eeef3d4 148 if(cnt == 16) cnt = 0;
tamaki 0:d14a5eeef3d4 149 }
tamaki 0:d14a5eeef3d4 150
tamaki 0:d14a5eeef3d4 151 int main() {
tamaki 0:d14a5eeef3d4 152 pc.baud(38400);
tamaki 0:d14a5eeef3d4 153 cnt = 0;
tamaki 0:d14a5eeef3d4 154 sw1.mode(PullUp);
tamaki 0:d14a5eeef3d4 155 sw2.mode(PullUp);
tamaki 0:d14a5eeef3d4 156 sw3.mode(PullUp);
tamaki 0:d14a5eeef3d4 157 lcd.cls();
tamaki 0:d14a5eeef3d4 158 lcd.printf(msg1);
tamaki 0:d14a5eeef3d4 159 lcd.locate(0,1);
tamaki 0:d14a5eeef3d4 160 lcd.printf(msg2);
tamaki 0:d14a5eeef3d4 161 pc.printf("Serial Communication Start\n");
tamaki 0:d14a5eeef3d4 162 SendBuf[0] = 'C';
tamaki 0:d14a5eeef3d4 163 SendBuf[1] = 'S';
tamaki 0:d14a5eeef3d4 164 SendBuf[14] = '\r';
tamaki 0:d14a5eeef3d4 165 SendBuf[15] = '\n';
tamaki 0:d14a5eeef3d4 166 SendBuf[16] = 0x00;
tamaki 0:d14a5eeef3d4 167 flg_rdet = 0;
tamaki 0:d14a5eeef3d4 168 recv_cnt = 0;
tamaki 0:d14a5eeef3d4 169 flipper.attach(&flip, 0.75); // the address of the function to be attached (flip) and the interval (2 seconds)
tamaki 0:d14a5eeef3d4 170 pc.attach(rxRecieve, Serial::RxIrq);
tamaki 0:d14a5eeef3d4 171 while (1) {
tamaki 0:d14a5eeef3d4 172 }
tamaki 0:d14a5eeef3d4 173 }