今までのメインプログラムとGPSのプログラムを統合した。

Dependencies:   HMC5883L SDFileSystem TextOLED mbed

Fork of GPS_Test05 by basyo matsuo

Committer:
basyo38
Date:
Thu Feb 15 05:04:43 2018 +0000
Revision:
2:9f8fa9035357
Parent:
1:04787f83fac1
Child:
4:39845036d492
2018/2/15??

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takeuchi 0:f3ff53b5b707 1 //GPS GT-720F Test05
basyo38 2:9f8fa9035357 2
basyo38 2:9f8fa9035357 3
takeuchi 0:f3ff53b5b707 4 #include "mbed.h"
basyo38 2:9f8fa9035357 5 #include "TextOLED.h"
basyo38 2:9f8fa9035357 6 #include "SDFileSystem.h"
basyo38 2:9f8fa9035357 7 #include "stdio.h"
Joeatsumi 1:04787f83fac1 8
takeuchi 0:f3ff53b5b707 9
takeuchi 0:f3ff53b5b707 10 #define ON 1
takeuchi 0:f3ff53b5b707 11 #define OFF 0
basyo38 2:9f8fa9035357 12
basyo38 2:9f8fa9035357 13
basyo38 2:9f8fa9035357 14 AnalogIn alt(p20); //高度計読み取り
basyo38 2:9f8fa9035357 15 InterruptIn speedcount(p17); //機速用のフォトインタラプタ読み取り
basyo38 2:9f8fa9035357 16 InterruptIn rpmcount(p21); //回転数用のフォトインタラプタ読み取り
basyo38 2:9f8fa9035357 17 InterruptIn Log_Switch(p26);//ログスイッチ読み取り
basyo38 2:9f8fa9035357 18
basyo38 2:9f8fa9035357 19
basyo38 2:9f8fa9035357 20 Serial pc(USBTX, USBRX);
basyo38 2:9f8fa9035357 21 Serial control_com(p28, p27);//制御基板との通信用
basyo38 2:9f8fa9035357 22 Serial android_com(p9, p10); //Androidとの通信用txrx!!
basyo38 2:9f8fa9035357 23
basyo38 2:9f8fa9035357 24 Serial gps(p13,p14);// tx, rx
basyo38 2:9f8fa9035357 25
basyo38 2:9f8fa9035357 26 TextOLED pilot_oled(p11, p12 ,p30 ,p29 ,p15, p16); // RS, E, DB4, DB5, DB6, DB7 有機EL!!
basyo38 2:9f8fa9035357 27 SDFileSystem sd(p5, p6, p7, p8, "sd");//SDpinの番号 3,7,5,2 //1pin--Vout,4pin--Vout,6pin--GND,8pin--Vout
basyo38 2:9f8fa9035357 28
basyo38 2:9f8fa9035357 29
basyo38 2:9f8fa9035357 30 DigitalOut led1(LED1);
basyo38 2:9f8fa9035357 31 DigitalOut led2(LED2);
basyo38 2:9f8fa9035357 32 DigitalOut led3(LED3);
basyo38 2:9f8fa9035357 33 DigitalOut led4(LED4);
basyo38 2:9f8fa9035357 34
basyo38 2:9f8fa9035357 35
basyo38 2:9f8fa9035357 36 //音システム用
basyo38 2:9f8fa9035357 37 DigitalOut soundsystem1(p19);
basyo38 2:9f8fa9035357 38 DigitalOut soundsystem2(p24);
basyo38 2:9f8fa9035357 39 DigitalOut soundsystem3(p25);
basyo38 2:9f8fa9035357 40
basyo38 2:9f8fa9035357 41 DigitalOut option(p22);//toGPS and jailo
basyo38 2:9f8fa9035357 42
basyo38 2:9f8fa9035357 43
basyo38 2:9f8fa9035357 44 //タイマー割り込み宣言
basyo38 2:9f8fa9035357 45 Ticker ticker;//updateのタイマー割り込み
basyo38 2:9f8fa9035357 46 Timer t,t1;
basyo38 2:9f8fa9035357 47
basyo38 2:9f8fa9035357 48 int speedcounter = 0, rpmcounter = 0, min = 0, sec = 0, i;
basyo38 2:9f8fa9035357 49 int oldspeed = 0, oldrpm = 0;
basyo38 2:9f8fa9035357 50 int log_count = 0;
basyo38 2:9f8fa9035357 51 int SD_count = 0;
basyo38 2:9f8fa9035357 52 int up2=0,up1=0,down1=0,down2=0,E_neut=0;
basyo38 2:9f8fa9035357 53 int left1=0,left2=0,right1=0,right2=0,R_neut=0;
basyo38 2:9f8fa9035357 54 int send_compass=0;
basyo38 2:9f8fa9035357 55
basyo38 2:9f8fa9035357 56
basyo38 2:9f8fa9035357 57 double time_s = 0,time_ms=0,time1=0,time2=0, speed = 0, rpm = 0, height = 0,compass = 0;
basyo38 2:9f8fa9035357 58
basyo38 2:9f8fa9035357 59 char ele;
basyo38 2:9f8fa9035357 60 char rud;
basyo38 2:9f8fa9035357 61 char e_trim='e',r_trim='r';
basyo38 2:9f8fa9035357 62 char compass_array[4] = "000";
basyo38 2:9f8fa9035357 63 char data;
basyo38 2:9f8fa9035357 64 char send_buff1[24]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
basyo38 2:9f8fa9035357 65
basyo38 2:9f8fa9035357 66
basyo38 2:9f8fa9035357 67 unsigned char Log_flag = OFF;
basyo38 2:9f8fa9035357 68 unsigned char SD_flag = OFF;
basyo38 2:9f8fa9035357 69
basyo38 2:9f8fa9035357 70
basyo38 2:9f8fa9035357 71
basyo38 2:9f8fa9035357 72 //プロトタイプ宣言
basyo38 2:9f8fa9035357 73 //void init();
basyo38 2:9f8fa9035357 74 //void myled(int a,int b,int c,int d);
basyo38 2:9f8fa9035357 75 void SD_log();
basyo38 2:9f8fa9035357 76 void OLEDdisplay_print();
basyo38 2:9f8fa9035357 77 void spd_f();
basyo38 2:9f8fa9035357 78 void rpm_f();
basyo38 2:9f8fa9035357 79 void spd_c();
basyo38 2:9f8fa9035357 80 void rpm_c();
basyo38 2:9f8fa9035357 81 void control_communication();
basyo38 2:9f8fa9035357 82 void android_communication();
basyo38 2:9f8fa9035357 83 void update();
basyo38 2:9f8fa9035357 84 void altitude_f();
basyo38 2:9f8fa9035357 85 void compass_f();
basyo38 2:9f8fa9035357 86 void Log_Switch_f();
basyo38 2:9f8fa9035357 87 void CGRAM_1();
basyo38 2:9f8fa9035357 88 void CGRAM_2();
basyo38 2:9f8fa9035357 89 void CGRAM_3();
basyo38 2:9f8fa9035357 90 void CGRAM_4();
basyo38 2:9f8fa9035357 91 void CGRAM_5();
basyo38 2:9f8fa9035357 92
basyo38 2:9f8fa9035357 93
basyo38 2:9f8fa9035357 94 //=======================================================================//
basyo38 2:9f8fa9035357 95
basyo38 2:9f8fa9035357 96
Joeatsumi 1:04787f83fac1 97
Joeatsumi 1:04787f83fac1 98 LocalFileSystem local("local");
takeuchi 0:f3ff53b5b707 99
Joeatsumi 1:04787f83fac1 100
Joeatsumi 1:04787f83fac1 101 FILE *fp;
takeuchi 0:f3ff53b5b707 102
takeuchi 0:f3ff53b5b707 103 int main() {
takeuchi 0:f3ff53b5b707 104
takeuchi 0:f3ff53b5b707 105 char c;
basyo38 2:9f8fa9035357 106 int i3,rlock,stn;
takeuchi 0:f3ff53b5b707 107 char gps_data[256];
takeuchi 0:f3ff53b5b707 108 char ns,ew;
takeuchi 0:f3ff53b5b707 109 float time,hokui,tokei;
takeuchi 0:f3ff53b5b707 110 float g_hokui,g_tokei;
takeuchi 0:f3ff53b5b707 111 float d_hokui,m_hokui,d_tokei,m_tokei;
Joeatsumi 1:04787f83fac1 112
Joeatsumi 1:04787f83fac1 113 int h_time=0,m_time=0,s_time=0;
Joeatsumi 1:04787f83fac1 114
basyo38 2:9f8fa9035357 115 //mkdir("/sd/gps_data", 0777);//まずsdのフォルダをつくる。
Joeatsumi 1:04787f83fac1 116
takeuchi 0:f3ff53b5b707 117 gps.baud(9600);
takeuchi 0:f3ff53b5b707 118
basyo38 2:9f8fa9035357 119 pc.printf("Start TBT!!\n");
basyo38 2:9f8fa9035357 120
basyo38 2:9f8fa9035357 121 led1=1;
basyo38 2:9f8fa9035357 122 led2=1;
basyo38 2:9f8fa9035357 123 led3=1;
basyo38 2:9f8fa9035357 124 led4=1;
basyo38 2:9f8fa9035357 125 wait(0.01);
basyo38 2:9f8fa9035357 126 pilot_oled.cls();
basyo38 2:9f8fa9035357 127 wait(0.001);
basyo38 2:9f8fa9035357 128 CGRAM_1();
basyo38 2:9f8fa9035357 129 CGRAM_2();
basyo38 2:9f8fa9035357 130 CGRAM_3();
basyo38 2:9f8fa9035357 131 CGRAM_4();
basyo38 2:9f8fa9035357 132 CGRAM_5();
basyo38 2:9f8fa9035357 133 // myled(1,1,0,0);
basyo38 2:9f8fa9035357 134 wait(2);
basyo38 2:9f8fa9035357 135 mkdir("/sd/mydir", 0777);
basyo38 2:9f8fa9035357 136 android_com.baud(115200);
basyo38 2:9f8fa9035357 137 android_com.format(8,Serial::None,1);
basyo38 2:9f8fa9035357 138
basyo38 2:9f8fa9035357 139 control_com.attach(control_communication, Serial::RxIrq);
basyo38 2:9f8fa9035357 140 control_com.baud(115200);
basyo38 2:9f8fa9035357 141
basyo38 2:9f8fa9035357 142 t.start();
basyo38 2:9f8fa9035357 143 t1.start();
basyo38 2:9f8fa9035357 144
basyo38 2:9f8fa9035357 145 Log_Switch.rise(&Log_Switch_f);
basyo38 2:9f8fa9035357 146 speedcount.rise(&spd_c);
basyo38 2:9f8fa9035357 147 rpmcount.rise(&rpm_c);
basyo38 2:9f8fa9035357 148 ticker.attach(update,1);//1s更新
basyo38 2:9f8fa9035357 149 //time1 = t1.read_ms();
basyo38 2:9f8fa9035357 150
basyo38 2:9f8fa9035357 151
basyo38 2:9f8fa9035357 152
takeuchi 0:f3ff53b5b707 153 while (1) {
basyo38 2:9f8fa9035357 154
basyo38 2:9f8fa9035357 155
basyo38 2:9f8fa9035357 156 // pc.printf("There is TBT!!\n");
basyo38 2:9f8fa9035357 157 led3=!led3;
basyo38 2:9f8fa9035357 158 if(min >=30) { //30分経過時、タイマーリセット
basyo38 2:9f8fa9035357 159 t.reset();
basyo38 2:9f8fa9035357 160 }
basyo38 2:9f8fa9035357 161 if(Log_flag == OFF) { //log取るごとにリセット
basyo38 2:9f8fa9035357 162 t.stop();
basyo38 2:9f8fa9035357 163 t.reset();
basyo38 2:9f8fa9035357 164 } else {
basyo38 2:9f8fa9035357 165 t.start();
basyo38 2:9f8fa9035357 166 }
basyo38 2:9f8fa9035357 167 time_s = t.read();//時間取得
basyo38 2:9f8fa9035357 168 min = (int)(time_s) / 60;
basyo38 2:9f8fa9035357 169 sec = (int)time_s % 60;
basyo38 2:9f8fa9035357 170 wait(0.0002);
basyo38 2:9f8fa9035357 171
basyo38 2:9f8fa9035357 172
basyo38 2:9f8fa9035357 173 i3=0;
takeuchi 0:f3ff53b5b707 174 while(gps.getc()!='$'){
takeuchi 0:f3ff53b5b707 175 }
takeuchi 0:f3ff53b5b707 176
basyo38 2:9f8fa9035357 177 while( (gps_data[i3]=gps.getc()) != '\r'){
basyo38 2:9f8fa9035357 178 i3++;
basyo38 2:9f8fa9035357 179 if(i3==256){
Joeatsumi 1:04787f83fac1 180
basyo38 2:9f8fa9035357 181 i3=255;
takeuchi 0:f3ff53b5b707 182 break;
takeuchi 0:f3ff53b5b707 183 }
takeuchi 0:f3ff53b5b707 184 }
basyo38 2:9f8fa9035357 185 gps_data[i3]='\0';
takeuchi 0:f3ff53b5b707 186
takeuchi 0:f3ff53b5b707 187 //test
takeuchi 0:f3ff53b5b707 188 /* Test data
takeuchi 0:f3ff53b5b707 189 rlock=1;
takeuchi 0:f3ff53b5b707 190 hokui=3532.25024; //=>35.537502
takeuchi 0:f3ff53b5b707 191 tokei=13751.86820;//=>137.864471
takeuchi 0:f3ff53b5b707 192 */
takeuchi 0:f3ff53b5b707 193 if( sscanf(gps_data, "GPGGA,%f,%f,%c,%f,%c,%d,%d",&time,&hokui,&ns,&tokei,&ew,&rlock,&stn) >= 1){
takeuchi 0:f3ff53b5b707 194 if(rlock >= 1){
Joeatsumi 1:04787f83fac1 195
Joeatsumi 1:04787f83fac1 196 //time set
Joeatsumi 1:04787f83fac1 197 h_time=int(time/10000);
Joeatsumi 1:04787f83fac1 198 m_time=int((time-h_time*10000)/100);
Joeatsumi 1:04787f83fac1 199 s_time=int(time-h_time*10000-m_time*100);
Joeatsumi 1:04787f83fac1 200 h_time=h_time+9;//UTC =>JST
Joeatsumi 1:04787f83fac1 201
takeuchi 0:f3ff53b5b707 202 //hokui
takeuchi 0:f3ff53b5b707 203 d_hokui=int(hokui/100);
takeuchi 0:f3ff53b5b707 204 m_hokui=(hokui-d_hokui*100)/60;
takeuchi 0:f3ff53b5b707 205 g_hokui=d_hokui+m_hokui;
takeuchi 0:f3ff53b5b707 206 //tokei
takeuchi 0:f3ff53b5b707 207 d_tokei=int(tokei/100);
takeuchi 0:f3ff53b5b707 208 m_tokei=(tokei-d_tokei*100)/60;
takeuchi 0:f3ff53b5b707 209 g_tokei=d_tokei+m_tokei;
takeuchi 0:f3ff53b5b707 210 //g_hokui=int(hokui/100)+(hokui-int(hokui/100))/60;
takeuchi 0:f3ff53b5b707 211 //g_tokei=int(tokei/100)+(tokei-int(tokei/100))/60;
Joeatsumi 1:04787f83fac1 212
takeuchi 0:f3ff53b5b707 213
Joeatsumi 1:04787f83fac1 214 //==================================================//
Joeatsumi 1:04787f83fac1 215
Joeatsumi 1:04787f83fac1 216 pc.printf("%2d,%2d,%2d,%4.6f,,%3.6f,\r\n",h_time,m_time,s_time,g_tokei,g_hokui);
Joeatsumi 1:04787f83fac1 217
basyo38 2:9f8fa9035357 218 // fp = fopen("/sd/gps_data/log.txt", "a");
Joeatsumi 1:04787f83fac1 219
Joeatsumi 1:04787f83fac1 220 // fprintf(fp,"%2d,%2d,%2d,%4.6f,,%3.6f,\r\n",h_time,m_time,s_time,g_tokei,g_hokui);
basyo38 2:9f8fa9035357 221 // fprintf(fp,"%4.6f,%3.6f,\r\n",g_tokei,g_hokui);
basyo38 2:9f8fa9035357 222 // fclose(fp);
Joeatsumi 1:04787f83fac1 223
Joeatsumi 1:04787f83fac1 224 //==================================================//
Joeatsumi 1:04787f83fac1 225
Joeatsumi 1:04787f83fac1 226
Joeatsumi 1:04787f83fac1 227
Joeatsumi 1:04787f83fac1 228 //}
takeuchi 0:f3ff53b5b707 229 }
takeuchi 0:f3ff53b5b707 230 }//if
takeuchi 0:f3ff53b5b707 231 }//while
takeuchi 0:f3ff53b5b707 232 }//main
takeuchi 0:f3ff53b5b707 233
takeuchi 0:f3ff53b5b707 234
basyo38 2:9f8fa9035357 235 void SD_log() //SDログ関数
basyo38 2:9f8fa9035357 236 {
basyo38 2:9f8fa9035357 237 // __disable_irq();
basyo38 2:9f8fa9035357 238 led2 = 1;
basyo38 2:9f8fa9035357 239 if (Log_flag == ON) {
basyo38 2:9f8fa9035357 240 FILE *fp;
basyo38 2:9f8fa9035357 241 /*
basyo38 2:9f8fa9035357 242 fp = fopen("/sd/log.txt", "a");
basyo38 2:9f8fa9035357 243
basyo38 2:9f8fa9035357 244 fprintf(fp,"%2d,%2d,%2d,%4.6f,,%3.6f,\r\n",h_time,m_time,s_time,g_tokei,g_hokui);
basyo38 2:9f8fa9035357 245 fprintf(fp,"%4.6f,%3.6f,\r\n",g_tokei,g_hokui);
basyo38 2:9f8fa9035357 246 fclose(fp);
basyo38 2:9f8fa9035357 247 */
basyo38 2:9f8fa9035357 248
basyo38 2:9f8fa9035357 249 fp = fopen("/sd/mydir/TP.txt", "a");
basyo38 2:9f8fa9035357 250
basyo38 2:9f8fa9035357 251 if (NULL == fp) {
basyo38 2:9f8fa9035357 252 pilot_oled.locate(0, 0);
basyo38 2:9f8fa9035357 253 pilot_oled.printf("There is no SD!!");
basyo38 2:9f8fa9035357 254 pc.printf("There is no SD!!\n");
basyo38 2:9f8fa9035357 255 error("Could not open file for write \n");
basyo38 2:9f8fa9035357 256 } else {
basyo38 2:9f8fa9035357 257 fprintf(fp, "NO:%d,%02d:%02d,%1.0f,%0.3f,%0.3f,%0.3f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
basyo38 2:9f8fa9035357 258 SD_count, min, sec, rpm, speed, height,compass,up2,up1,E_neut,down1,down2,left2,left1,R_neut,right1,right2);
basyo38 2:9f8fa9035357 259 // fprintf(fp,"%4.6f,;%3.6f,;\r\n",g_tokei,g_hokui);
basyo38 2:9f8fa9035357 260 fclose(fp);
basyo38 2:9f8fa9035357 261 //操舵データ
basyo38 2:9f8fa9035357 262 }
basyo38 2:9f8fa9035357 263 }
basyo38 2:9f8fa9035357 264 led2 = 0;
basyo38 2:9f8fa9035357 265 // __enable_irq();
basyo38 2:9f8fa9035357 266 }
takeuchi 0:f3ff53b5b707 267
basyo38 2:9f8fa9035357 268 void Log_Switch_f()//ログスイッチ
basyo38 2:9f8fa9035357 269 {
basyo38 2:9f8fa9035357 270 log_count++;
basyo38 2:9f8fa9035357 271 if (log_count == 1) {
basyo38 2:9f8fa9035357 272 Log_flag = ON;
basyo38 2:9f8fa9035357 273 SD_count++;
basyo38 2:9f8fa9035357 274 } else if (log_count == 2) {
basyo38 2:9f8fa9035357 275 Log_flag = OFF;
basyo38 2:9f8fa9035357 276 log_count = 0;
basyo38 2:9f8fa9035357 277 }
basyo38 2:9f8fa9035357 278 }
basyo38 2:9f8fa9035357 279
basyo38 2:9f8fa9035357 280 void OLEDdisplay_print() //有機EL表示用関数
basyo38 2:9f8fa9035357 281 {
basyo38 2:9f8fa9035357 282 led3!=led3;
basyo38 2:9f8fa9035357 283 //__disable_irq();
basyo38 2:9f8fa9035357 284 /* if(Log_flag == OFF) {
basyo38 2:9f8fa9035357 285 wait_ms(0.7);
basyo38 2:9f8fa9035357 286 pilot_oled.locate(0, 0);
basyo38 2:9f8fa9035357 287 pilot_oled.printf("log");//時間表示
basyo38 2:9f8fa9035357 288 pilot_oled.locate(3, 0);
basyo38 2:9f8fa9035357 289 pilot_oled.putc(0xB5);//オ
basyo38 2:9f8fa9035357 290 pilot_oled.locate(4, 0);
basyo38 2:9f8fa9035357 291 pilot_oled.putc(0xBE);//セ
basyo38 2:9f8fa9035357 292 pilot_oled.locate(5, 0);
basyo38 2:9f8fa9035357 293 pilot_oled.putc(0x21);//!
basyo38 2:9f8fa9035357 294 } else {
basyo38 2:9f8fa9035357 295 pilot_oled.locate(0, 0);
basyo38 2:9f8fa9035357 296 pilot_oled.printf("%02d:%02d ", min, sec);//時間表示
basyo38 2:9f8fa9035357 297 }
basyo38 2:9f8fa9035357 298 wait_ms(0.7);*/
basyo38 2:9f8fa9035357 299 pilot_oled.locate(0, 1);
basyo38 2:9f8fa9035357 300 pilot_oled.printf("r%3.0f s%4.1f h%4.1f", rpm,speed,height);//センサーの値
basyo38 2:9f8fa9035357 301 wait_ms(0.7);
basyo38 2:9f8fa9035357 302
basyo38 2:9f8fa9035357 303 pilot_oled.locate(4, 0);
basyo38 2:9f8fa9035357 304 pilot_oled.printf("%1d", send_compass);
basyo38 2:9f8fa9035357 305 pilot_oled.locate(11, 0);
basyo38 2:9f8fa9035357 306 if (Log_flag == ON) pilot_oled.printf("ON ");
basyo38 2:9f8fa9035357 307 else pilot_oled.printf("OFF");
basyo38 2:9f8fa9035357 308
basyo38 2:9f8fa9035357 309 // pilot_oled.locate(0, 0);
basyo38 2:9f8fa9035357 310 // pilot_oled.printf("count:%d",rpmcounter);//時間表示
basyo38 2:9f8fa9035357 311 wait_ms(0.7);
basyo38 2:9f8fa9035357 312 // __enable_irq();
basyo38 2:9f8fa9035357 313 }
basyo38 2:9f8fa9035357 314
basyo38 2:9f8fa9035357 315 void compass_f()//高度の変換
basyo38 2:9f8fa9035357 316 {
basyo38 2:9f8fa9035357 317 compass=atoi(compass_array);
basyo38 2:9f8fa9035357 318
basyo38 2:9f8fa9035357 319 if(compass<22.5&&compass>=0||compass<360&&compass>=337.5)send_compass=1;//北
basyo38 2:9f8fa9035357 320 else if(compass<67.5&&compass>=22.5)send_compass=2;//
basyo38 2:9f8fa9035357 321 else if(compass<112.5&&compass>=67.5)send_compass=3;//東
basyo38 2:9f8fa9035357 322 else if(compass<157.5&&compass>=112.5)send_compass=4;//
basyo38 2:9f8fa9035357 323 else if(compass<202.5&&compass>=157.5)send_compass=5;//南
basyo38 2:9f8fa9035357 324 else if(compass<247.5&&compass>=202.5)send_compass=6;//
basyo38 2:9f8fa9035357 325 else if(compass<292.5&&compass>=247.5)send_compass=7;//西
basyo38 2:9f8fa9035357 326 else if(compass<337.5&&compass>=292.5)send_compass=8;//
basyo38 2:9f8fa9035357 327
basyo38 2:9f8fa9035357 328
basyo38 2:9f8fa9035357 329
basyo38 2:9f8fa9035357 330 }
basyo38 2:9f8fa9035357 331
basyo38 2:9f8fa9035357 332 void altitude_f()//高度の変換
basyo38 2:9f8fa9035357 333 {
basyo38 2:9f8fa9035357 334 height=alt.read()*3.3*1000/1.6/100;
basyo38 2:9f8fa9035357 335 }
basyo38 2:9f8fa9035357 336
basyo38 2:9f8fa9035357 337 void rpm_c() //回転数のフォトインタラプタ
basyo38 2:9f8fa9035357 338 {
basyo38 2:9f8fa9035357 339 rpmcounter++;
basyo38 2:9f8fa9035357 340 }
basyo38 2:9f8fa9035357 341
basyo38 2:9f8fa9035357 342 void rpm_f() //回転数計測
basyo38 2:9f8fa9035357 343 {
basyo38 2:9f8fa9035357 344 // rpm = (double)(rpmcounter * 60000/time_ms/48);
basyo38 2:9f8fa9035357 345 rpm=(double)(rpmcounter);
basyo38 2:9f8fa9035357 346 rpmcounter = 0;
basyo38 2:9f8fa9035357 347 }
basyo38 2:9f8fa9035357 348
basyo38 2:9f8fa9035357 349 void spd_c() //機速のフォトインタラプタ
basyo38 2:9f8fa9035357 350 {
basyo38 2:9f8fa9035357 351 speedcounter++;
basyo38 2:9f8fa9035357 352 }
basyo38 2:9f8fa9035357 353
basyo38 2:9f8fa9035357 354 void spd_f()
basyo38 2:9f8fa9035357 355 {
basyo38 2:9f8fa9035357 356 int x = 0;
basyo38 2:9f8fa9035357 357 x = (double)(speedcounter * 60000/time_ms/8);
basyo38 2:9f8fa9035357 358 speed = (double)(0.0014*x + 0.9815);
basyo38 2:9f8fa9035357 359 //最初の機速校正時の式は、0.0015*x + 0.6063
basyo38 2:9f8fa9035357 360 if(speed<=0.9815) {
basyo38 2:9f8fa9035357 361 speed = 0;
basyo38 2:9f8fa9035357 362 }
basyo38 2:9f8fa9035357 363 speedcounter = 0;
basyo38 2:9f8fa9035357 364 }
basyo38 2:9f8fa9035357 365
basyo38 2:9f8fa9035357 366
basyo38 2:9f8fa9035357 367 void control_communication() //操舵基板との通信用
basyo38 2:9f8fa9035357 368 {
basyo38 2:9f8fa9035357 369 // myled(9,9,1,9);
basyo38 2:9f8fa9035357 370
basyo38 2:9f8fa9035357 371 // __disable_irq();
basyo38 2:9f8fa9035357 372 // t1.stop();
basyo38 2:9f8fa9035357 373 for (int i = 0; i <3; i++) {
basyo38 2:9f8fa9035357 374 compass_array[i] = control_com.getc();//高度の受信
basyo38 2:9f8fa9035357 375 }
basyo38 2:9f8fa9035357 376 ele = control_com.getc();//舵角の受信
basyo38 2:9f8fa9035357 377 rud = control_com.getc();//舵角の受信
basyo38 2:9f8fa9035357 378 e_trim = control_com.getc();//trimの受信
basyo38 2:9f8fa9035357 379 r_trim = control_com.getc();//trimの受信
basyo38 2:9f8fa9035357 380 //////////////ER操舵データ表示////////////////////
basyo38 2:9f8fa9035357 381 /* pilot_oled.locate(6, 0);
basyo38 2:9f8fa9035357 382 pilot_oled.printf("%c", ele);
basyo38 2:9f8fa9035357 383 wait_ms(0.7);
basyo38 2:9f8fa9035357 384 pilot_oled.locate(8, 0);
basyo38 2:9f8fa9035357 385 pilot_oled.printf("%c", rud);
basyo38 2:9f8fa9035357 386 wait_ms(0.7);*/
basyo38 2:9f8fa9035357 387 pilot_oled.locate(0, 0);
basyo38 2:9f8fa9035357 388 pilot_oled.printf("%1c%1c", e_trim,r_trim);
basyo38 2:9f8fa9035357 389 pilot_oled.locate(14, 0);
basyo38 2:9f8fa9035357 390 pilot_oled.printf("%2d", SD_count);
basyo38 2:9f8fa9035357 391 wait_ms(0.7);
basyo38 2:9f8fa9035357 392 ///////////エレベータログデータ条件分岐////////////////////////////
basyo38 2:9f8fa9035357 393 switch(ele) {
basyo38 2:9f8fa9035357 394 case 'U':
basyo38 2:9f8fa9035357 395 pilot_oled.locate(6, 0);
basyo38 2:9f8fa9035357 396 pilot_oled.putc(0x02);//
basyo38 2:9f8fa9035357 397 // pilot_oled.printf("U");//
basyo38 2:9f8fa9035357 398 up2 = 5 ;
basyo38 2:9f8fa9035357 399 break;
basyo38 2:9f8fa9035357 400 case 'u':
basyo38 2:9f8fa9035357 401 pilot_oled.locate(6, 0);
basyo38 2:9f8fa9035357 402 pilot_oled.putc(0x5E);//^
basyo38 2:9f8fa9035357 403 // pilot_oled.printf("u");//
basyo38 2:9f8fa9035357 404 up1 = 4 ;
basyo38 2:9f8fa9035357 405 break;
basyo38 2:9f8fa9035357 406 case 'n':
basyo38 2:9f8fa9035357 407 pilot_oled.locate(6, 0);
basyo38 2:9f8fa9035357 408 pilot_oled.putc(0x2D);//-
basyo38 2:9f8fa9035357 409 E_neut = 3 ;
basyo38 2:9f8fa9035357 410 break;
basyo38 2:9f8fa9035357 411 case 'd':
basyo38 2:9f8fa9035357 412 pilot_oled.locate(6, 0);
basyo38 2:9f8fa9035357 413 pilot_oled.putc(0x00);//vみたいな文字
basyo38 2:9f8fa9035357 414 // pilot_oled.printf("d");//
basyo38 2:9f8fa9035357 415 down1 = 2 ;
basyo38 2:9f8fa9035357 416 break;
basyo38 2:9f8fa9035357 417 case 'D':
basyo38 2:9f8fa9035357 418 pilot_oled.locate(6, 0);
basyo38 2:9f8fa9035357 419 pilot_oled.putc(0x01);
basyo38 2:9f8fa9035357 420 // pilot_oled.printf("D");//
basyo38 2:9f8fa9035357 421 down2 = 1;
basyo38 2:9f8fa9035357 422 break;
basyo38 2:9f8fa9035357 423 default:
basyo38 2:9f8fa9035357 424 break;
basyo38 2:9f8fa9035357 425 }
basyo38 2:9f8fa9035357 426 /////////ラダーログデータ条件分岐/////////////////////////////////////
basyo38 2:9f8fa9035357 427 switch(rud) {
basyo38 2:9f8fa9035357 428 case 'L':
basyo38 2:9f8fa9035357 429 pilot_oled.locate(8, 0);
basyo38 2:9f8fa9035357 430 pilot_oled.putc(0x03);
basyo38 2:9f8fa9035357 431 // pilot_oled.printf("L");//
basyo38 2:9f8fa9035357 432 left2 =1;
basyo38 2:9f8fa9035357 433 break;
basyo38 2:9f8fa9035357 434 case 'l':
basyo38 2:9f8fa9035357 435 pilot_oled.locate(8, 0);
basyo38 2:9f8fa9035357 436 pilot_oled.putc(0x3C);//<
basyo38 2:9f8fa9035357 437 left1 =2;
basyo38 2:9f8fa9035357 438 break;
basyo38 2:9f8fa9035357 439 case 'N':
basyo38 2:9f8fa9035357 440 pilot_oled.locate(8, 0);
basyo38 2:9f8fa9035357 441 pilot_oled.putc(0x7C);//|
basyo38 2:9f8fa9035357 442 R_neut=3;
basyo38 2:9f8fa9035357 443 break;
basyo38 2:9f8fa9035357 444 case 'r':
basyo38 2:9f8fa9035357 445 pilot_oled.locate(8, 0);
basyo38 2:9f8fa9035357 446 pilot_oled.putc(0x3E);//>
basyo38 2:9f8fa9035357 447 right1=4;
basyo38 2:9f8fa9035357 448 break;
basyo38 2:9f8fa9035357 449 case 'R':
basyo38 2:9f8fa9035357 450 pilot_oled.locate(8, 0);
basyo38 2:9f8fa9035357 451 pilot_oled.putc(0x04);
basyo38 2:9f8fa9035357 452 // pilot_oled.printf("R");//
basyo38 2:9f8fa9035357 453 right2=5;
basyo38 2:9f8fa9035357 454 break;
basyo38 2:9f8fa9035357 455 default:
basyo38 2:9f8fa9035357 456 break;
basyo38 2:9f8fa9035357 457 }
basyo38 2:9f8fa9035357 458 // t1.start();
basyo38 2:9f8fa9035357 459 //__enable_irq();
basyo38 2:9f8fa9035357 460 }
basyo38 2:9f8fa9035357 461
basyo38 2:9f8fa9035357 462 void android_communication()
basyo38 2:9f8fa9035357 463 {
basyo38 2:9f8fa9035357 464 // myled(9,9,9,1);
basyo38 2:9f8fa9035357 465
basyo38 2:9f8fa9035357 466 int srpm,sspeed,sheight;
basyo38 2:9f8fa9035357 467 srpm=(int)rpm;
basyo38 2:9f8fa9035357 468 sspeed=(int)(speed*10);
basyo38 2:9f8fa9035357 469 sheight=(int)(height*10);
basyo38 2:9f8fa9035357 470 // if(srpm<100)srpm+=900;
basyo38 2:9f8fa9035357 471 // if(sspeed<100)sspeed+=900;
basyo38 2:9f8fa9035357 472 // if(sheight<100)sheight+=900;
basyo38 2:9f8fa9035357 473
basyo38 2:9f8fa9035357 474 snprintf(send_buff1,10,"r%xh%xv%x",srpm,sheight,sspeed);
basyo38 2:9f8fa9035357 475 for(i=0;i<10;i++){
basyo38 2:9f8fa9035357 476 // pc.putc(send_buff1[i]);
basyo38 2:9f8fa9035357 477 android_com.putc(send_buff1[i]);
basyo38 2:9f8fa9035357 478 }
basyo38 2:9f8fa9035357 479 }
basyo38 2:9f8fa9035357 480
basyo38 2:9f8fa9035357 481 void update() //データ更新。最優先関数、割り込み禁止絶対入れろ。
basyo38 2:9f8fa9035357 482 {
basyo38 2:9f8fa9035357 483 // myled(1,0,0,0);
basyo38 2:9f8fa9035357 484 __disable_irq();
basyo38 2:9f8fa9035357 485 //time2 = t1.read_ms();
basyo38 2:9f8fa9035357 486 time_ms = t1.read_ms();//周期時間読み取り
basyo38 2:9f8fa9035357 487 t1.stop();
basyo38 2:9f8fa9035357 488 t1.reset();
basyo38 2:9f8fa9035357 489 led4 =! led4;
basyo38 2:9f8fa9035357 490 //time_ms =time2-time1;
basyo38 2:9f8fa9035357 491 rpm_f();
basyo38 2:9f8fa9035357 492 spd_f();
basyo38 2:9f8fa9035357 493 altitude_f();
basyo38 2:9f8fa9035357 494 compass_f();
basyo38 2:9f8fa9035357 495 SD_log();
basyo38 2:9f8fa9035357 496 OLEDdisplay_print();
basyo38 2:9f8fa9035357 497 android_communication();
basyo38 2:9f8fa9035357 498 pc.printf("NO:%d,%02d:%02d,R:%1.0f,S:%0.3f,H:%0.3f,%c%c%c,compass:%3.0f,%c%c,e:%c,r:%c,et:%c,rt:%c,%.3f\r\n", SD_count, min, sec, rpm, speed, height,send_buff1[4],send_buff1[5],send_buff1[6],compass,compass_array[0],compass_array[1], ele, rud,e_trim,r_trim,time_ms);
basyo38 2:9f8fa9035357 499 // pc.printf("TBT\n");
basyo38 2:9f8fa9035357 500 up2 = 0;
basyo38 2:9f8fa9035357 501 up1 = 0;
basyo38 2:9f8fa9035357 502 E_neut = 0;
basyo38 2:9f8fa9035357 503 down1=0;
basyo38 2:9f8fa9035357 504 down2=0;
basyo38 2:9f8fa9035357 505 left1= 0;
basyo38 2:9f8fa9035357 506 left2 =0;
basyo38 2:9f8fa9035357 507 R_neut = 0;
basyo38 2:9f8fa9035357 508 right1=0;
basyo38 2:9f8fa9035357 509 right2=0;
basyo38 2:9f8fa9035357 510 t1.start();
basyo38 2:9f8fa9035357 511 // time1 = t1.read_ms();
basyo38 2:9f8fa9035357 512 __enable_irq();
basyo38 2:9f8fa9035357 513 }
basyo38 2:9f8fa9035357 514
basyo38 2:9f8fa9035357 515
basyo38 2:9f8fa9035357 516 void CGRAM_1()
basyo38 2:9f8fa9035357 517 {
basyo38 2:9f8fa9035357 518 // CGRAMアドレスの指定
basyo38 2:9f8fa9035357 519 // CGRAM(1)にビット・パターンを登録します。
basyo38 2:9f8fa9035357 520 pilot_oled.writeCommand(0x40) ;
basyo38 2:9f8fa9035357 521 // 40μ秒待ちます。
basyo38 2:9f8fa9035357 522 wait_us(40);
basyo38 2:9f8fa9035357 523
basyo38 2:9f8fa9035357 524 // ここから文字のビット・パターンを1行ずつ設定していきます。
basyo38 2:9f8fa9035357 525 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 526 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 527 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 528 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 529 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 530 pilot_oled.writeData((int)0x11) ;//10001
basyo38 2:9f8fa9035357 531 pilot_oled.writeData((int)0x0A) ;//01010
basyo38 2:9f8fa9035357 532 pilot_oled.writeData((int)0x04) ;//00100
basyo38 2:9f8fa9035357 533 wait_us(40);
basyo38 2:9f8fa9035357 534 pilot_oled.cls();
basyo38 2:9f8fa9035357 535 }
basyo38 2:9f8fa9035357 536
basyo38 2:9f8fa9035357 537 void CGRAM_2()
basyo38 2:9f8fa9035357 538 {
basyo38 2:9f8fa9035357 539 // CGRAMアドレスの指定
basyo38 2:9f8fa9035357 540 // CGRAM(2)にビット・パターンを登録します。
basyo38 2:9f8fa9035357 541 pilot_oled.writeCommand(0x48) ;
basyo38 2:9f8fa9035357 542 // 40μ秒待ちます。
basyo38 2:9f8fa9035357 543 wait_us(40);
basyo38 2:9f8fa9035357 544
basyo38 2:9f8fa9035357 545 // ここから文字のビット・パターンを1行ずつ設定していきます。
basyo38 2:9f8fa9035357 546 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 547 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 548 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 549 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 550 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 551 pilot_oled.writeData((int)0x1F) ;//11111
basyo38 2:9f8fa9035357 552 pilot_oled.writeData((int)0x0E) ;//01110
basyo38 2:9f8fa9035357 553 pilot_oled.writeData((int)0x04) ;//00100
basyo38 2:9f8fa9035357 554 wait_us(40);
basyo38 2:9f8fa9035357 555 pilot_oled.cls();
basyo38 2:9f8fa9035357 556 }
basyo38 2:9f8fa9035357 557
basyo38 2:9f8fa9035357 558 void CGRAM_3()
basyo38 2:9f8fa9035357 559 {
basyo38 2:9f8fa9035357 560 // CGRAMアドレスの指定
basyo38 2:9f8fa9035357 561 // CGRAM(3)にビット・パターンを登録します。
basyo38 2:9f8fa9035357 562 pilot_oled.writeCommand(0x50) ;
basyo38 2:9f8fa9035357 563 // 40μ秒待ちます。
basyo38 2:9f8fa9035357 564 wait_us(40);
basyo38 2:9f8fa9035357 565
basyo38 2:9f8fa9035357 566 // ここから文字のビット・パターンを1行ずつ設定していきます。
basyo38 2:9f8fa9035357 567 pilot_oled.writeData((int)0x04) ;//00100
basyo38 2:9f8fa9035357 568 pilot_oled.writeData((int)0x0E) ;//01110
basyo38 2:9f8fa9035357 569 pilot_oled.writeData((int)0x1F) ;//11111
basyo38 2:9f8fa9035357 570 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 571 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 572 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 573 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 574 pilot_oled.writeData((int)0x00) ;
basyo38 2:9f8fa9035357 575 wait_us(40);
basyo38 2:9f8fa9035357 576 pilot_oled.cls();
basyo38 2:9f8fa9035357 577 }
basyo38 2:9f8fa9035357 578
basyo38 2:9f8fa9035357 579 void CGRAM_4()
basyo38 2:9f8fa9035357 580 {
basyo38 2:9f8fa9035357 581 // CGRAMアドレスの指定
basyo38 2:9f8fa9035357 582 // CGRAM(4)にビット・パターンを登録します。
basyo38 2:9f8fa9035357 583 pilot_oled.writeCommand(0x58) ;
basyo38 2:9f8fa9035357 584 // 40μ秒待ちます。
basyo38 2:9f8fa9035357 585 wait_us(40);
basyo38 2:9f8fa9035357 586
basyo38 2:9f8fa9035357 587 // ここから文字のビット・パターンを1行ずつ設定していきます。
basyo38 2:9f8fa9035357 588 pilot_oled.writeData((int)0x02) ;//00010
basyo38 2:9f8fa9035357 589 pilot_oled.writeData((int)0x06) ;//00110
basyo38 2:9f8fa9035357 590 pilot_oled.writeData((int)0x0E) ;//01110
basyo38 2:9f8fa9035357 591 pilot_oled.writeData((int)0x1E) ;//11110
basyo38 2:9f8fa9035357 592 pilot_oled.writeData((int)0x0E) ;//01110
basyo38 2:9f8fa9035357 593 pilot_oled.writeData((int)0x06) ;//00110
basyo38 2:9f8fa9035357 594 pilot_oled.writeData((int)0x02) ;//00010
basyo38 2:9f8fa9035357 595 pilot_oled.writeData((int)0x00) ;//00000
basyo38 2:9f8fa9035357 596 wait_us(40);
basyo38 2:9f8fa9035357 597 pilot_oled.cls();
basyo38 2:9f8fa9035357 598 }
basyo38 2:9f8fa9035357 599
basyo38 2:9f8fa9035357 600 void CGRAM_5()
basyo38 2:9f8fa9035357 601 {
basyo38 2:9f8fa9035357 602 // CGRAMアドレスの指定
basyo38 2:9f8fa9035357 603 // CGRAM(5)にビット・パターンを登録します。
basyo38 2:9f8fa9035357 604 pilot_oled.writeCommand(0x60) ;
basyo38 2:9f8fa9035357 605 // 40μ秒待ちます。
basyo38 2:9f8fa9035357 606 wait_us(40);
basyo38 2:9f8fa9035357 607
basyo38 2:9f8fa9035357 608 // ここから文字のビット・パターンを1行ずつ設定していきます。
basyo38 2:9f8fa9035357 609 pilot_oled.writeData((int)0x08) ;//01000
basyo38 2:9f8fa9035357 610 pilot_oled.writeData((int)0x0C) ;//01100
basyo38 2:9f8fa9035357 611 pilot_oled.writeData((int)0x0E) ;//01110
basyo38 2:9f8fa9035357 612 pilot_oled.writeData((int)0x0F) ;//01111
basyo38 2:9f8fa9035357 613 pilot_oled.writeData((int)0x0E) ;//01110
basyo38 2:9f8fa9035357 614 pilot_oled.writeData((int)0x0C) ;//01100
basyo38 2:9f8fa9035357 615 pilot_oled.writeData((int)0x08) ;//01000
basyo38 2:9f8fa9035357 616 pilot_oled.writeData((int)0x00) ;//00000
basyo38 2:9f8fa9035357 617 wait_us(40);
basyo38 2:9f8fa9035357 618 pilot_oled.cls();
basyo38 2:9f8fa9035357 619 }
basyo38 2:9f8fa9035357 620
basyo38 2:9f8fa9035357 621
basyo38 2:9f8fa9035357 622