HEPTA-Sat Hands-On
/
0000_hepta_check
full
Diff: main.cpp
- Revision:
- 0:abaad4af646d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue May 02 07:11:34 2017 +0000 @@ -0,0 +1,319 @@ +#include "mbed.h" +#include "Hepta.h" + +HeptaGPS gps(p13,p14);//tx,rx(Din,Data_Out) +HeptaBattery battery(p16,p29,p26);//(battery voltage,power cotrol transister,3.3V regulater enable) +SDFileSystem sd(p11, p12, p13, p15, "sd");//(cmd,dat0,clk,dat3) +HeptaGyro gyro(p28,p27,0xD4);//(sda,scl,I2C address) +HeptaAccel accel(p28,p27,0x38);//(sda,scl,I2C address) +TextLCD_SB1602E lcd(p28,p27,0x7C);//(sda,scl,I2C address) +ATP3011 talk(p28, p27,0x5C); //(sda,scl,I2C address) +HeptaXbee xbee(p9, p10);//tx,rx(Din,Dout) + +HeptaCamera camera( + p28,p27, // SDA,SCL(I2C / SCCB) + p21,p22,p23, // VSYNC,HREF,WEN(FIFO) + p5,p6,p7,p8,p30,p17,p25,p18, // D7-D0 + p20,p24,p19) ; // RRST,OE,RCK + +//----SERIAL----// + +//----LED----// +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + +int main() { + char mode; + pc.baud(9600); + //pc.baud(921600); + while(1) { + pc.printf("Hello world. This is DEMO mode\r\n"); + pc.printf("Please select mode.\r\n"); + pc.printf("1:LED Mode\r\n"); + pc.printf("2:LED Count Mode\r\n"); + pc.printf("3:Electrical Vlotage Detection Mode\r\n"); + pc.printf("4:Battery Charge Mode\n\r"); + pc.printf("5:Battery Fast Charge Mode\r\n"); + pc.printf("6:SD Card Check Mode\n\r"); + pc.printf("7:Storing Battery Voltage to SD Card Mode\r\n"); + pc.printf("8:Gyro Sensor Mode\r\n"); + pc.printf("9:Accel Sensor Mode\r\n"); + pc.printf("a:GPS Sensor Mode\r\n"); + pc.printf("b:Camera Mode\r\n"); + pc.printf("c:LCD Mode\r\n"); + pc.printf("d:Voice Mode\r\n"); + pc.printf("e:Xbee Mode\r\n"); + pc.printf("f:All Data Downlink to Pc Mode\r\n"); + pc.printf("g:All Data Downlink to Pc by Xbee Mode\r\n"); + pc.printf("h:High speed sensing mode for gyro & accel Mode\r\n"); + pc.printf("i:High speed sensing mode and caluclate to deg\r\n"); + mode = pc.putc(pc.getc()); + pc.printf("\n\r"); + if(mode=='0'){ + pc.printf("0:Under construction!!!\n\r"); + }else if(mode=='1'){ + pc.printf("1:LED Mode\n\r"); + while(1) { + led1 = 1; + wait(0.2); + led2 = 0; + wait(0.2); + } + }else if(mode=='2'){ + pc.printf("2:LED Count Mode\n\r"); + int k=1; //初期化 + while(1) { + if(k>0x10)k=1; //kが0b00010000になったら0b00000001にする + led1 = k & 0x01; + led2 = k & 0x02; + led3 = k & 0x04; + led4 = k & 0x08; + k=k<<1; //kの中を左に1つ移動 + wait(0.1); //0.1秒待つ + } + }else if(mode=='3'){ + pc.printf("3:Electrical Vlotage Detection Mode\n\r"); + int i,dsize; + float bt; + char abt[4]; + pc.printf("Hellow\r\n"); + while(1){ + battery.vol(&bt); + battery.vol_u16(abt,&dsize); + pc.printf("Vol = %f\r\n",bt); + pc.printf("Vol_u16 = "); + for(i=1;i<dsize;i++){ + pc.putc(abt[i]); + } + pc.printf("\r\n"); + wait(1.0); + } + }else if (mode=='4'){ + pc.printf("4:Battery Charge Mode\n\r"); + float bt; + int save_flag; + while(1) { + battery.charge(&save_flag); + battery.vol(&bt); + pc.printf("Vol = %f\r\n",bt); + pc.printf("save = %d\r\n",save_flag); + if(save_flag == 0){ + pc.printf("Vol = %f\r\n",bt); + } + wait(1.0); + } + }else if (mode=='5'){ + pc.printf("5:Fast Cherge Mode\n\r"); + float bt; + battery.vol(&bt); + pc.printf("V = %f\r\n",bt); + wait(3.0); + while(1) { + battery.fast_charge(); + } + }else if (mode=='6'){ + pc.printf("6:SD Card Check Mode\n\r"); + mkdir("/sd/mydir", 0777); + FILE *fp = fopen("/sd/mydir/sdtest.txt", "w"); + if(fp == NULL) { + error("Could not open file for write\n"); + } + fprintf(fp, "Hello My name is HEPTA!"); + fclose(fp); + }else if (mode=='7'){ + pc.printf("7:Storing Battery Voltage to SD Card Mode\n\r"); + float bt; + int i; + mkdir("/sd/mydir", 0777); + FILE *fp = fopen("/sd/mydir/battery.txt", "w"); + if(fp == NULL) { + error("Could not open file for write\n"); + } + for(i=1;i<=10;i++){ + battery.vol(&bt); + pc.printf("Vol = %f\r\n",bt); + fprintf(fp,"%f\r\n",bt); + wait(1.0); + } + fclose(fp); + pc.printf("End\n\r"); + }else if (mode=='8'){ + pc.printf("8:Gyro Sensor Mode\n\r"); + float gx,gy,gz; + pc.printf("X Y Z\r\n"); + while(1){ + gyro.sensing(&gx,&gy,&gz); + pc.printf("%2.5f %2.5f %2.5f\r\n",gx,gy,gz); + wait(1.0); + } + }else if (mode=='9'){ + pc.printf("9:Accel Sensor Mode\n\r"); + float ax,ay,az; + pc.printf("X Y Z\r\n"); + while(1){ + accel.sensing(&ax,&ay,&az); + pc.printf("%2.5f %2.5f %2.5f\r\n",ax,ay,az); + wait(1.0); + } + }else if (mode=='a'){ + pc.printf("a:GPS Sensor Mode\n\r"); + float lad,log; + while(1) { + gps.sensing(&lad,&log); + pc.printf("Lad = %2.5f Log =%2.5f\r\n",lad,log); + } + }else if (mode=='b'){ + pc.printf("b:Camera Mode\n\r"); + //camera.shoot2(); + camera.shoot(); + wait(10); + pc.printf("Finish!!\n\r"); + }else if (mode=='c'){ + pc.printf("c:LCD Mode\n\r"); + int i; + lcd.printf(0,"Hello\r"); + lcd.printf(1,"World\r"); + for(i=1;i<10;i++){ + lcd.printf(0,"num = %d\r",i); + wait(1.0); + } + }else if (mode=='d'){ + pc.printf("d:Voice Mode\r\n"); + talk.Synthe("konnichiha\r"); + break; + }else if (mode=='e'){ + pc.printf("e:Xbee Mode\r\n"); + int i=0,rcmd=0,cmdflag=0; + //xbee_serial.printf("Count Up!\r"); + xbee.printf("Count Up!\r"); + while(1){ + //xbee_serial.printf("num = %d\r",i); + xbee.printf("num = %d\r",i); + i++; + wait(1.0); + xbee.xbee_recieve(&rcmd,&cmdflag); + pc.printf("rcmd=%d, cmdflag=%d\r\n",rcmd, cmdflag); + if (cmdflag == 1){ + if (rcmd == 'a'){ + pc.printf("Command Get %d\r\n",rcmd); + xbee.printf("HEPTA Uplink OK\r"); + } + xbee.initialize(); + } + } + }else if(mode=='f'){ + pc.printf("f:All Data Downlink to Pc Mode\r\n"); + char gx[4],gy[4],gz[4],ax[4],ay[4],az[4],lad[8],log[8],bt[4]; + char ddata[44]; + int dsize[4]; + while(1) { + gyro.sensing_u16(gx,gy,gz,&dsize[0]); + accel.sensing_u16(ax,ay,az,&dsize[1]); + gps.sensing_u16(lad,log,&dsize[2]); + battery.vol_u16(bt,&dsize[3]); + //gyro.x_u16(gx,4); + pc_transmit(ddata,44,gx,gy,gz,ax,ay,az,lad,log,bt,dsize[0],dsize[0],dsize[0],dsize[1],dsize[1],dsize[1],dsize[2],dsize[2],dsize[3],9); + } + }else if(mode=='g'){ + pc.printf("g:All Data Downlink to Pc by Xbee Mode\r\n"); + char gx[4],gy[4],gz[4],ax[4],ay[4],az[4],lad[8],log[8],bt[4]; + char ddata[44]; + int dsize[4]; + while(1) { + gyro.sensing_u16(gx,gy,gz,&dsize[0]); + accel.sensing_u16(ax,ay,az,&dsize[1]); + gps.sensing_u16(lad,log,&dsize[2]); + battery.vol_u16(bt,&dsize[3]); + //gyro.x_u16(gx,4); + xbee.xbee_transmit(ddata,44,gx,gy,gz,ax,ay,az,lad,log,bt,dsize[0],dsize[0],dsize[0],dsize[1],dsize[1],dsize[1],dsize[2],dsize[2],dsize[3],9); + } + }else if(mode=='h'){ + pc.printf("h:High speed sensing mode for gyro & accel Mode\r\n"); + char gx[4],gy[4],gz[4],ax[4],ay[4],az[4],lad[8],log[8],bt[4]; + char ddata[44]; + int dsize[4]; + lad[0] = '0'; + lad[1] = '0'; + lad[2] = '0'; + lad[3] = '0'; + lad[4] = '0'; + lad[5] = '0'; + lad[6] = '0'; + lad[7] = '0'; + log[0] = '0'; + log[1] = '0'; + log[2] = '0'; + log[3] = '0'; + log[4] = '0'; + log[5] = '0'; + log[6] = '0'; + log[7] = '0'; + dsize[2] = 8; + //pc.printf("test"); + wait(5.0); + while(1) { + //pc.printf("test2"); + gyro.sensing_u16(gx,gy,gz,&dsize[0]); + accel.sensing_u16(ax,ay,az,&dsize[1]); + //gps.sensing_u16(lad,log,&dsize[2]); + battery.vol_u16(bt,&dsize[3]); + //gyro.x_u16(gx,4); + //pc.printf("ffff"); + wait(0.001); + pc_transmit(ddata,44,gx,gy,gz,ax,ay,az,lad,log,bt,dsize[0],dsize[0],dsize[0],dsize[1],dsize[1],dsize[1],dsize[2],dsize[2],dsize[3],9); + //pc.printf("cccc"); + } + }else if(mode=='i'){ + pc.printf("i:High speed sensing mode and caluclate to deg\r\n"); + float gx_ang,gy_ang,gz_ang; + float dt; + float gx,gy,gz; + //char gx[4],gy[4],gz[4],ax[4],ay[4],az[4],lad[8],log[8],bt[4]; + char ddata[44]; + int dsize[4]; + /*lad[0] = '0'; + lad[1] = '0'; + lad[2] = '0'; + lad[3] = '0'; + lad[4] = '0'; + lad[5] = '0'; + lad[6] = '0'; + lad[7] = '0'; + log[0] = '0'; + log[1] = '0'; + log[2] = '0'; + log[3] = '0'; + log[4] = '0'; + log[5] = '0'; + log[6] = '0'; + log[7] = '0'; + dsize[2] = 8;*/ + //pc.printf("test"); + wait(5.0); + dt = 0.001; + while(1) { + //pc.printf("test2"); + gyro.sensing(&gx,&gy,&gz); + //gyro.sensing_u16(gx,gy,gz,&dsize[0]); + //accel.sensing_u16(ax,ay,az,&dsize[1]); + //gps.sensing_u16(lad,log,&dsize[2]); + //attery.vol_u16(bt,&dsize[3]); + //gyro.x_u16(gx,4); + //pc.printf("ffff"); + //gyro data to deg + gx_ang += (((gx+1.92556)))*dt; + gy_ang += (((gy+0.41286)))*dt; + gz_ang += (((gz-0.820308)))*dt; + pc.printf("%2.5f %2.5f %2.5f\r\n",gx_ang,gy_ang,gz_ang); + //pc.printf("%2.5f %2.5f %2.5f\r\n",gx+1.92556,gy+0.41286,gz-0.820308); + wait(0.001); + //pc_transmit(ddata,44,gx,gy,gz,ax,ay,az,lad,log,bt,dsize[0],dsize[0],dsize[0],dsize[1],dsize[1],dsize[1],dsize[2],dsize[2],dsize[3],9); + //pc.printf("cccc"); + } + }else{ + pc.printf("Under construction!!!\r\n"); + } + } +}