Kim Youngsik / Mbed 2 deprecated 0ROBOFRIEN_FCC_v1_12

Dependencies:   mbed BufferedSerial ConfigFile

Committer:
skyyoungsik
Date:
Tue Jun 12 01:05:50 2018 +0000
Revision:
0:3473b92e991e
Child:
1:9530746906b6
lkj;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
skyyoungsik 0:3473b92e991e 1 #include "ROBOFRIEN_GUI.h"
skyyoungsik 0:3473b92e991e 2 #include "eeprom.h"
skyyoungsik 0:3473b92e991e 3 #include "Config.h"
skyyoungsik 0:3473b92e991e 4 #include "BufferedSerial.h"
skyyoungsik 0:3473b92e991e 5
skyyoungsik 0:3473b92e991e 6
skyyoungsik 0:3473b92e991e 7 BufferedSerial pc(USBTX, USBRX);
skyyoungsik 0:3473b92e991e 8
skyyoungsik 0:3473b92e991e 9 uint8_t ISR_Modem_ID_Dept, ISR_Modem_ID_Dest;
skyyoungsik 0:3473b92e991e 10 uint8_t ISR_Modem_DC_DPN, ISR_Modem_DC_DL;
skyyoungsik 0:3473b92e991e 11 uint8_t ISR_Modem_DATA[256];
skyyoungsik 0:3473b92e991e 12 uint8_t ISR_Modem_DC_REQUEST;
skyyoungsik 0:3473b92e991e 13 uint16_t ISR_Modem_CHKSUM;
skyyoungsik 0:3473b92e991e 14 uint8_t pc_isr_cnt;
skyyoungsik 0:3473b92e991e 15 uint8_t isr_modem_data_cnt = 0;
skyyoungsik 0:3473b92e991e 16 uint8_t pc_parsing_bool = false;
skyyoungsik 0:3473b92e991e 17 bool pc_Start_Check;
skyyoungsik 0:3473b92e991e 18 uint8_t model_type1;
skyyoungsik 0:3473b92e991e 19 uint16_t model_type2;
skyyoungsik 0:3473b92e991e 20 uint8_t pc_buffer[256],ex_pc_raw_buffer,pc_raw_buffer[256];
skyyoungsik 0:3473b92e991e 21 uint8_t pc_buffer_cnt=0;
skyyoungsik 0:3473b92e991e 22 int HomePointChksum,MarkerChksum;
skyyoungsik 0:3473b92e991e 23
skyyoungsik 0:3473b92e991e 24 void ROBOFRIEN_GUI::pc_ascii_trans(char* input){
skyyoungsik 0:3473b92e991e 25 pc.printf(input); pc.printf("\r\n");
skyyoungsik 0:3473b92e991e 26 }
skyyoungsik 0:3473b92e991e 27
skyyoungsik 0:3473b92e991e 28 void ROBOFRIEN_GUI::pc_rx_update(){
skyyoungsik 0:3473b92e991e 29 while (pc.readable()){
skyyoungsik 0:3473b92e991e 30 pc_buffer[1] = pc_buffer[0];
skyyoungsik 0:3473b92e991e 31 pc_buffer[0] = pc.getc();
skyyoungsik 0:3473b92e991e 32 // Check SOF //
skyyoungsik 0:3473b92e991e 33 if (( pc_buffer[1] == 254) & (pc_buffer[0] == 254)){
skyyoungsik 0:3473b92e991e 34 pc_Start_Check = true;
skyyoungsik 0:3473b92e991e 35 pc_isr_cnt = 0;
skyyoungsik 0:3473b92e991e 36 }
skyyoungsik 0:3473b92e991e 37 else if(pc_Start_Check == true){
skyyoungsik 0:3473b92e991e 38 if(pc_isr_cnt <= 4){
skyyoungsik 0:3473b92e991e 39 switch(pc_isr_cnt){
skyyoungsik 0:3473b92e991e 40 case 0: ISR_Modem_ID_Dept = pc_buffer[0]; break;
skyyoungsik 0:3473b92e991e 41 case 1: ISR_Modem_ID_Dest = pc_buffer[0]; break;
skyyoungsik 0:3473b92e991e 42 case 2: ISR_Modem_DC_REQUEST = pc_buffer[0]; break;
skyyoungsik 0:3473b92e991e 43 case 3: ISR_Modem_DC_DPN = pc_buffer[0]; break;
skyyoungsik 0:3473b92e991e 44 case 4: ISR_Modem_DC_DL = pc_buffer[0]; isr_modem_data_cnt = 0; break;
skyyoungsik 0:3473b92e991e 45 }
skyyoungsik 0:3473b92e991e 46 }
skyyoungsik 0:3473b92e991e 47 else if( pc_isr_cnt > 4 ){
skyyoungsik 0:3473b92e991e 48 if ((ISR_Modem_DC_DL >= 1) & (pc_isr_cnt <= (4 + ISR_Modem_DC_DL))) {
skyyoungsik 0:3473b92e991e 49 ISR_Modem_DATA[isr_modem_data_cnt] = pc_buffer[0];
skyyoungsik 0:3473b92e991e 50 isr_modem_data_cnt++;
skyyoungsik 0:3473b92e991e 51 }
skyyoungsik 0:3473b92e991e 52 else if(pc_isr_cnt == (4 + ISR_Modem_DC_DL + 2) ){
skyyoungsik 0:3473b92e991e 53 ISR_Modem_CHKSUM = ((uint16_t)pc_buffer[1] * 256 + pc_buffer[0]);
skyyoungsik 0:3473b92e991e 54 }
skyyoungsik 0:3473b92e991e 55 else if(pc_isr_cnt == (4 + ISR_Modem_DC_DL + 2 + 2) ){
skyyoungsik 0:3473b92e991e 56 if((pc_buffer[1] == 255) & (pc_buffer[0] == 255) ){
skyyoungsik 0:3473b92e991e 57 pc_Start_Check = false;
skyyoungsik 0:3473b92e991e 58 pc_parsing_bool = true;
skyyoungsik 0:3473b92e991e 59 }
skyyoungsik 0:3473b92e991e 60 }
skyyoungsik 0:3473b92e991e 61 }
skyyoungsik 0:3473b92e991e 62 pc_isr_cnt ++;
skyyoungsik 0:3473b92e991e 63 }
skyyoungsik 0:3473b92e991e 64 }
skyyoungsik 0:3473b92e991e 65 }
skyyoungsik 0:3473b92e991e 66
skyyoungsik 0:3473b92e991e 67 uint8_t Modem_ID_Dest;
skyyoungsik 0:3473b92e991e 68 uint8_t Modem_ID_Dept;
skyyoungsik 0:3473b92e991e 69 uint8_t Modem_DC_DPN;
skyyoungsik 0:3473b92e991e 70 uint8_t Modem_DC_DL;
skyyoungsik 0:3473b92e991e 71 uint8_t Modem_DATA[256];
skyyoungsik 0:3473b92e991e 72 uint8_t Modem_DC_REQUEST;
skyyoungsik 0:3473b92e991e 73
skyyoungsik 0:3473b92e991e 74 bool ROBOFRIEN_GUI::rx_bool(){
skyyoungsik 0:3473b92e991e 75 if(pc_parsing_bool == true){
skyyoungsik 0:3473b92e991e 76 pc_parsing_bool = false;
skyyoungsik 0:3473b92e991e 77 int cal_chksum = 0;
skyyoungsik 0:3473b92e991e 78 for(int i=0; i< ISR_Modem_DC_DL; i++){
skyyoungsik 0:3473b92e991e 79 Modem_DATA[i] = ISR_Modem_DATA[i];
skyyoungsik 0:3473b92e991e 80 cal_chksum += ISR_Modem_DATA[i];
skyyoungsik 0:3473b92e991e 81 }
skyyoungsik 0:3473b92e991e 82 if (ISR_Modem_CHKSUM == cal_chksum){
skyyoungsik 0:3473b92e991e 83 return true;
skyyoungsik 0:3473b92e991e 84 }else{
skyyoungsik 0:3473b92e991e 85 return false;
skyyoungsik 0:3473b92e991e 86 }
skyyoungsik 0:3473b92e991e 87 }
skyyoungsik 0:3473b92e991e 88 else{
skyyoungsik 0:3473b92e991e 89 return false;
skyyoungsik 0:3473b92e991e 90 }
skyyoungsik 0:3473b92e991e 91 }
skyyoungsik 0:3473b92e991e 92 void ROBOFRIEN_GUI::Init(){
skyyoungsik 0:3473b92e991e 93 pc.baud(38400);
skyyoungsik 0:3473b92e991e 94 eeprom_init();
skyyoungsik 0:3473b92e991e 95 /// EEPROM R/W ////
skyyoungsik 0:3473b92e991e 96 // -------- MODEL -------------- //
skyyoungsik 0:3473b92e991e 97 model_type1 = eeprom_read(EEPROM_MODEL_TYPE1);
skyyoungsik 0:3473b92e991e 98 model_type2 = (int)eeprom_read(EEPROM_MODEL_TYPE2_UP) * 256 + eeprom_read(EEPROM_MODEL_TYPE2_DOWN);
skyyoungsik 0:3473b92e991e 99
skyyoungsik 0:3473b92e991e 100 // -------- INPUT - CAP ------------ //
skyyoungsik 0:3473b92e991e 101 cap_min[0] = (int16_t)eeprom_read(EEPROM_RECV_MIN_1) - 127;
skyyoungsik 0:3473b92e991e 102 cap_min[1] = (int16_t)eeprom_read(EEPROM_RECV_MIN_2) - 127;
skyyoungsik 0:3473b92e991e 103 cap_min[2] = (int16_t)eeprom_read(EEPROM_RECV_MIN_3) - 127;
skyyoungsik 0:3473b92e991e 104 cap_min[3] = (int16_t)eeprom_read(EEPROM_RECV_MIN_4) - 127;
skyyoungsik 0:3473b92e991e 105 cap_min[4] = (int16_t)eeprom_read(EEPROM_RECV_MIN_5) - 127;
skyyoungsik 0:3473b92e991e 106 cap_min[5] = (int16_t)eeprom_read(EEPROM_RECV_MIN_6) - 127;
skyyoungsik 0:3473b92e991e 107 cap_min[6] = (int16_t)eeprom_read(EEPROM_RECV_MIN_7) - 127;
skyyoungsik 0:3473b92e991e 108 cap_min[7] = (int16_t)eeprom_read(EEPROM_RECV_MIN_8) - 127;
skyyoungsik 0:3473b92e991e 109
skyyoungsik 0:3473b92e991e 110 cap_neu[0] = (int16_t)eeprom_read(EEPROM_RECV_NEU_1) - 127;
skyyoungsik 0:3473b92e991e 111 cap_neu[1] = (int16_t)eeprom_read(EEPROM_RECV_NEU_2) - 127;
skyyoungsik 0:3473b92e991e 112 cap_neu[2] = (int16_t)eeprom_read(EEPROM_RECV_NEU_3) - 127;
skyyoungsik 0:3473b92e991e 113 cap_neu[3] = (int16_t)eeprom_read(EEPROM_RECV_NEU_4) - 127;
skyyoungsik 0:3473b92e991e 114 cap_neu[4] = (int16_t)eeprom_read(EEPROM_RECV_NEU_5) - 127;
skyyoungsik 0:3473b92e991e 115 cap_neu[5] = (int16_t)eeprom_read(EEPROM_RECV_NEU_6) - 127;
skyyoungsik 0:3473b92e991e 116 cap_neu[6] = (int16_t)eeprom_read(EEPROM_RECV_NEU_7) - 127;
skyyoungsik 0:3473b92e991e 117 cap_neu[7] = (int16_t)eeprom_read(EEPROM_RECV_NEU_8) - 127;
skyyoungsik 0:3473b92e991e 118
skyyoungsik 0:3473b92e991e 119 cap_max[0] = (int16_t)eeprom_read(EEPROM_RECV_MAX_1) - 127;
skyyoungsik 0:3473b92e991e 120 cap_max[1] = (int16_t)eeprom_read(EEPROM_RECV_MAX_2) - 127;
skyyoungsik 0:3473b92e991e 121 cap_max[2] = (int16_t)eeprom_read(EEPROM_RECV_MAX_3) - 127;
skyyoungsik 0:3473b92e991e 122 cap_max[3] = (int16_t)eeprom_read(EEPROM_RECV_MAX_4) - 127;
skyyoungsik 0:3473b92e991e 123 cap_max[4] = (int16_t)eeprom_read(EEPROM_RECV_MAX_5) - 127;
skyyoungsik 0:3473b92e991e 124 cap_max[5] = (int16_t)eeprom_read(EEPROM_RECV_MAX_6) - 127;
skyyoungsik 0:3473b92e991e 125 cap_max[6] = (int16_t)eeprom_read(EEPROM_RECV_MAX_7) - 127;
skyyoungsik 0:3473b92e991e 126 cap_max[7] = (int16_t)eeprom_read(EEPROM_RECV_MAX_8) - 127;
skyyoungsik 0:3473b92e991e 127
skyyoungsik 0:3473b92e991e 128 // --------- OUTPUT - MOTOR ----------- //
skyyoungsik 0:3473b92e991e 129 motor_min[0] = (int)eeprom_read(EEPROM_MOTOR_MIN_1_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_1_DOWN);
skyyoungsik 0:3473b92e991e 130 motor_min[1] = (int)eeprom_read(EEPROM_MOTOR_MIN_2_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_2_DOWN);
skyyoungsik 0:3473b92e991e 131 motor_min[2] = (int)eeprom_read(EEPROM_MOTOR_MIN_3_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_3_DOWN);
skyyoungsik 0:3473b92e991e 132 motor_min[3] = (int)eeprom_read(EEPROM_MOTOR_MIN_4_UP) * 256 + eeprom_read(EEPROM_MOTOR_MIN_4_DOWN);
skyyoungsik 0:3473b92e991e 133
skyyoungsik 0:3473b92e991e 134 // --------- OUTPUT - LED ------------ //
skyyoungsik 0:3473b92e991e 135 headlight_period = eeprom_read(EEPROM_HEADLIGHT_PERIOD);
skyyoungsik 0:3473b92e991e 136 headlight_dutyrate = eeprom_read(EEPROM_HEADLIGHT_DUTYRATE);
skyyoungsik 0:3473b92e991e 137 sidelight_period = eeprom_read(EEPROM_SIDELIGHT_PERIOD);
skyyoungsik 0:3473b92e991e 138 sidelight_dutyrate = eeprom_read(EEPROM_SIDELIGHT_DUTYRATE);
skyyoungsik 0:3473b92e991e 139
skyyoungsik 0:3473b92e991e 140 // --------- GAIN - LIMIT ANGLE ------- //
skyyoungsik 0:3473b92e991e 141 limit_rollx100 = (int)eeprom_read(EEPROM_LIMIT_ANGLE_ROLL_UP) * 256 + eeprom_read(EEPROM_LIMIT_ANGLE_ROLL_DOWN) - 32767;
skyyoungsik 0:3473b92e991e 142 limit_pitchx100 = (int)eeprom_read(EEPROM_LIMIT_ANGLE_PITCH_UP) * 256 + eeprom_read(EEPROM_LIMIT_ANGLE_PITCH_DOWN) - 32767;
skyyoungsik 0:3473b92e991e 143 limit_roll_rate = (int)eeprom_read(EEPROM_LIMIT_RATE_ROLL_UP) * 256 + eeprom_read(EEPROM_LIMIT_RATE_ROLL_DOWN) - 32767;
skyyoungsik 0:3473b92e991e 144 limit_pitch_rate = (int)eeprom_read(EEPROM_LIMIT_RATE_PITCH_UP) * 256 + eeprom_read(EEPROM_LIMIT_RATE_PITCH_DOWN) - 32767;
skyyoungsik 0:3473b92e991e 145 limit_yaw_rate = (int)eeprom_read(EEPROM_LIMIT_RATE_YAW_UP) * 256 + eeprom_read(EEPROM_LIMIT_RATE_YAW_DOWN) - 32767;
skyyoungsik 0:3473b92e991e 146
skyyoungsik 0:3473b92e991e 147 // --------- GAIN - GAIN DATA --------- //
skyyoungsik 0:3473b92e991e 148 for (int i = 0; i < 20; i++) {
skyyoungsik 0:3473b92e991e 149 gain_px100[i] = (int)eeprom_read(EEPROM_GAIN_P_UP[i]) * 256 + eeprom_read(EEPROM_GAIN_P_DOWN[i]);
skyyoungsik 0:3473b92e991e 150 gain_dx100[i] = (int)eeprom_read(EEPROM_GAIN_D_UP[i]) * 256 + eeprom_read(EEPROM_GAIN_D_DOWN[i]);
skyyoungsik 0:3473b92e991e 151 gain_ix100[i] = (int)eeprom_read(EEPROM_GAIN_I_UP[i]) * 256 + eeprom_read(EEPROM_GAIN_I_DOWN[i]);
skyyoungsik 0:3473b92e991e 152 }
skyyoungsik 0:3473b92e991e 153 cal_accel_bias[0] = (((int)eeprom_read(EEPROM_AHRS_ROLL_GAP_UP) * 256 + eeprom_read(EEPROM_AHRS_ROLL_GAP_DOWN)) - 32767)/10000.0;
skyyoungsik 0:3473b92e991e 154 cal_accel_bias[1] = (((int)eeprom_read(EEPROM_AHRS_PITCH_GAP_UP) * 256 + eeprom_read(EEPROM_AHRS_PITCH_GAP_DOWN)) - 32767)/10000.0;
skyyoungsik 0:3473b92e991e 155 cal_accel_bias[2] = (((int)eeprom_read(EEPROM_AHRS_YAW_GAP_UP) * 256 + eeprom_read(EEPROM_AHRS_YAW_GAP_DOWN)) - 32767)/10000.0;
skyyoungsik 0:3473b92e991e 156
skyyoungsik 0:3473b92e991e 157 // --------- Sensor ----------- ///
skyyoungsik 0:3473b92e991e 158 mag_x_avg = (float)eeprom_read(EEPROM_AHRS_YAW_X_GAP_1) * 256 + eeprom_read(EEPROM_AHRS_YAW_X_GAP_2) - 32767 ;
skyyoungsik 0:3473b92e991e 159 mag_y_avg = (float)eeprom_read(EEPROM_AHRS_YAW_Y_GAP_1) * 256 + eeprom_read(EEPROM_AHRS_YAW_Y_GAP_2) - 32767 ;
skyyoungsik 0:3473b92e991e 160 mag_z_avg = (float)eeprom_read(EEPROM_AHRS_YAW_Z_GAP_1) * 256 + eeprom_read(EEPROM_AHRS_YAW_Z_GAP_2) - 32767 ;
skyyoungsik 0:3473b92e991e 161
skyyoungsik 0:3473b92e991e 162 declination_angle = (float)(((signed long)eeprom_read(EEPROM_AHRS_DECLINATION_ANGLE_UP) * 256 + eeprom_read(EEPROM_AHRS_DECLINATION_ANGLE_DOWN))-18000)/100.0;
skyyoungsik 0:3473b92e991e 163 }
skyyoungsik 0:3473b92e991e 164
skyyoungsik 0:3473b92e991e 165 void trans_configuration_data(int a, int b, int c);
skyyoungsik 0:3473b92e991e 166 void trans_empty_data(int a, int b);
skyyoungsik 0:3473b92e991e 167 void trans_flight_data(int a, int b);
skyyoungsik 0:3473b92e991e 168 void ROBOFRIEN_GUI::Refresh(){
skyyoungsik 0:3473b92e991e 169 Modem_ID_Dept = ISR_Modem_ID_Dept;
skyyoungsik 0:3473b92e991e 170 Modem_ID_Dest = ISR_Modem_ID_Dest;
skyyoungsik 0:3473b92e991e 171 Modem_DC_DPN = ISR_Modem_DC_DPN;
skyyoungsik 0:3473b92e991e 172 Modem_DC_DL = ISR_Modem_DC_DL;
skyyoungsik 0:3473b92e991e 173 Modem_DC_REQUEST = ISR_Modem_DC_REQUEST;
skyyoungsik 0:3473b92e991e 174 DPN_Info = Modem_DC_DPN;
skyyoungsik 0:3473b92e991e 175 if ((Modem_ID_Dept == 255)&(Modem_ID_Dest == 0)) {
skyyoungsik 0:3473b92e991e 176 if (Modem_DC_REQUEST == 1) {
skyyoungsik 0:3473b92e991e 177 /// REQUST - READ FROM FCS ///
skyyoungsik 0:3473b92e991e 178 if (Modem_DC_DPN == 0) {
skyyoungsik 0:3473b92e991e 179 /// FLIGHT DATA ///
skyyoungsik 0:3473b92e991e 180 if( (Modem_DATA[1] & 0b00000001) == 0b00000001)button[0] = !button[0];
skyyoungsik 0:3473b92e991e 181 if( (Modem_DATA[1] & 0b00000010) == 0b00000010)button[1] = !button[1];
skyyoungsik 0:3473b92e991e 182 if( (Modem_DATA[1] & 0b00000100) == 0b00000100)button[2] = !button[2];
skyyoungsik 0:3473b92e991e 183 if( (Modem_DATA[1] & 0b00001000) == 0b00001000)button[3] = !button[3];
skyyoungsik 0:3473b92e991e 184 if( (Modem_DATA[1] & 0b00010000) == 0b00010000)button[4] = !button[4];
skyyoungsik 0:3473b92e991e 185 // Home Point //
skyyoungsik 0:3473b92e991e 186 if( Modem_DATA[0] == 0){
skyyoungsik 0:3473b92e991e 187 Homepoint_Lat = (long)Modem_DATA[3] * 16777216 + Modem_DATA[4] * 65536 + Modem_DATA[5] * 256 + Modem_DATA[6] - 90000000;
skyyoungsik 0:3473b92e991e 188 Homepoint_Lng = (long)Modem_DATA[7] * 16777216 + Modem_DATA[8] * 65536 + Modem_DATA[9] * 256 + Modem_DATA[10] - 180000000;
skyyoungsik 0:3473b92e991e 189 Homepoint_Alt = (long)Modem_DATA[11] * 256 + Modem_DATA[12] - 10000;
skyyoungsik 0:3473b92e991e 190 }else if(Modem_DATA[0] <= 20){
skyyoungsik 0:3473b92e991e 191 Marker_Mode[Modem_DATA[0]-1] = Modem_DATA[2];
skyyoungsik 0:3473b92e991e 192 Marker_Lat[Modem_DATA[0]-1] = (long)Modem_DATA[3] * 16777216 + Modem_DATA[4] * 65536 + Modem_DATA[5] * 256 + Modem_DATA[6] - 90000000;
skyyoungsik 0:3473b92e991e 193 Marker_Lng[Modem_DATA[0]-1] = (long)Modem_DATA[7] * 16777216 + Modem_DATA[8] * 65536 + Modem_DATA[9] * 256 + Modem_DATA[10] - 180000000;
skyyoungsik 0:3473b92e991e 194 Marker_Alt[Modem_DATA[0]-1] = (long)Modem_DATA[11] * 256 + Modem_DATA[12] - 10000;
skyyoungsik 0:3473b92e991e 195 Marker_Speed[Modem_DATA[0]-1] = (long)Modem_DATA[13] * 256 + Modem_DATA[14];
skyyoungsik 0:3473b92e991e 196 }
skyyoungsik 0:3473b92e991e 197 trans_flight_data(TO_GCS, Modem_DC_DPN);
skyyoungsik 0:3473b92e991e 198 }
skyyoungsik 0:3473b92e991e 199 else {
skyyoungsik 0:3473b92e991e 200 trans_configuration_data(TO_GCS, Modem_DC_DPN, Modem_DATA[0]);
skyyoungsik 0:3473b92e991e 201 }
skyyoungsik 0:3473b92e991e 202 }
skyyoungsik 0:3473b92e991e 203 else {
skyyoungsik 0:3473b92e991e 204 /// NOT REQUEST - WRITE TO FCS ///
skyyoungsik 0:3473b92e991e 205 trans_empty_data(TO_GCS, Modem_DC_DPN);
skyyoungsik 0:3473b92e991e 206 switch (Modem_DC_DPN) { // Check DPN //
skyyoungsik 0:3473b92e991e 207 case 0:
skyyoungsik 0:3473b92e991e 208 break;
skyyoungsik 0:3473b92e991e 209 case 1: /// Modem ///
skyyoungsik 0:3473b92e991e 210 model_type1 = Modem_DATA[0];
skyyoungsik 0:3473b92e991e 211 model_type2 = (uint16_t)Modem_DATA[1] * 256 + Modem_DATA[2];
skyyoungsik 0:3473b92e991e 212 eeprom_write(EEPROM_MODEL_TYPE1, (int)model_type1);
skyyoungsik 0:3473b92e991e 213 eeprom_write(EEPROM_MODEL_TYPE2_UP, (int)model_type2 / 256);
skyyoungsik 0:3473b92e991e 214 eeprom_write(EEPROM_MODEL_TYPE2_DOWN, (int)model_type2 % 256);
skyyoungsik 0:3473b92e991e 215 eeprom_refresh();
skyyoungsik 0:3473b92e991e 216 break;
skyyoungsik 0:3473b92e991e 217 case 3: /// RC Receiver ///
skyyoungsik 0:3473b92e991e 218 if ((Modem_DATA[0] >= 1) & (Modem_DATA[0] <= 8)) {
skyyoungsik 0:3473b92e991e 219 cap_min[Modem_DATA[0] - 1] = (int16_t)Modem_DATA[5] - 127;
skyyoungsik 0:3473b92e991e 220 cap_neu[Modem_DATA[0] - 1] = (int16_t)Modem_DATA[6] - 127;
skyyoungsik 0:3473b92e991e 221 cap_max[Modem_DATA[0] - 1] = (int16_t)Modem_DATA[7] - 127;
skyyoungsik 0:3473b92e991e 222 switch (Modem_DATA[0]) {
skyyoungsik 0:3473b92e991e 223 case 1:
skyyoungsik 0:3473b92e991e 224 eeprom_write(EEPROM_RECV_MIN_1, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 225 eeprom_write(EEPROM_RECV_NEU_1, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 226 eeprom_write(EEPROM_RECV_MAX_1, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 227 break;
skyyoungsik 0:3473b92e991e 228 case 2:
skyyoungsik 0:3473b92e991e 229 eeprom_write(EEPROM_RECV_MIN_2, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 230 eeprom_write(EEPROM_RECV_NEU_2, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 231 eeprom_write(EEPROM_RECV_MAX_2, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 232 break;
skyyoungsik 0:3473b92e991e 233 case 3:
skyyoungsik 0:3473b92e991e 234 eeprom_write(EEPROM_RECV_MIN_3, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 235 eeprom_write(EEPROM_RECV_NEU_3, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 236 eeprom_write(EEPROM_RECV_MAX_3, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 237 break;
skyyoungsik 0:3473b92e991e 238 case 4:
skyyoungsik 0:3473b92e991e 239 eeprom_write(EEPROM_RECV_MIN_4, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 240 eeprom_write(EEPROM_RECV_NEU_4, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 241 eeprom_write(EEPROM_RECV_MAX_4, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 242 break;
skyyoungsik 0:3473b92e991e 243 case 5:
skyyoungsik 0:3473b92e991e 244 eeprom_write(EEPROM_RECV_MIN_5, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 245 eeprom_write(EEPROM_RECV_NEU_5, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 246 eeprom_write(EEPROM_RECV_MAX_5, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 247 break;
skyyoungsik 0:3473b92e991e 248 case 6:
skyyoungsik 0:3473b92e991e 249 eeprom_write(EEPROM_RECV_MIN_6, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 250 eeprom_write(EEPROM_RECV_NEU_6, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 251 eeprom_write(EEPROM_RECV_MAX_6, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 252 break;
skyyoungsik 0:3473b92e991e 253 case 7:
skyyoungsik 0:3473b92e991e 254 eeprom_write(EEPROM_RECV_MIN_7, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 255 eeprom_write(EEPROM_RECV_NEU_7, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 256 eeprom_write(EEPROM_RECV_MAX_7, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 257 break;
skyyoungsik 0:3473b92e991e 258 case 8:
skyyoungsik 0:3473b92e991e 259 eeprom_write(EEPROM_RECV_MIN_8, cap_min[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 260 eeprom_write(EEPROM_RECV_NEU_8, cap_neu[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 261 eeprom_write(EEPROM_RECV_MAX_8, cap_max[Modem_DATA[0] - 1] + 127);
skyyoungsik 0:3473b92e991e 262 break;
skyyoungsik 0:3473b92e991e 263 }
skyyoungsik 0:3473b92e991e 264 eeprom_refresh();
skyyoungsik 0:3473b92e991e 265 }
skyyoungsik 0:3473b92e991e 266 break;
skyyoungsik 0:3473b92e991e 267 case 4: // Motor - OUTPUT //
skyyoungsik 0:3473b92e991e 268 pwm_info[0] = (int)Modem_DATA[1] * 256 + Modem_DATA[2];
skyyoungsik 0:3473b92e991e 269 pwm_info[1] = (int)Modem_DATA[3] * 256 + Modem_DATA[4];
skyyoungsik 0:3473b92e991e 270 pwm_info[2] = (int)Modem_DATA[5] * 256 + Modem_DATA[6];
skyyoungsik 0:3473b92e991e 271 pwm_info[3] = (int)Modem_DATA[7] * 256 + Modem_DATA[8];
skyyoungsik 0:3473b92e991e 272 switch (Modem_DATA[0]) {
skyyoungsik 0:3473b92e991e 273 case 1:
skyyoungsik 0:3473b92e991e 274 motor_min[0] = pwm_info[0];
skyyoungsik 0:3473b92e991e 275 eeprom_write(EEPROM_MOTOR_MIN_1_UP, motor_min[0] / 256);
skyyoungsik 0:3473b92e991e 276 eeprom_write(EEPROM_MOTOR_MIN_1_DOWN, motor_min[0] % 256);
skyyoungsik 0:3473b92e991e 277 eeprom_refresh();
skyyoungsik 0:3473b92e991e 278 break;
skyyoungsik 0:3473b92e991e 279 case 2:
skyyoungsik 0:3473b92e991e 280 motor_min[1] = pwm_info[1];
skyyoungsik 0:3473b92e991e 281 eeprom_write(EEPROM_MOTOR_MIN_2_UP, motor_min[1] / 256);
skyyoungsik 0:3473b92e991e 282 eeprom_write(EEPROM_MOTOR_MIN_2_DOWN, motor_min[1] % 256);
skyyoungsik 0:3473b92e991e 283 eeprom_refresh();
skyyoungsik 0:3473b92e991e 284 break;
skyyoungsik 0:3473b92e991e 285 case 3:
skyyoungsik 0:3473b92e991e 286 motor_min[2] = pwm_info[2];
skyyoungsik 0:3473b92e991e 287 eeprom_write(EEPROM_MOTOR_MIN_3_UP, motor_min[2] / 256);
skyyoungsik 0:3473b92e991e 288 eeprom_write(EEPROM_MOTOR_MIN_3_DOWN, motor_min[2] % 256);
skyyoungsik 0:3473b92e991e 289 eeprom_refresh();
skyyoungsik 0:3473b92e991e 290 break;
skyyoungsik 0:3473b92e991e 291 case 4:
skyyoungsik 0:3473b92e991e 292 motor_min[3] = pwm_info[3];
skyyoungsik 0:3473b92e991e 293 eeprom_write(EEPROM_MOTOR_MIN_4_UP, motor_min[3] / 256);
skyyoungsik 0:3473b92e991e 294 eeprom_write(EEPROM_MOTOR_MIN_4_DOWN, motor_min[3] % 256);
skyyoungsik 0:3473b92e991e 295 eeprom_refresh();
skyyoungsik 0:3473b92e991e 296 break;
skyyoungsik 0:3473b92e991e 297 }
skyyoungsik 0:3473b92e991e 298 break;
skyyoungsik 0:3473b92e991e 299 case 5: // LED - OUTPUT //
skyyoungsik 0:3473b92e991e 300 headlight_period = Modem_DATA[0];
skyyoungsik 0:3473b92e991e 301 headlight_dutyrate = Modem_DATA[1];
skyyoungsik 0:3473b92e991e 302 sidelight_period = Modem_DATA[2];
skyyoungsik 0:3473b92e991e 303 sidelight_dutyrate = Modem_DATA[3];
skyyoungsik 0:3473b92e991e 304 eeprom_write(EEPROM_HEADLIGHT_PERIOD, headlight_period);
skyyoungsik 0:3473b92e991e 305 eeprom_write(EEPROM_HEADLIGHT_DUTYRATE, headlight_dutyrate);
skyyoungsik 0:3473b92e991e 306 eeprom_write(EEPROM_SIDELIGHT_PERIOD, sidelight_period);
skyyoungsik 0:3473b92e991e 307 eeprom_write(EEPROM_SIDELIGHT_DUTYRATE, sidelight_dutyrate);
skyyoungsik 0:3473b92e991e 308 eeprom_refresh();
skyyoungsik 0:3473b92e991e 309 break;
skyyoungsik 0:3473b92e991e 310 case 6: // AHRS - ROLL , Pitch //
skyyoungsik 0:3473b92e991e 311 /// Attitude ///
skyyoungsik 0:3473b92e991e 312 if (Modem_DATA[0] == 1) {
skyyoungsik 0:3473b92e991e 313 attitude_configuration_bool = true;
skyyoungsik 0:3473b92e991e 314 }
skyyoungsik 0:3473b92e991e 315 else {
skyyoungsik 0:3473b92e991e 316 attitude_configuration_bool = false;
skyyoungsik 0:3473b92e991e 317 }
skyyoungsik 0:3473b92e991e 318 /// Compass ///
skyyoungsik 0:3473b92e991e 319 if (Modem_DATA[7] == 1) {
skyyoungsik 0:3473b92e991e 320 Compass_Calibration_Mode = Modem_DATA[7];
skyyoungsik 0:3473b92e991e 321 }
skyyoungsik 0:3473b92e991e 322 else if (Modem_DATA[7] == 2) {
skyyoungsik 0:3473b92e991e 323 Compass_Calibration_Mode = Modem_DATA[7];
skyyoungsik 0:3473b92e991e 324 }
skyyoungsik 0:3473b92e991e 325 else if(Modem_DATA[7] == 3){
skyyoungsik 0:3473b92e991e 326 Compass_Calibration_Mode = Modem_DATA[7];
skyyoungsik 0:3473b92e991e 327 declination_angle = (float)(((int)Modem_DATA[10] * 256 + Modem_DATA[11]) - 18000)/100.0;
skyyoungsik 0:3473b92e991e 328 eeprom_write(EEPROM_AHRS_DECLINATION_ANGLE_UP, (int)((declination_angle+180)*100)/256);
skyyoungsik 0:3473b92e991e 329 eeprom_write(EEPROM_AHRS_DECLINATION_ANGLE_DOWN, (int)((declination_angle+180)*100)%256);
skyyoungsik 0:3473b92e991e 330 eeprom_refresh();
skyyoungsik 0:3473b92e991e 331 }
skyyoungsik 0:3473b92e991e 332 break;
skyyoungsik 0:3473b92e991e 333 case 7: // Limit Angle //
skyyoungsik 0:3473b92e991e 334 limit_rollx100 = ((int)Modem_DATA[0] * 256 + Modem_DATA[1]) - 32767;
skyyoungsik 0:3473b92e991e 335 limit_pitchx100 = ((int)Modem_DATA[2] * 256 + Modem_DATA[3]) - 32767;
skyyoungsik 0:3473b92e991e 336 limit_roll_rate = ((int)Modem_DATA[4] * 256 + Modem_DATA[5]) - 32767;
skyyoungsik 0:3473b92e991e 337 limit_pitch_rate = ((int)Modem_DATA[6] * 256 + Modem_DATA[7]) - 32767;
skyyoungsik 0:3473b92e991e 338 limit_yaw_rate = ((int)Modem_DATA[8] * 256 + Modem_DATA[9]) - 32767;
skyyoungsik 0:3473b92e991e 339 eeprom_write(EEPROM_LIMIT_ANGLE_ROLL_UP, (limit_rollx100 + 32767) / 256);
skyyoungsik 0:3473b92e991e 340 eeprom_write(EEPROM_LIMIT_ANGLE_ROLL_DOWN, (limit_rollx100 + 32767) % 256);
skyyoungsik 0:3473b92e991e 341 eeprom_write(EEPROM_LIMIT_ANGLE_PITCH_UP, (limit_pitchx100 + 32767) / 256);
skyyoungsik 0:3473b92e991e 342 eeprom_write(EEPROM_LIMIT_ANGLE_PITCH_DOWN, (limit_pitchx100 + 32767) % 256);
skyyoungsik 0:3473b92e991e 343 eeprom_write(EEPROM_LIMIT_RATE_ROLL_UP, (limit_roll_rate + 32767) / 256);
skyyoungsik 0:3473b92e991e 344 eeprom_write(EEPROM_LIMIT_RATE_ROLL_DOWN, (limit_roll_rate + 32767) % 256);
skyyoungsik 0:3473b92e991e 345 eeprom_write(EEPROM_LIMIT_RATE_PITCH_UP, (limit_pitch_rate + 32767) / 256);
skyyoungsik 0:3473b92e991e 346 eeprom_write(EEPROM_LIMIT_RATE_PITCH_DOWN, (limit_pitch_rate + 32767) % 256);
skyyoungsik 0:3473b92e991e 347 eeprom_write(EEPROM_LIMIT_RATE_YAW_UP, (limit_yaw_rate + 32767) / 256);
skyyoungsik 0:3473b92e991e 348 eeprom_write(EEPROM_LIMIT_RATE_YAW_DOWN, (limit_yaw_rate + 32767) % 256);
skyyoungsik 0:3473b92e991e 349 eeprom_refresh();
skyyoungsik 0:3473b92e991e 350 break;
skyyoungsik 0:3473b92e991e 351 case 8:
skyyoungsik 0:3473b92e991e 352 int gain_number = Modem_DATA[0];
skyyoungsik 0:3473b92e991e 353 if ((gain_number >= 1) & (gain_number <= 20)) {
skyyoungsik 0:3473b92e991e 354 gain_px100[gain_number - 1] = (int)Modem_DATA[1] * 256 + Modem_DATA[2];
skyyoungsik 0:3473b92e991e 355 gain_dx100[gain_number - 1] = (int)Modem_DATA[3] * 256 + Modem_DATA[4];
skyyoungsik 0:3473b92e991e 356 gain_ix100[gain_number - 1] = (int)Modem_DATA[5] * 256 + Modem_DATA[6];
skyyoungsik 0:3473b92e991e 357 eeprom_write(EEPROM_GAIN_P_UP[gain_number - 1], gain_px100[gain_number - 1] / 256);
skyyoungsik 0:3473b92e991e 358 eeprom_write(EEPROM_GAIN_P_DOWN[gain_number - 1], gain_px100[gain_number - 1] % 256);
skyyoungsik 0:3473b92e991e 359 eeprom_write(EEPROM_GAIN_D_UP[gain_number - 1], gain_dx100[gain_number - 1] / 256);
skyyoungsik 0:3473b92e991e 360 eeprom_write(EEPROM_GAIN_D_DOWN[gain_number - 1], gain_dx100[gain_number - 1] % 256);
skyyoungsik 0:3473b92e991e 361 eeprom_write(EEPROM_GAIN_I_UP[gain_number - 1], gain_ix100[gain_number - 1] / 256);
skyyoungsik 0:3473b92e991e 362 eeprom_write(EEPROM_GAIN_I_DOWN[gain_number - 1], gain_ix100[gain_number - 1] % 256);
skyyoungsik 0:3473b92e991e 363 if(gain_number == 20)eeprom_refresh();
skyyoungsik 0:3473b92e991e 364 }
skyyoungsik 0:3473b92e991e 365 break;
skyyoungsik 0:3473b92e991e 366 }
skyyoungsik 0:3473b92e991e 367
skyyoungsik 0:3473b92e991e 368 }
skyyoungsik 0:3473b92e991e 369 }
skyyoungsik 0:3473b92e991e 370
skyyoungsik 0:3473b92e991e 371 }
skyyoungsik 0:3473b92e991e 372 void ROBOFRIEN_GUI::trans_empty_data(int id_dest, int data_parse_num) {
skyyoungsik 0:3473b92e991e 373 uint8_t Packet_SOF[2] = { 254,254 };
skyyoungsik 0:3473b92e991e 374 uint8_t Packet_Identifier[2];
skyyoungsik 0:3473b92e991e 375 uint8_t Packet_DC[3];
skyyoungsik 0:3473b92e991e 376 uint8_t Packet_CHKSUM[2];
skyyoungsik 0:3473b92e991e 377 uint8_t Packet_EOF[2] = { 255,255 };
skyyoungsik 0:3473b92e991e 378 // Identifier //
skyyoungsik 0:3473b92e991e 379 Packet_Identifier[0] = 0;
skyyoungsik 0:3473b92e991e 380 Packet_Identifier[1] = id_dest;
skyyoungsik 0:3473b92e991e 381 // Data Control //
skyyoungsik 0:3473b92e991e 382 Packet_DC[0] = 0;
skyyoungsik 0:3473b92e991e 383 Packet_DC[1] = (uint8_t)data_parse_num;
skyyoungsik 0:3473b92e991e 384 int data_length = 0;
skyyoungsik 0:3473b92e991e 385 Packet_DC[2] = (uint8_t)data_length;
skyyoungsik 0:3473b92e991e 386
skyyoungsik 0:3473b92e991e 387 // CHKSUM //
skyyoungsik 0:3473b92e991e 388 unsigned int data_checksum = 0;
skyyoungsik 0:3473b92e991e 389 Packet_CHKSUM[0] = data_checksum / 256;
skyyoungsik 0:3473b92e991e 390 Packet_CHKSUM[1] = data_checksum % 256;
skyyoungsik 0:3473b92e991e 391
skyyoungsik 0:3473b92e991e 392 // Each Buffer Integrate to modem_buffer ///
skyyoungsik 0:3473b92e991e 393 uint8_t modem_buffer[11];
skyyoungsik 0:3473b92e991e 394 modem_buffer[0] = Packet_SOF[0]; modem_buffer[1] = Packet_SOF[1];
skyyoungsik 0:3473b92e991e 395 modem_buffer[2] = Packet_Identifier[0]; modem_buffer[3] = Packet_Identifier[1];
skyyoungsik 0:3473b92e991e 396 modem_buffer[4] = Packet_DC[0]; modem_buffer[5] = Packet_DC[1]; modem_buffer[6] = Packet_DC[2];
skyyoungsik 0:3473b92e991e 397 modem_buffer[7] = Packet_CHKSUM[0];
skyyoungsik 0:3473b92e991e 398 modem_buffer[8] = Packet_CHKSUM[1];
skyyoungsik 0:3473b92e991e 399 modem_buffer[9] = Packet_EOF[0];
skyyoungsik 0:3473b92e991e 400 modem_buffer[10] = Packet_EOF[1];
skyyoungsik 0:3473b92e991e 401 for (int i = 0; i <= 10; i++) {
skyyoungsik 0:3473b92e991e 402 pc.putc(modem_buffer[i]);
skyyoungsik 0:3473b92e991e 403 }
skyyoungsik 0:3473b92e991e 404 }
skyyoungsik 0:3473b92e991e 405
skyyoungsik 0:3473b92e991e 406 void ROBOFRIEN_GUI::trans_configuration_data(int id_dest, int data_parse_num, int data_parse_detail_num) {
skyyoungsik 0:3473b92e991e 407
skyyoungsik 0:3473b92e991e 408 uint8_t Packet_SOF[2] = { 254,254 };
skyyoungsik 0:3473b92e991e 409 uint8_t Packet_Identifier[2];
skyyoungsik 0:3473b92e991e 410 uint8_t Packet_DC[3];
skyyoungsik 0:3473b92e991e 411 uint8_t Packet_DATA[16];
skyyoungsik 0:3473b92e991e 412 uint8_t Packet_CHKSUM[2];
skyyoungsik 0:3473b92e991e 413 uint8_t Packet_EOF[2] = { 255,255 };
skyyoungsik 0:3473b92e991e 414 // Identifier //
skyyoungsik 0:3473b92e991e 415 Packet_Identifier[0] = 0;
skyyoungsik 0:3473b92e991e 416 Packet_Identifier[1] = id_dest;
skyyoungsik 0:3473b92e991e 417 // Data Control //
skyyoungsik 0:3473b92e991e 418 Packet_DC[0] = 0;
skyyoungsik 0:3473b92e991e 419 Packet_DC[1] = (uint8_t)data_parse_num;
skyyoungsik 0:3473b92e991e 420 int data_length = 16;
skyyoungsik 0:3473b92e991e 421 Packet_DC[2] = (uint8_t)data_length;
skyyoungsik 0:3473b92e991e 422 // DATA //
skyyoungsik 0:3473b92e991e 423 switch (data_parse_num) {
skyyoungsik 0:3473b92e991e 424 case 0:
skyyoungsik 0:3473b92e991e 425 //// Empty Data ////
skyyoungsik 0:3473b92e991e 426 for (int i = 0; i <= 15; i++) {
skyyoungsik 0:3473b92e991e 427 Packet_DATA[i] = 0;
skyyoungsik 0:3473b92e991e 428 }
skyyoungsik 0:3473b92e991e 429 break;
skyyoungsik 0:3473b92e991e 430 case 1:
skyyoungsik 0:3473b92e991e 431 //// MODEM ////
skyyoungsik 0:3473b92e991e 432 Packet_DATA[0] = model_type1;
skyyoungsik 0:3473b92e991e 433 Packet_DATA[1] = model_type2 / 256; Packet_DATA[2] = model_type2 % 256;
skyyoungsik 0:3473b92e991e 434 for (int i = 3; i <= 15; i++) Packet_DATA[i] = 0;
skyyoungsik 0:3473b92e991e 435 break;
skyyoungsik 0:3473b92e991e 436 case 2:
skyyoungsik 0:3473b92e991e 437 //// Firmware ////
skyyoungsik 0:3473b92e991e 438 for (int i = 0; i <= 13; i++) {
skyyoungsik 0:3473b92e991e 439 Packet_DATA[i] = MODEL_INFO[i];
skyyoungsik 0:3473b92e991e 440 }
skyyoungsik 0:3473b92e991e 441 float firmware_info;
skyyoungsik 0:3473b92e991e 442 firmware_info = FIRMWARE_INFO;
skyyoungsik 0:3473b92e991e 443 Packet_DATA[14] = (uint8_t)(firmware_info * 100 / 256); Packet_DATA[15] = (uint8_t)((uint32_t)(firmware_info * 100) % 256);
skyyoungsik 0:3473b92e991e 444 break;
skyyoungsik 0:3473b92e991e 445 case 3:
skyyoungsik 0:3473b92e991e 446 //// RC Receiver ////
skyyoungsik 0:3473b92e991e 447 if (data_parse_detail_num == 0) {
skyyoungsik 0:3473b92e991e 448 Packet_DATA[0] = data_parse_detail_num; Packet_DATA[1] = 0; Packet_DATA[2] = 0; Packet_DATA[3] = 0; Packet_DATA[4] = 0; Packet_DATA[5] = 0; Packet_DATA[6] = 0; Packet_DATA[7] = 0;
skyyoungsik 0:3473b92e991e 449 }
skyyoungsik 0:3473b92e991e 450 else if(data_parse_detail_num <= 8){
skyyoungsik 0:3473b92e991e 451 Packet_DATA[0] = data_parse_detail_num; Packet_DATA[1] = cap_min[data_parse_detail_num - 1]; Packet_DATA[2] = cap_neu[data_parse_detail_num - 1]; Packet_DATA[3] = cap_max[data_parse_detail_num - 1]; Packet_DATA[4] = 0;
skyyoungsik 0:3473b92e991e 452 Packet_DATA[5] = cap_min[data_parse_detail_num - 1] + 127; Packet_DATA[6] = cap_neu[data_parse_detail_num - 1] + 127; Packet_DATA[7] = cap_max[data_parse_detail_num - 1] + 127;
skyyoungsik 0:3473b92e991e 453 }
skyyoungsik 0:3473b92e991e 454 else {
skyyoungsik 0:3473b92e991e 455 for (int i = 0; i <= 7; i++) Packet_DATA[i] = 0;
skyyoungsik 0:3473b92e991e 456 }
skyyoungsik 0:3473b92e991e 457 Packet_DATA[8] = raw_cap[0] + 127; Packet_DATA[9] = raw_cap[1] + 127; Packet_DATA[10] = raw_cap[2] + 127; Packet_DATA[11] = raw_cap[3] + 127; Packet_DATA[12] = raw_cap[4] + 127; Packet_DATA[13] = raw_cap[5] + 127; Packet_DATA[14] = raw_cap[6] + 127; Packet_DATA[15] = raw_cap[7] + 127;
skyyoungsik 0:3473b92e991e 458 break;
skyyoungsik 0:3473b92e991e 459 case 4:
skyyoungsik 0:3473b92e991e 460 for(int i=0; i<16; i++) Packet_DATA[i] = 0;
skyyoungsik 0:3473b92e991e 461 break;
skyyoungsik 0:3473b92e991e 462 case 5:
skyyoungsik 0:3473b92e991e 463 /////// LED //////////
skyyoungsik 0:3473b92e991e 464 Packet_DATA[0] = headlight_period; Packet_DATA[1] = headlight_dutyrate; Packet_DATA[2] = sidelight_period; Packet_DATA[3] = sidelight_dutyrate;
skyyoungsik 0:3473b92e991e 465 break;
skyyoungsik 0:3473b92e991e 466 case 6:
skyyoungsik 0:3473b92e991e 467 //// AHRS - Roll , Pitch ///
skyyoungsik 0:3473b92e991e 468 Packet_DATA[0] = 0;
skyyoungsik 0:3473b92e991e 469 Packet_DATA[1] = (uint8_t)((unsigned long)(((float)rollx100 / 100.0 + 180) * 100) / 256);
skyyoungsik 0:3473b92e991e 470 Packet_DATA[2] = (uint8_t)((unsigned long)(((float)rollx100 / 100.0 + 180) * 100) % 256);
skyyoungsik 0:3473b92e991e 471 Packet_DATA[3] = (uint8_t)((unsigned long)(((float)pitchx100 / 100.0 + 90) * 100) / 256);
skyyoungsik 0:3473b92e991e 472 Packet_DATA[4] = (uint8_t)((unsigned long)(((float)pitchx100 / 100.0 + 90) * 100) % 256);
skyyoungsik 0:3473b92e991e 473 //// AHRS - Yaw ///
skyyoungsik 0:3473b92e991e 474 Packet_DATA[5] = 0; Packet_DATA[6] = 0;
skyyoungsik 0:3473b92e991e 475 Packet_DATA[7] = (uint8_t)Compass_Calibration_Mode;
skyyoungsik 0:3473b92e991e 476 Packet_DATA[8] = (uint8_t)((unsigned long)(yawx100) / 256);
skyyoungsik 0:3473b92e991e 477 Packet_DATA[9] = (uint8_t)((unsigned long)(yawx100) % 256);
skyyoungsik 0:3473b92e991e 478 Packet_DATA[10] = (uint8_t)((long)((declination_angle + 180) * 100)/256);
skyyoungsik 0:3473b92e991e 479 Packet_DATA[11] = (uint8_t)((long)((declination_angle + 180) * 100)%256);
skyyoungsik 0:3473b92e991e 480 for (int i = 12; i <= 15; i++)Packet_DATA[i] = 0;
skyyoungsik 0:3473b92e991e 481 break;
skyyoungsik 0:3473b92e991e 482 case 7:
skyyoungsik 0:3473b92e991e 483 /// Limit ANGLE ////
skyyoungsik 0:3473b92e991e 484 Packet_DATA[0] = (limit_rollx100 + 32767) / 256;
skyyoungsik 0:3473b92e991e 485 Packet_DATA[1] = (limit_rollx100 + 32767) % 256;
skyyoungsik 0:3473b92e991e 486 Packet_DATA[2] = (limit_pitchx100 + 32767) / 256;
skyyoungsik 0:3473b92e991e 487 Packet_DATA[3] = (limit_pitchx100 + 32767) % 256;
skyyoungsik 0:3473b92e991e 488 Packet_DATA[4] = (limit_roll_rate + 32767) / 256;
skyyoungsik 0:3473b92e991e 489 Packet_DATA[5] = (limit_roll_rate + 32767) % 256;
skyyoungsik 0:3473b92e991e 490 Packet_DATA[6] = (limit_pitch_rate + 32767) / 256;
skyyoungsik 0:3473b92e991e 491 Packet_DATA[7] = (limit_pitch_rate + 32767) % 256;
skyyoungsik 0:3473b92e991e 492 Packet_DATA[8] = (limit_yaw_rate + 32767) / 256;
skyyoungsik 0:3473b92e991e 493 Packet_DATA[9] = (limit_yaw_rate + 32767) % 256;
skyyoungsik 0:3473b92e991e 494 for (int i = 10; i <= 15; i++) Packet_DATA[i] = 0;
skyyoungsik 0:3473b92e991e 495 break;
skyyoungsik 0:3473b92e991e 496 case 8:
skyyoungsik 0:3473b92e991e 497 Packet_DATA[0] = data_parse_detail_num;
skyyoungsik 0:3473b92e991e 498 if ((data_parse_detail_num > 0)&(data_parse_detail_num <= 20)) {
skyyoungsik 0:3473b92e991e 499 Packet_DATA[1] = gain_px100[data_parse_detail_num - 1] / 256;
skyyoungsik 0:3473b92e991e 500 Packet_DATA[2] = gain_px100[data_parse_detail_num - 1] % 256;
skyyoungsik 0:3473b92e991e 501 Packet_DATA[3] = gain_dx100[data_parse_detail_num - 1] / 256;
skyyoungsik 0:3473b92e991e 502 Packet_DATA[4] = gain_dx100[data_parse_detail_num - 1] % 256;
skyyoungsik 0:3473b92e991e 503 Packet_DATA[5] = gain_ix100[data_parse_detail_num - 1] / 256;
skyyoungsik 0:3473b92e991e 504 Packet_DATA[6] = gain_ix100[data_parse_detail_num - 1] % 256;
skyyoungsik 0:3473b92e991e 505 for (int i = 7; i <= 15; i++) Packet_DATA[i] = 0;
skyyoungsik 0:3473b92e991e 506 }
skyyoungsik 0:3473b92e991e 507 else {
skyyoungsik 0:3473b92e991e 508 for (int i = 1; i <= 15; i++) Packet_DATA[i] = 0;
skyyoungsik 0:3473b92e991e 509 }
skyyoungsik 0:3473b92e991e 510 break;
skyyoungsik 0:3473b92e991e 511 }
skyyoungsik 0:3473b92e991e 512
skyyoungsik 0:3473b92e991e 513 // CHKSUM //
skyyoungsik 0:3473b92e991e 514 unsigned int data_checksum = 0;
skyyoungsik 0:3473b92e991e 515 for (int i = 0; i < data_length; i++) {
skyyoungsik 0:3473b92e991e 516 data_checksum += Packet_DATA[i];
skyyoungsik 0:3473b92e991e 517 }
skyyoungsik 0:3473b92e991e 518 Packet_CHKSUM[0] = data_checksum / 256;
skyyoungsik 0:3473b92e991e 519 Packet_CHKSUM[1] = data_checksum % 256;
skyyoungsik 0:3473b92e991e 520
skyyoungsik 0:3473b92e991e 521 // Each Buffer Integrate to modem_buffer ///
skyyoungsik 0:3473b92e991e 522 uint8_t modem_buffer[27];
skyyoungsik 0:3473b92e991e 523 modem_buffer[0] = Packet_SOF[0]; modem_buffer[1] = Packet_SOF[1];
skyyoungsik 0:3473b92e991e 524 modem_buffer[2] = Packet_Identifier[0]; modem_buffer[3] = Packet_Identifier[1];
skyyoungsik 0:3473b92e991e 525 modem_buffer[4] = Packet_DC[0]; modem_buffer[5] = Packet_DC[1]; modem_buffer[6] = Packet_DC[2];
skyyoungsik 0:3473b92e991e 526 for (int i = 0; i < data_length; i++) {
skyyoungsik 0:3473b92e991e 527 modem_buffer[i + 7] = Packet_DATA[i];
skyyoungsik 0:3473b92e991e 528 }
skyyoungsik 0:3473b92e991e 529 modem_buffer[23] = Packet_CHKSUM[0];
skyyoungsik 0:3473b92e991e 530 modem_buffer[24] = Packet_CHKSUM[1];
skyyoungsik 0:3473b92e991e 531 modem_buffer[25] = Packet_EOF[0];
skyyoungsik 0:3473b92e991e 532 modem_buffer[26] = Packet_EOF[1];
skyyoungsik 0:3473b92e991e 533 for (int i = 0; i <= 26; i++) {
skyyoungsik 0:3473b92e991e 534 pc.putc(modem_buffer[i]);
skyyoungsik 0:3473b92e991e 535 }
skyyoungsik 0:3473b92e991e 536 }
skyyoungsik 0:3473b92e991e 537
skyyoungsik 0:3473b92e991e 538 void ROBOFRIEN_GUI::trans_flight_data(int id_dest, int data_parse_num) {
skyyoungsik 0:3473b92e991e 539
skyyoungsik 0:3473b92e991e 540 uint8_t Packet_SOF[2] = { 254,254 };
skyyoungsik 0:3473b92e991e 541 uint8_t Packet_Identifier[2];
skyyoungsik 0:3473b92e991e 542 uint8_t Packet_DC[3];
skyyoungsik 0:3473b92e991e 543 uint8_t Packet_DATA[73];
skyyoungsik 0:3473b92e991e 544 uint8_t Packet_CHKSUM[2];
skyyoungsik 0:3473b92e991e 545 uint8_t Packet_EOF[2] = { 255,255 };
skyyoungsik 0:3473b92e991e 546 // Identifier //
skyyoungsik 0:3473b92e991e 547 Packet_Identifier[0] = 0;
skyyoungsik 0:3473b92e991e 548 Packet_Identifier[1] = id_dest;
skyyoungsik 0:3473b92e991e 549 // Data Control //
skyyoungsik 0:3473b92e991e 550 Packet_DC[0] = 0;
skyyoungsik 0:3473b92e991e 551 Packet_DC[1] = (uint8_t)data_parse_num;
skyyoungsik 0:3473b92e991e 552 int data_length;
skyyoungsik 0:3473b92e991e 553 if (data_parse_num == 0) data_length = 73;
skyyoungsik 0:3473b92e991e 554 else data_length = 16;
skyyoungsik 0:3473b92e991e 555 Packet_DC[2] = (uint8_t)data_length;
skyyoungsik 0:3473b92e991e 556 // DATA - Modem & State //
skyyoungsik 0:3473b92e991e 557 if(Mode1 >= 15) Mode1 = 15;
skyyoungsik 0:3473b92e991e 558 else if(Mode1 <= 0) Mode1 = 0;
skyyoungsik 0:3473b92e991e 559 if(Mode2 >= 15) Mode2 = 15;
skyyoungsik 0:3473b92e991e 560 else if(Mode2 <= 0) Mode2 = 0;
skyyoungsik 0:3473b92e991e 561 if(MissionState >= 15) MissionState = 15;
skyyoungsik 0:3473b92e991e 562 else if(MissionState <= 0) MissionState = 0;
skyyoungsik 0:3473b92e991e 563 if(CurrentMarker >= 20) CurrentMarker = 20;
skyyoungsik 0:3473b92e991e 564 else if(CurrentMarker <= 0) CurrentMarker = 0;
skyyoungsik 0:3473b92e991e 565 HomePointChksum = ((Homepoint_Lat + 90000000)/16777216) + ((Homepoint_Lat + 90000000)%16777216/65536) + ((Homepoint_Lat + 90000000)%65536/256) + ((Homepoint_Lat + 90000000)%256);
skyyoungsik 0:3473b92e991e 566 HomePointChksum += ((Homepoint_Lng + 180000000)/16777216) + ((Homepoint_Lng + 180000000)%16777216/65536) + ((Homepoint_Lng + 180000000)%65536/256) + ((Homepoint_Lng + 180000000)%256);
skyyoungsik 0:3473b92e991e 567 HomePointChksum += ((Homepoint_Alt + 10000)/256 + (Homepoint_Alt + 10000)%256);
skyyoungsik 0:3473b92e991e 568 MarkerChksum = 0;
skyyoungsik 0:3473b92e991e 569 for(int i=0; i<20; i++){
skyyoungsik 0:3473b92e991e 570 MarkerChksum += Marker_Mode[i];
skyyoungsik 0:3473b92e991e 571 MarkerChksum += (Marker_Lat[i]+90000000)/16777216 + (Marker_Lat[i]+90000000)%16777216/65536 + (Marker_Lat[i]+90000000)%65536/256 + (Marker_Lat[i]+90000000)%256;
skyyoungsik 0:3473b92e991e 572 MarkerChksum += (Marker_Lng[i]+180000000)/16777216 + (Marker_Lng[i]+180000000)%16777216/65536 + (Marker_Lng[i]+180000000)%65536/256 + (Marker_Lng[i]+180000000)%256;
skyyoungsik 0:3473b92e991e 573 MarkerChksum += (Marker_Alt[i]+10000)/256 + (Marker_Alt[i]+10000)%256;
skyyoungsik 0:3473b92e991e 574 MarkerChksum += Marker_Speed[i]/256 + Marker_Speed[i]%256;
skyyoungsik 0:3473b92e991e 575 }
skyyoungsik 0:3473b92e991e 576 Packet_DATA[0] = Mode1 * 16 + Mode2;
skyyoungsik 0:3473b92e991e 577 Packet_DATA[1] = MissionState;
skyyoungsik 0:3473b92e991e 578 Packet_DATA[2] = CurrentMarker;
skyyoungsik 0:3473b92e991e 579 Packet_DATA[3] = Bat1;
skyyoungsik 0:3473b92e991e 580 Packet_DATA[4] = Bat2;
skyyoungsik 0:3473b92e991e 581 Packet_DATA[5] = button[0] * 1 + button[1] * 2 + button[2] * 4 + button[3] * 8 + button[4] * 16;
skyyoungsik 0:3473b92e991e 582 Packet_DATA[6] = HomePointChksum%256;
skyyoungsik 0:3473b92e991e 583 Packet_DATA[7] = MarkerChksum % 256;
skyyoungsik 0:3473b92e991e 584 // DATA - GPS //
skyyoungsik 0:3473b92e991e 585 unsigned long send_gps_time = utc_time;
skyyoungsik 0:3473b92e991e 586 Packet_DATA[8] = send_gps_time / 16777216;
skyyoungsik 0:3473b92e991e 587 Packet_DATA[9] = send_gps_time % 16777216 / 65536;
skyyoungsik 0:3473b92e991e 588 Packet_DATA[10] = send_gps_time % 65536 / 256;
skyyoungsik 0:3473b92e991e 589 Packet_DATA[11] = send_gps_time % 256;
skyyoungsik 0:3473b92e991e 590 signed long send_gps_latitude = latitude + 90000000;
skyyoungsik 0:3473b92e991e 591 Packet_DATA[12] = send_gps_latitude / 16777216;
skyyoungsik 0:3473b92e991e 592 Packet_DATA[13] = send_gps_latitude % 16777216 / 65536;
skyyoungsik 0:3473b92e991e 593 Packet_DATA[14] = send_gps_latitude % 65536 / 256;
skyyoungsik 0:3473b92e991e 594 Packet_DATA[15] = send_gps_latitude % 256;
skyyoungsik 0:3473b92e991e 595 signed long send_gps_longitude = longitude + 180000000;
skyyoungsik 0:3473b92e991e 596 Packet_DATA[16] = send_gps_longitude / 16777216;
skyyoungsik 0:3473b92e991e 597 Packet_DATA[17] = send_gps_longitude % 16777216 / 65536;
skyyoungsik 0:3473b92e991e 598 Packet_DATA[18] = send_gps_longitude % 65536 / 256;
skyyoungsik 0:3473b92e991e 599 Packet_DATA[19] = send_gps_longitude % 256;
skyyoungsik 0:3473b92e991e 600 signed long send_altitude;
skyyoungsik 0:3473b92e991e 601 if ((altitude + 10000) < 0) send_altitude = -10000;
skyyoungsik 0:3473b92e991e 602 else send_altitude = (altitude + 10000);
skyyoungsik 0:3473b92e991e 603 Packet_DATA[20] = send_altitude / 256;
skyyoungsik 0:3473b92e991e 604 Packet_DATA[21] = send_altitude % 256;
skyyoungsik 0:3473b92e991e 605 Packet_DATA[22] = SatNum;
skyyoungsik 0:3473b92e991e 606 // AHRS //
skyyoungsik 0:3473b92e991e 607 unsigned long send_roll = rollx100 + 32767;
skyyoungsik 0:3473b92e991e 608 Packet_DATA[23] = send_roll / 256;
skyyoungsik 0:3473b92e991e 609 Packet_DATA[24] = send_roll % 256;
skyyoungsik 0:3473b92e991e 610 unsigned long send_pitch = pitchx100 + 32767;
skyyoungsik 0:3473b92e991e 611 Packet_DATA[25] = send_pitch / 256;
skyyoungsik 0:3473b92e991e 612 Packet_DATA[26] = send_pitch % 256;
skyyoungsik 0:3473b92e991e 613 unsigned long send_yaw = yawx100;
skyyoungsik 0:3473b92e991e 614 Packet_DATA[27] = send_yaw / 256;
skyyoungsik 0:3473b92e991e 615 Packet_DATA[28] = send_yaw % 256;
skyyoungsik 0:3473b92e991e 616 unsigned long send_roll_rate = (roll_ratex100 +32767);
skyyoungsik 0:3473b92e991e 617 Packet_DATA[29] = send_roll_rate / 256;
skyyoungsik 0:3473b92e991e 618 Packet_DATA[30] = send_roll_rate % 256;
skyyoungsik 0:3473b92e991e 619 unsigned long send_pitch_rate = (pitch_ratex100 + 32767);
skyyoungsik 0:3473b92e991e 620 Packet_DATA[31] = send_pitch_rate / 256;
skyyoungsik 0:3473b92e991e 621 Packet_DATA[32] = send_pitch_rate % 256;
skyyoungsik 0:3473b92e991e 622 unsigned long send_yaw_rate = (yaw_ratex100 + 32767);
skyyoungsik 0:3473b92e991e 623 Packet_DATA[33] = send_yaw_rate / 256;
skyyoungsik 0:3473b92e991e 624 Packet_DATA[34] = send_yaw_rate % 256;
skyyoungsik 0:3473b92e991e 625 unsigned long send_velocity_x = (VXx100 + 32767);
skyyoungsik 0:3473b92e991e 626 Packet_DATA[35] = send_velocity_x / 256;
skyyoungsik 0:3473b92e991e 627 Packet_DATA[36] = send_velocity_x % 256;
skyyoungsik 0:3473b92e991e 628 unsigned long send_velocity_y = (VYx100 + 32767);
skyyoungsik 0:3473b92e991e 629 Packet_DATA[37] = send_velocity_y / 256;
skyyoungsik 0:3473b92e991e 630 Packet_DATA[38] = send_velocity_y % 256;
skyyoungsik 0:3473b92e991e 631 unsigned long send_velocity_z = (VZx100 + 32767);
skyyoungsik 0:3473b92e991e 632 Packet_DATA[39] = send_velocity_z / 256;
skyyoungsik 0:3473b92e991e 633 Packet_DATA[40] = send_velocity_z % 256;
skyyoungsik 0:3473b92e991e 634 // CAP and PWM //
skyyoungsik 0:3473b92e991e 635 Packet_DATA[41] = (cap[0] + 127);
skyyoungsik 0:3473b92e991e 636 Packet_DATA[42] = (cap[1] + 127);
skyyoungsik 0:3473b92e991e 637 Packet_DATA[43] = (cap[2] + 127);
skyyoungsik 0:3473b92e991e 638 Packet_DATA[44] = (cap[3] + 127);
skyyoungsik 0:3473b92e991e 639 Packet_DATA[45] = (cap[4] + 127);
skyyoungsik 0:3473b92e991e 640 Packet_DATA[46] = (cap[5] + 127);
skyyoungsik 0:3473b92e991e 641 Packet_DATA[47] = (cap[6] + 127);
skyyoungsik 0:3473b92e991e 642 Packet_DATA[48] = (cap[7] + 127);
skyyoungsik 0:3473b92e991e 643
skyyoungsik 0:3473b92e991e 644 // PWM //
skyyoungsik 0:3473b92e991e 645 for (int i = 49; i <= 56; i++) {
skyyoungsik 0:3473b92e991e 646 Packet_DATA[i] = pwm[i-49];
skyyoungsik 0:3473b92e991e 647 }
skyyoungsik 0:3473b92e991e 648 // DEBUG //
skyyoungsik 0:3473b92e991e 649 Packet_DATA[57] = (int)((DEBUGx100[0]))/256;
skyyoungsik 0:3473b92e991e 650 Packet_DATA[58] = (int)((DEBUGx100[0]))%256;
skyyoungsik 0:3473b92e991e 651 Packet_DATA[59] = (int)((DEBUGx100[1]))/256;
skyyoungsik 0:3473b92e991e 652 Packet_DATA[60] = (int)((DEBUGx100[1]))%256;
skyyoungsik 0:3473b92e991e 653 Packet_DATA[61] = (int)((DEBUGx100[2]))/256;
skyyoungsik 0:3473b92e991e 654 Packet_DATA[62] = (int)((DEBUGx100[2]))%256;
skyyoungsik 0:3473b92e991e 655 Packet_DATA[63] = (int)((DEBUGx100[3]))/256;
skyyoungsik 0:3473b92e991e 656 Packet_DATA[64] = (int)((DEBUGx100[3]))%256;
skyyoungsik 0:3473b92e991e 657 Packet_DATA[65] = (int)((DEBUGx100[4]))/256;
skyyoungsik 0:3473b92e991e 658 Packet_DATA[66] = (int)((DEBUGx100[4]))%256;
skyyoungsik 0:3473b92e991e 659 Packet_DATA[67] = (int)((DEBUGx100[5]))/256;
skyyoungsik 0:3473b92e991e 660 Packet_DATA[68] = (int)((DEBUGx100[5]))%256;
skyyoungsik 0:3473b92e991e 661 Packet_DATA[69] = (int)((DEBUGx100[6]))/256;
skyyoungsik 0:3473b92e991e 662 Packet_DATA[70] = (int)((DEBUGx100[6]))%256;
skyyoungsik 0:3473b92e991e 663 Packet_DATA[71] = (int)((DEBUGx100[7]))/256;
skyyoungsik 0:3473b92e991e 664 Packet_DATA[72] = (int)((DEBUGx100[7]))%256;
skyyoungsik 0:3473b92e991e 665 // CHKSUM //
skyyoungsik 0:3473b92e991e 666 unsigned int data_checksum = 0;
skyyoungsik 0:3473b92e991e 667 for (int i = 0; i < data_length; i++) {
skyyoungsik 0:3473b92e991e 668 data_checksum += Packet_DATA[i];
skyyoungsik 0:3473b92e991e 669 }
skyyoungsik 0:3473b92e991e 670 Packet_CHKSUM[0] = data_checksum / 256;
skyyoungsik 0:3473b92e991e 671 Packet_CHKSUM[1] = data_checksum % 256;
skyyoungsik 0:3473b92e991e 672
skyyoungsik 0:3473b92e991e 673 // Each Buffer Integrate to modem_buffer ///
skyyoungsik 0:3473b92e991e 674 uint8_t modem_buffer[84];
skyyoungsik 0:3473b92e991e 675 modem_buffer[0] = Packet_SOF[0]; modem_buffer[1] = Packet_SOF[1];
skyyoungsik 0:3473b92e991e 676 modem_buffer[2] = Packet_Identifier[0]; modem_buffer[3] = Packet_Identifier[1];
skyyoungsik 0:3473b92e991e 677 modem_buffer[4] = Packet_DC[0]; modem_buffer[5] = Packet_DC[1]; modem_buffer[6] = Packet_DC[2];
skyyoungsik 0:3473b92e991e 678 for (int i = 0; i < 73; i++) {
skyyoungsik 0:3473b92e991e 679 modem_buffer[i + 7] = Packet_DATA[i];
skyyoungsik 0:3473b92e991e 680 }
skyyoungsik 0:3473b92e991e 681 modem_buffer[80] = Packet_CHKSUM[0];
skyyoungsik 0:3473b92e991e 682 modem_buffer[81] = Packet_CHKSUM[1];
skyyoungsik 0:3473b92e991e 683 modem_buffer[82] = Packet_EOF[0];
skyyoungsik 0:3473b92e991e 684 modem_buffer[83] = Packet_EOF[1];
skyyoungsik 0:3473b92e991e 685 for (int i = 0; i <= 83; i++) {
skyyoungsik 0:3473b92e991e 686 pc.putc(modem_buffer[i]);
skyyoungsik 0:3473b92e991e 687 }
skyyoungsik 0:3473b92e991e 688 }
skyyoungsik 0:3473b92e991e 689
skyyoungsik 0:3473b92e991e 690 void ROBOFRIEN_GUI::attitude_calibrate(float in_acc_bias_x, float in_acc_bias_y, float in_acc_bias_z){
skyyoungsik 0:3473b92e991e 691 // calibrate_gap_roll += rollAngle;
skyyoungsik 0:3473b92e991e 692 // calibrate_gap_pitch += pitchAngle;
skyyoungsik 0:3473b92e991e 693 cal_accel_bias[0] = in_acc_bias_x;
skyyoungsik 0:3473b92e991e 694 cal_accel_bias[1] = in_acc_bias_y;
skyyoungsik 0:3473b92e991e 695 cal_accel_bias[2] = (in_acc_bias_z);
skyyoungsik 0:3473b92e991e 696 eeprom_write(EEPROM_AHRS_ROLL_GAP_UP, (((unsigned long)(in_acc_bias_x * 10000 + 32767) / 256)));
skyyoungsik 0:3473b92e991e 697 eeprom_write(EEPROM_AHRS_ROLL_GAP_DOWN, (((unsigned long)(in_acc_bias_x * 10000 + 32767) % 256)));
skyyoungsik 0:3473b92e991e 698 eeprom_write(EEPROM_AHRS_PITCH_GAP_UP, (((unsigned long)(in_acc_bias_y * 10000 + 32767) / 256)));
skyyoungsik 0:3473b92e991e 699 eeprom_write(EEPROM_AHRS_PITCH_GAP_DOWN, (((unsigned long)(in_acc_bias_y * 10000 + 32767) % 256)));
skyyoungsik 0:3473b92e991e 700 eeprom_write(EEPROM_AHRS_YAW_GAP_UP, (((unsigned long)(in_acc_bias_z * 10000 + 32767) / 256)));
skyyoungsik 0:3473b92e991e 701 eeprom_write(EEPROM_AHRS_YAW_GAP_DOWN, (((unsigned long)(in_acc_bias_z * 10000 + 32767) % 256)));
skyyoungsik 0:3473b92e991e 702 eeprom_refresh();
skyyoungsik 0:3473b92e991e 703 }
skyyoungsik 0:3473b92e991e 704
skyyoungsik 0:3473b92e991e 705 void ROBOFRIEN_GUI::write_compass_setting_to_eeprom(){
skyyoungsik 0:3473b92e991e 706 eeprom_write(EEPROM_AHRS_YAW_X_GAP_1, ( (uint32_t)(mag_x_avg + 32767)/256 ) );
skyyoungsik 0:3473b92e991e 707 eeprom_write(EEPROM_AHRS_YAW_X_GAP_2, ( (uint32_t)(mag_x_avg + 32767)%256 ) );
skyyoungsik 0:3473b92e991e 708 // eeprom_write(EEPROM_AHRS_YAW_X_GAP_FLOAT, ( (unsigned long)(mag_x_avg * 100)%100 ) );
skyyoungsik 0:3473b92e991e 709 // eeprom_write(EEPROM_AHRS_YAW_X_GAP_3, ( (uint32_t)(mag_x_avg * 100 + 2147483648)%65536/256 ) );
skyyoungsik 0:3473b92e991e 710 // eeprom_write(EEPROM_AHRS_YAW_X_GAP_4, ( (uint32_t)(mag_x_avg * 100 + 2147483648)%256 ) );
skyyoungsik 0:3473b92e991e 711
skyyoungsik 0:3473b92e991e 712 eeprom_write(EEPROM_AHRS_YAW_Y_GAP_1, ( (uint32_t)(mag_y_avg + 32767)/256 ) );
skyyoungsik 0:3473b92e991e 713 eeprom_write(EEPROM_AHRS_YAW_Y_GAP_2, ( (uint32_t)(mag_y_avg + 32767)%256 ) );
skyyoungsik 0:3473b92e991e 714 // eeprom_write(EEPROM_AHRS_YAW_Y_GAP_FLOAT, ( (unsigned long)(mag_y_avg * 100)%100 ) );
skyyoungsik 0:3473b92e991e 715 // eeprom_write(EEPROM_AHRS_YAW_Y_GAP_3, ( (uint32_t)(mag_y_avg * 100 + 2147483648)%65536/256 ) );
skyyoungsik 0:3473b92e991e 716 // eeprom_write(EEPROM_AHRS_YAW_Y_GAP_4, ( (uint32_t)(mag_y_avg * 100 + 2147483648)%256 ) );
skyyoungsik 0:3473b92e991e 717
skyyoungsik 0:3473b92e991e 718 eeprom_write(EEPROM_AHRS_YAW_Z_GAP_1, ( (uint32_t)(mag_z_avg + 32767)/256 ) );
skyyoungsik 0:3473b92e991e 719 eeprom_write(EEPROM_AHRS_YAW_Z_GAP_2, ( (uint32_t)(mag_z_avg + 32767)%256 ) );
skyyoungsik 0:3473b92e991e 720
skyyoungsik 0:3473b92e991e 721 eeprom_refresh();
skyyoungsik 0:3473b92e991e 722 }