Program test for Coragem

Dependencies:   SX1272 SPI_MX25R

Committer:
marcoantonioara
Date:
Wed Nov 13 16:42:06 2019 +0000
Revision:
4:05d5aa4d3f2d
Test version firmware Coragem using all sensors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcoantonioara 4:05d5aa4d3f2d 1
marcoantonioara 4:05d5aa4d3f2d 2 #define SYNC1 0xB5
marcoantonioara 4:05d5aa4d3f2d 3 #define SYNC2 0x62
marcoantonioara 4:05d5aa4d3f2d 4
marcoantonioara 4:05d5aa4d3f2d 5 //GPS DEclaration
marcoantonioara 4:05d5aa4d3f2d 6 SPI spi_2(P0_5, P0_7, P0_11); // mosi, miso, sclk
marcoantonioara 4:05d5aa4d3f2d 7 DigitalOut cs(P0_27);
marcoantonioara 4:05d5aa4d3f2d 8 DigitalOut gps_reset(P1_2);
marcoantonioara 4:05d5aa4d3f2d 9
marcoantonioara 4:05d5aa4d3f2d 10
marcoantonioara 4:05d5aa4d3f2d 11
marcoantonioara 4:05d5aa4d3f2d 12
marcoantonioara 4:05d5aa4d3f2d 13
marcoantonioara 4:05d5aa4d3f2d 14
marcoantonioara 4:05d5aa4d3f2d 15 typedef struct
marcoantonioara 4:05d5aa4d3f2d 16 {
marcoantonioara 4:05d5aa4d3f2d 17 uint8_t cls;
marcoantonioara 4:05d5aa4d3f2d 18 uint8_t id;
marcoantonioara 4:05d5aa4d3f2d 19 uint16_t len; //Length of the payload. Does not include cls, id, or checksum bytes
marcoantonioara 4:05d5aa4d3f2d 20 uint8_t *payload;
marcoantonioara 4:05d5aa4d3f2d 21 uint8_t checksumA; //Given to us from module. Checked against the rolling calculated A/B checksums.
marcoantonioara 4:05d5aa4d3f2d 22 uint8_t checksumB;
marcoantonioara 4:05d5aa4d3f2d 23 } gps_ubxPacket;
marcoantonioara 4:05d5aa4d3f2d 24
marcoantonioara 4:05d5aa4d3f2d 25 typedef struct
marcoantonioara 4:05d5aa4d3f2d 26 {
marcoantonioara 4:05d5aa4d3f2d 27 uint32_t iTOW=0;
marcoantonioara 4:05d5aa4d3f2d 28 uint16_t year=0;
marcoantonioara 4:05d5aa4d3f2d 29 uint8_t month=0;
marcoantonioara 4:05d5aa4d3f2d 30 uint8_t day=0;
marcoantonioara 4:05d5aa4d3f2d 31 uint8_t hour=0;
marcoantonioara 4:05d5aa4d3f2d 32 uint8_t min=0;
marcoantonioara 4:05d5aa4d3f2d 33 uint8_t sec=0;
marcoantonioara 4:05d5aa4d3f2d 34 int8_t valid=0;
marcoantonioara 4:05d5aa4d3f2d 35 uint32_t tAcc=0;
marcoantonioara 4:05d5aa4d3f2d 36 int32_t nano=0;
marcoantonioara 4:05d5aa4d3f2d 37 uint8_t fixtype=0;
marcoantonioara 4:05d5aa4d3f2d 38 int8_t flags=0;
marcoantonioara 4:05d5aa4d3f2d 39 int8_t flags2=0;
marcoantonioara 4:05d5aa4d3f2d 40 uint8_t numSV=0;
marcoantonioara 4:05d5aa4d3f2d 41 int32_t lon=0;
marcoantonioara 4:05d5aa4d3f2d 42 int32_t lat=0;
marcoantonioara 4:05d5aa4d3f2d 43 int32_t height=0;
marcoantonioara 4:05d5aa4d3f2d 44 int32_t hMSL=0;
marcoantonioara 4:05d5aa4d3f2d 45 uint32_t hAcc=0;
marcoantonioara 4:05d5aa4d3f2d 46 uint32_t vAcc=0;
marcoantonioara 4:05d5aa4d3f2d 47 int32_t velN=0;
marcoantonioara 4:05d5aa4d3f2d 48 int32_t velE=0;
marcoantonioara 4:05d5aa4d3f2d 49 int32_t velD=0;
marcoantonioara 4:05d5aa4d3f2d 50 int32_t gSpeed=0;
marcoantonioara 4:05d5aa4d3f2d 51 int32_t headMot=0;
marcoantonioara 4:05d5aa4d3f2d 52 uint32_t sAcc=0;
marcoantonioara 4:05d5aa4d3f2d 53 uint32_t headAcc=0;
marcoantonioara 4:05d5aa4d3f2d 54 uint16_t pDOP=0;
marcoantonioara 4:05d5aa4d3f2d 55 int32_t headVeh;
marcoantonioara 4:05d5aa4d3f2d 56 int16_t magDec;
marcoantonioara 4:05d5aa4d3f2d 57 uint16_t magAcc;
marcoantonioara 4:05d5aa4d3f2d 58
marcoantonioara 4:05d5aa4d3f2d 59
marcoantonioara 4:05d5aa4d3f2d 60 } gps_navPVT;
marcoantonioara 4:05d5aa4d3f2d 61
marcoantonioara 4:05d5aa4d3f2d 62
marcoantonioara 4:05d5aa4d3f2d 63 void gps_leBootMsg(){
marcoantonioara 4:05d5aa4d3f2d 64 #define MAXIMUM_PACKET_SIZE 60
marcoantonioara 4:05d5aa4d3f2d 65 int packet_size;
marcoantonioara 4:05d5aa4d3f2d 66 uint8_t packet[MAXIMUM_PACKET_SIZE];
marcoantonioara 4:05d5aa4d3f2d 67 uint8_t value;
marcoantonioara 4:05d5aa4d3f2d 68 int cont;
marcoantonioara 4:05d5aa4d3f2d 69 value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 70 while (value != '$' ){ //wait start boot msg
marcoantonioara 4:05d5aa4d3f2d 71 value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 72 wait_ms(5);
marcoantonioara 4:05d5aa4d3f2d 73 cont++;
marcoantonioara 4:05d5aa4d3f2d 74 if (cont > 100)
marcoantonioara 4:05d5aa4d3f2d 75 return;
marcoantonioara 4:05d5aa4d3f2d 76 }
marcoantonioara 4:05d5aa4d3f2d 77 packet[0] = value;
marcoantonioara 4:05d5aa4d3f2d 78 value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 79 for (packet_size = 1 ; packet_size <= MAXIMUM_PACKET_SIZE ;packet_size++) {
marcoantonioara 4:05d5aa4d3f2d 80 if (value != '\n' ){
marcoantonioara 4:05d5aa4d3f2d 81 packet [packet_size]= value;
marcoantonioara 4:05d5aa4d3f2d 82 value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 83 }
marcoantonioara 4:05d5aa4d3f2d 84 else {
marcoantonioara 4:05d5aa4d3f2d 85 lora_send_packet (packet , (uint8_t) packet_size+1); // manda atraves do lora a mensagem de boot do gps
marcoantonioara 4:05d5aa4d3f2d 86 return;
marcoantonioara 4:05d5aa4d3f2d 87 }
marcoantonioara 4:05d5aa4d3f2d 88 }
marcoantonioara 4:05d5aa4d3f2d 89
marcoantonioara 4:05d5aa4d3f2d 90 }
marcoantonioara 4:05d5aa4d3f2d 91
marcoantonioara 4:05d5aa4d3f2d 92 void gps_le_envia_linha(){
marcoantonioara 4:05d5aa4d3f2d 93
marcoantonioara 4:05d5aa4d3f2d 94 uint8_t packet[150];
marcoantonioara 4:05d5aa4d3f2d 95 uint8_t value;
marcoantonioara 4:05d5aa4d3f2d 96
marcoantonioara 4:05d5aa4d3f2d 97 for (int i=0;i < 149; i++){
marcoantonioara 4:05d5aa4d3f2d 98 if (value == '\n'){
marcoantonioara 4:05d5aa4d3f2d 99 lora_send_packet (packet , (uint8_t) i);
marcoantonioara 4:05d5aa4d3f2d 100 return;
marcoantonioara 4:05d5aa4d3f2d 101 }
marcoantonioara 4:05d5aa4d3f2d 102 else packet [i] =value;
marcoantonioara 4:05d5aa4d3f2d 103 }
marcoantonioara 4:05d5aa4d3f2d 104 lora_send_packet (packet , (uint8_t) 99);
marcoantonioara 4:05d5aa4d3f2d 105
marcoantonioara 4:05d5aa4d3f2d 106 }
marcoantonioara 4:05d5aa4d3f2d 107
marcoantonioara 4:05d5aa4d3f2d 108
marcoantonioara 4:05d5aa4d3f2d 109 gps_ubxPacket gps_calcula_check(gps_ubxPacket Packet) {
marcoantonioara 4:05d5aa4d3f2d 110
marcoantonioara 4:05d5aa4d3f2d 111 uint8_t Buffer[Packet.len + 4];
marcoantonioara 4:05d5aa4d3f2d 112 uint8_t CK_A=0;
marcoantonioara 4:05d5aa4d3f2d 113 uint8_t CK_B=0;
marcoantonioara 4:05d5aa4d3f2d 114
marcoantonioara 4:05d5aa4d3f2d 115 Buffer[0]= Packet.cls;
marcoantonioara 4:05d5aa4d3f2d 116 Buffer[1]= Packet.id;
marcoantonioara 4:05d5aa4d3f2d 117 Buffer[2]= Packet.len & 0xFF;
marcoantonioara 4:05d5aa4d3f2d 118 Buffer[3]= (Packet.len >> 8)& 0xFF;;
marcoantonioara 4:05d5aa4d3f2d 119
marcoantonioara 4:05d5aa4d3f2d 120 //send_packet (Buffer, (uint8_t) 4 );
marcoantonioara 4:05d5aa4d3f2d 121
marcoantonioara 4:05d5aa4d3f2d 122 for (uint16_t i = 0; i < Packet.len; i++) {
marcoantonioara 4:05d5aa4d3f2d 123 Buffer [i+4] = Packet.payload[i] ;
marcoantonioara 4:05d5aa4d3f2d 124 }
marcoantonioara 4:05d5aa4d3f2d 125
marcoantonioara 4:05d5aa4d3f2d 126 //send_packet (Buffer, (uint8_t) Packet.len + 4 );
marcoantonioara 4:05d5aa4d3f2d 127
marcoantonioara 4:05d5aa4d3f2d 128 for(int i=0 ; i < Packet.len + 4 ; i++) {
marcoantonioara 4:05d5aa4d3f2d 129 CK_A = CK_A + Buffer[i];
marcoantonioara 4:05d5aa4d3f2d 130 CK_B = CK_B + CK_A;
marcoantonioara 4:05d5aa4d3f2d 131 CK_A = CK_A & 0xFF;
marcoantonioara 4:05d5aa4d3f2d 132 CK_B = CK_B & 0xFF;
marcoantonioara 4:05d5aa4d3f2d 133 //uint8_t packet_check[5] ={Buffer[i],(uint8_t) (i+1),CK_A,CK_B,'#'};
marcoantonioara 4:05d5aa4d3f2d 134 // send_packet (packet_check , (uint8_t) 5);
marcoantonioara 4:05d5aa4d3f2d 135 }
marcoantonioara 4:05d5aa4d3f2d 136
marcoantonioara 4:05d5aa4d3f2d 137
marcoantonioara 4:05d5aa4d3f2d 138 // uint8_t packet_check[2] ={CK_A, CK_B};
marcoantonioara 4:05d5aa4d3f2d 139 // send_packet (packet_check , (uint8_t) 2);
marcoantonioara 4:05d5aa4d3f2d 140
marcoantonioara 4:05d5aa4d3f2d 141 Packet.checksumA = CK_A;
marcoantonioara 4:05d5aa4d3f2d 142 Packet.checksumB = CK_B;
marcoantonioara 4:05d5aa4d3f2d 143
marcoantonioara 4:05d5aa4d3f2d 144 return Packet;
marcoantonioara 4:05d5aa4d3f2d 145
marcoantonioara 4:05d5aa4d3f2d 146 }
marcoantonioara 4:05d5aa4d3f2d 147
marcoantonioara 4:05d5aa4d3f2d 148 void send_gps_packet(gps_ubxPacket packet){
marcoantonioara 4:05d5aa4d3f2d 149
marcoantonioara 4:05d5aa4d3f2d 150 spi_2.write(SYNC1);
marcoantonioara 4:05d5aa4d3f2d 151 spi_2.write(SYNC2);
marcoantonioara 4:05d5aa4d3f2d 152 spi_2.write(packet.cls);
marcoantonioara 4:05d5aa4d3f2d 153 spi_2.write(packet.id);
marcoantonioara 4:05d5aa4d3f2d 154 spi_2.write(packet.len & 0xFF);
marcoantonioara 4:05d5aa4d3f2d 155 spi_2.write((packet.len >> 8)& 0xFF);
marcoantonioara 4:05d5aa4d3f2d 156
marcoantonioara 4:05d5aa4d3f2d 157 for (uint16_t i = 0; i < packet.len; i++) {
marcoantonioara 4:05d5aa4d3f2d 158 spi_2.write(packet.payload[i]);
marcoantonioara 4:05d5aa4d3f2d 159 }
marcoantonioara 4:05d5aa4d3f2d 160 spi_2.write(packet.checksumA);
marcoantonioara 4:05d5aa4d3f2d 161 spi_2.write(packet.checksumB);
marcoantonioara 4:05d5aa4d3f2d 162
marcoantonioara 4:05d5aa4d3f2d 163 //=============imprime resposta
marcoantonioara 4:05d5aa4d3f2d 164 wait_ms(50);
marcoantonioara 4:05d5aa4d3f2d 165 gps_le_envia_linha();
marcoantonioara 4:05d5aa4d3f2d 166 gps_le_envia_linha();
marcoantonioara 4:05d5aa4d3f2d 167
marcoantonioara 4:05d5aa4d3f2d 168 }
marcoantonioara 4:05d5aa4d3f2d 169
marcoantonioara 4:05d5aa4d3f2d 170 gps_navPVT le_nav_pvt () {
marcoantonioara 4:05d5aa4d3f2d 171
marcoantonioara 4:05d5aa4d3f2d 172 gps_navPVT Pac;
marcoantonioara 4:05d5aa4d3f2d 173
marcoantonioara 4:05d5aa4d3f2d 174 char state = 0;
marcoantonioara 4:05d5aa4d3f2d 175 int cont =0;
marcoantonioara 4:05d5aa4d3f2d 176
marcoantonioara 4:05d5aa4d3f2d 177 while (1){ //começou mensagem
marcoantonioara 4:05d5aa4d3f2d 178 if (cont > 250) return Pac;
marcoantonioara 4:05d5aa4d3f2d 179 if (state == 0 ){
marcoantonioara 4:05d5aa4d3f2d 180 if (spi_2.write(0x00) == 0xb5)
marcoantonioara 4:05d5aa4d3f2d 181 state =1;
marcoantonioara 4:05d5aa4d3f2d 182 else {
marcoantonioara 4:05d5aa4d3f2d 183 cont++;
marcoantonioara 4:05d5aa4d3f2d 184 wait_ms(40);
marcoantonioara 4:05d5aa4d3f2d 185 }
marcoantonioara 4:05d5aa4d3f2d 186
marcoantonioara 4:05d5aa4d3f2d 187 }
marcoantonioara 4:05d5aa4d3f2d 188 else if (state == 1){ // read 0xb5
marcoantonioara 4:05d5aa4d3f2d 189 if (spi_2.write(0x00) == 0x62){
marcoantonioara 4:05d5aa4d3f2d 190 state =2;
marcoantonioara 4:05d5aa4d3f2d 191 //wait_ms(30);
marcoantonioara 4:05d5aa4d3f2d 192 }
marcoantonioara 4:05d5aa4d3f2d 193 else state =0;
marcoantonioara 4:05d5aa4d3f2d 194 }
marcoantonioara 4:05d5aa4d3f2d 195 else if (state == 2) {// read 0xb5 0x62
marcoantonioara 4:05d5aa4d3f2d 196 if (spi_2.write(0x00) == 0x01){
marcoantonioara 4:05d5aa4d3f2d 197 state =3;
marcoantonioara 4:05d5aa4d3f2d 198 //wait_ms(30);
marcoantonioara 4:05d5aa4d3f2d 199 }
marcoantonioara 4:05d5aa4d3f2d 200 else state =0;
marcoantonioara 4:05d5aa4d3f2d 201 }
marcoantonioara 4:05d5aa4d3f2d 202 else if (state == 3) {// read 0xb5 0x62 0x01
marcoantonioara 4:05d5aa4d3f2d 203 if (spi_2.write(0x00) == 0x07){
marcoantonioara 4:05d5aa4d3f2d 204 state =4;
marcoantonioara 4:05d5aa4d3f2d 205 //wait_ms(30);
marcoantonioara 4:05d5aa4d3f2d 206 }
marcoantonioara 4:05d5aa4d3f2d 207 else state =0;
marcoantonioara 4:05d5aa4d3f2d 208 }
marcoantonioara 4:05d5aa4d3f2d 209 else if (state == 4) {// read 0xb5 0x62 0x01 0x07
marcoantonioara 4:05d5aa4d3f2d 210 if (spi_2.write(0x00) == 0x5c){
marcoantonioara 4:05d5aa4d3f2d 211 state =5;
marcoantonioara 4:05d5aa4d3f2d 212 //wait_ms(30);
marcoantonioara 4:05d5aa4d3f2d 213 }
marcoantonioara 4:05d5aa4d3f2d 214 else state =0;
marcoantonioara 4:05d5aa4d3f2d 215 }
marcoantonioara 4:05d5aa4d3f2d 216 else if (state == 5) {// read 0xb5 0x62 0x01 0x07 0x5c
marcoantonioara 4:05d5aa4d3f2d 217 if (spi_2.write(0x00) == 0x00){
marcoantonioara 4:05d5aa4d3f2d 218 state =6;
marcoantonioara 4:05d5aa4d3f2d 219 //wait_ms(25);
marcoantonioara 4:05d5aa4d3f2d 220 }
marcoantonioara 4:05d5aa4d3f2d 221 else state =0;
marcoantonioara 4:05d5aa4d3f2d 222 }
marcoantonioara 4:05d5aa4d3f2d 223 else if (state == 6){ // read 0xb5 0x62 0x01 0x07 0x92 0x00
marcoantonioara 4:05d5aa4d3f2d 224 uint8_t value1,value2,value3,value4;
marcoantonioara 4:05d5aa4d3f2d 225 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 226 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 227 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 228 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 229 Pac.iTOW = (value4 << 24) + (value3 <<16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 230
marcoantonioara 4:05d5aa4d3f2d 231 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 232 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 233 Pac.year = (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 234
marcoantonioara 4:05d5aa4d3f2d 235 Pac.month = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 236 Pac.day = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 237 Pac.hour = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 238 Pac.min = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 239 Pac.sec = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 240 Pac.valid = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 241
marcoantonioara 4:05d5aa4d3f2d 242 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 243 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 244 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 245 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 246 Pac.tAcc = (value4 << 24) + (value3 <<16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 247
marcoantonioara 4:05d5aa4d3f2d 248 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 249 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 250 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 251 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 252 Pac.nano = (value4 << 24) + (value3 <<16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 253
marcoantonioara 4:05d5aa4d3f2d 254 Pac.fixtype = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 255 Pac.flags = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 256 Pac.flags2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 257 Pac.numSV = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 258
marcoantonioara 4:05d5aa4d3f2d 259 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 260 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 261 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 262 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 263 Pac.lon = (value4 << 24) + (value3 <<16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 264
marcoantonioara 4:05d5aa4d3f2d 265 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 266 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 267 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 268 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 269 Pac.lat = (value4 << 24) + (value3 <<16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 270
marcoantonioara 4:05d5aa4d3f2d 271 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 272 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 273 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 274 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 275 Pac.height = (value4 << 24) + (value3 <<16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 276
marcoantonioara 4:05d5aa4d3f2d 277 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 278 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 279 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 280 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 281 Pac.hMSL = (value4 << 24) + (value3 <<16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 282
marcoantonioara 4:05d5aa4d3f2d 283 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 284 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 285 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 286 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 287 Pac.hAcc = (value4 << 24) + (value3 <<16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 288
marcoantonioara 4:05d5aa4d3f2d 289 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 290 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 291 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 292 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 293 Pac.vAcc = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 294
marcoantonioara 4:05d5aa4d3f2d 295 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 296 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 297 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 298 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 299 Pac.velN = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 300
marcoantonioara 4:05d5aa4d3f2d 301 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 302 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 303 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 304 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 305 Pac.velE = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 306
marcoantonioara 4:05d5aa4d3f2d 307 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 308 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 309 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 310 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 311 Pac.velD = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 312
marcoantonioara 4:05d5aa4d3f2d 313 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 314 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 315 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 316 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 317 Pac.gSpeed = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 318
marcoantonioara 4:05d5aa4d3f2d 319 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 320 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 321 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 322 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 323 Pac.headMot = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 324
marcoantonioara 4:05d5aa4d3f2d 325 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 326 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 327 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 328 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 329 Pac.sAcc = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 330
marcoantonioara 4:05d5aa4d3f2d 331 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 332 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 333 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 334 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 335 Pac.headAcc = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 336
marcoantonioara 4:05d5aa4d3f2d 337 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 338 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 339 Pac.pDOP = (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 340
marcoantonioara 4:05d5aa4d3f2d 341 for (int i=0; i < 6; i++)spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 342
marcoantonioara 4:05d5aa4d3f2d 343 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 344 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 345 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 346 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 347 Pac.headAcc = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 348
marcoantonioara 4:05d5aa4d3f2d 349 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 350 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 351 value3 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 352 value4 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 353 Pac.headAcc = (value4 << 24) + (value3 << 16) + (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 354
marcoantonioara 4:05d5aa4d3f2d 355 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 356 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 357 Pac.magDec = (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 358
marcoantonioara 4:05d5aa4d3f2d 359 value1 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 360 value2 = 0xff & spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 361 Pac.magAcc = (value2 << 8) + value1;
marcoantonioara 4:05d5aa4d3f2d 362
marcoantonioara 4:05d5aa4d3f2d 363
marcoantonioara 4:05d5aa4d3f2d 364 return Pac;
marcoantonioara 4:05d5aa4d3f2d 365 }
marcoantonioara 4:05d5aa4d3f2d 366 }
marcoantonioara 4:05d5aa4d3f2d 367 wait_ms(100);
marcoantonioara 4:05d5aa4d3f2d 368 }
marcoantonioara 4:05d5aa4d3f2d 369
marcoantonioara 4:05d5aa4d3f2d 370 void send_nav_pvt (){
marcoantonioara 4:05d5aa4d3f2d 371 uint8_t packet_nav_pvt[] = { 0xB5, 0x62, 0x01, 0x07, 0x00, 0x00, 0x08, 0x19};
marcoantonioara 4:05d5aa4d3f2d 372
marcoantonioara 4:05d5aa4d3f2d 373 //=============envia pacote nav pvt
marcoantonioara 4:05d5aa4d3f2d 374 for ( int i=0; i< sizeof(packet_nav_pvt) ; i++){
marcoantonioara 4:05d5aa4d3f2d 375 spi_2.write(packet_nav_pvt[i]);
marcoantonioara 4:05d5aa4d3f2d 376 wait_ms(5);
marcoantonioara 4:05d5aa4d3f2d 377 }
marcoantonioara 4:05d5aa4d3f2d 378
marcoantonioara 4:05d5aa4d3f2d 379 gps_navPVT Data = le_nav_pvt();
marcoantonioara 4:05d5aa4d3f2d 380 uint8_t packet [100];
marcoantonioara 4:05d5aa4d3f2d 381
marcoantonioara 4:05d5aa4d3f2d 382
marcoantonioara 4:05d5aa4d3f2d 383 packet [0]= (Data.lon >> 24)& 0xff;
marcoantonioara 4:05d5aa4d3f2d 384 packet [1]= (Data.lon >> 16) & 0xff ;
marcoantonioara 4:05d5aa4d3f2d 385 packet [2]= (Data.lon >> 8) & 0xff;
marcoantonioara 4:05d5aa4d3f2d 386 packet [3]= Data.lon & 0xff;
marcoantonioara 4:05d5aa4d3f2d 387 packet [4]= (Data.lat >> 24)& 0xff;
marcoantonioara 4:05d5aa4d3f2d 388 packet [5]= (Data.lat >> 16) & 0xff ;
marcoantonioara 4:05d5aa4d3f2d 389 packet [6]= (Data.lat >> 8) & 0xff;
marcoantonioara 4:05d5aa4d3f2d 390 packet [7]= Data.lat & 0xff;
marcoantonioara 4:05d5aa4d3f2d 391 packet [8]= (Data.hMSL >> 24)& 0xff;
marcoantonioara 4:05d5aa4d3f2d 392 packet [9]= (Data.hMSL >> 16) & 0xff ;
marcoantonioara 4:05d5aa4d3f2d 393 packet [10]= (Data.hMSL >> 8) & 0xff;
marcoantonioara 4:05d5aa4d3f2d 394 packet [11]= Data.hMSL & 0xff;
marcoantonioara 4:05d5aa4d3f2d 395
marcoantonioara 4:05d5aa4d3f2d 396 if (Data.lon !=0 || Data.lat !=0 ){
marcoantonioara 4:05d5aa4d3f2d 397 lora_send_packet (packet , (uint8_t) 12);
marcoantonioara 4:05d5aa4d3f2d 398 }
marcoantonioara 4:05d5aa4d3f2d 399 }
marcoantonioara 4:05d5aa4d3f2d 400
marcoantonioara 4:05d5aa4d3f2d 401 void send_gps_data(uint8_t *packet, uint8_t size){
marcoantonioara 4:05d5aa4d3f2d 402 uint8_t packet_rec[size];
marcoantonioara 4:05d5aa4d3f2d 403 for ( int i=0; i< size ; i++){
marcoantonioara 4:05d5aa4d3f2d 404 spi_2.write(packet[i]);
marcoantonioara 4:05d5aa4d3f2d 405 //wait_ms(5);
marcoantonioara 4:05d5aa4d3f2d 406 }
marcoantonioara 4:05d5aa4d3f2d 407 //send_packet (packet_rec ,size);
marcoantonioara 4:05d5aa4d3f2d 408 }
marcoantonioara 4:05d5aa4d3f2d 409
marcoantonioara 4:05d5aa4d3f2d 410 /*
marcoantonioara 4:05d5aa4d3f2d 411 void wait_packet (uint8_t *header) {
marcoantonioara 4:05d5aa4d3f2d 412
marcoantonioara 4:05d5aa4d3f2d 413 char state = 0;
marcoantonioara 4:05d5aa4d3f2d 414 int cont =0;
marcoantonioara 4:05d5aa4d3f2d 415
marcoantonioara 4:05d5aa4d3f2d 416 while (1){ //começou mensagem
marcoantonioara 4:05d5aa4d3f2d 417 if (cont > 250) {
marcoantonioara 4:05d5aa4d3f2d 418 //led2=!led2;
marcoantonioara 4:05d5aa4d3f2d 419 return;
marcoantonioara 4:05d5aa4d3f2d 420 }
marcoantonioara 4:05d5aa4d3f2d 421 if (state == 0 ){
marcoantonioara 4:05d5aa4d3f2d 422 if (spi_2.write(0x00) == header[0])
marcoantonioara 4:05d5aa4d3f2d 423 state =1;
marcoantonioara 4:05d5aa4d3f2d 424 else {
marcoantonioara 4:05d5aa4d3f2d 425 cont++;
marcoantonioara 4:05d5aa4d3f2d 426 wait_ms(10);
marcoantonioara 4:05d5aa4d3f2d 427 }
marcoantonioara 4:05d5aa4d3f2d 428
marcoantonioara 4:05d5aa4d3f2d 429
marcoantonioara 4:05d5aa4d3f2d 430 }
marcoantonioara 4:05d5aa4d3f2d 431 else if (state == 1){ // read 0xb5
marcoantonioara 4:05d5aa4d3f2d 432 if (spi_2.write(0x00) == header[1]){
marcoantonioara 4:05d5aa4d3f2d 433 state =2;
marcoantonioara 4:05d5aa4d3f2d 434 }
marcoantonioara 4:05d5aa4d3f2d 435 else state =0;
marcoantonioara 4:05d5aa4d3f2d 436 }
marcoantonioara 4:05d5aa4d3f2d 437 else if (state == 2) {// read 0xb5 0x62
marcoantonioara 4:05d5aa4d3f2d 438 if (spi_2.write(0x00) == header[2]){
marcoantonioara 4:05d5aa4d3f2d 439 state =3;
marcoantonioara 4:05d5aa4d3f2d 440 }
marcoantonioara 4:05d5aa4d3f2d 441 else state =0;
marcoantonioara 4:05d5aa4d3f2d 442 }
marcoantonioara 4:05d5aa4d3f2d 443 else if (state == 3) {// read 0xb5 0x62 0x06
marcoantonioara 4:05d5aa4d3f2d 444 if (spi_2.write(0x00) == header[3]){
marcoantonioara 4:05d5aa4d3f2d 445 state =4;
marcoantonioara 4:05d5aa4d3f2d 446 }
marcoantonioara 4:05d5aa4d3f2d 447 else state =0;
marcoantonioara 4:05d5aa4d3f2d 448 }
marcoantonioara 4:05d5aa4d3f2d 449 else if (state == 4) {// read 0xb5 0x62 0x06 0x013
marcoantonioara 4:05d5aa4d3f2d 450
marcoantonioara 4:05d5aa4d3f2d 451 uint8_t packet[100];
marcoantonioara 4:05d5aa4d3f2d 452 uint8_t value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 453 uint8_t packet_size;
marcoantonioara 4:05d5aa4d3f2d 454
marcoantonioara 4:05d5aa4d3f2d 455 for (packet_size = 0 ; packet_size < 100 ;packet_size++) {
marcoantonioara 4:05d5aa4d3f2d 456 if (value != '\n' ){
marcoantonioara 4:05d5aa4d3f2d 457 packet [packet_size]= value;
marcoantonioara 4:05d5aa4d3f2d 458 value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 459 }
marcoantonioara 4:05d5aa4d3f2d 460 else {
marcoantonioara 4:05d5aa4d3f2d 461 lora_send_packet (packet , (uint8_t) packet_size+1);
marcoantonioara 4:05d5aa4d3f2d 462 //packet_size = MAXIMUM_PACKET_SIZE +1;
marcoantonioara 4:05d5aa4d3f2d 463 return;
marcoantonioara 4:05d5aa4d3f2d 464 }
marcoantonioara 4:05d5aa4d3f2d 465 }
marcoantonioara 4:05d5aa4d3f2d 466
marcoantonioara 4:05d5aa4d3f2d 467 }
marcoantonioara 4:05d5aa4d3f2d 468 }
marcoantonioara 4:05d5aa4d3f2d 469 }*/
marcoantonioara 4:05d5aa4d3f2d 470
marcoantonioara 4:05d5aa4d3f2d 471 void wait_packet_byte (uint8_t *header, uint8_t byte) {
marcoantonioara 4:05d5aa4d3f2d 472
marcoantonioara 4:05d5aa4d3f2d 473 char state = 0;
marcoantonioara 4:05d5aa4d3f2d 474 int cont =0;
marcoantonioara 4:05d5aa4d3f2d 475
marcoantonioara 4:05d5aa4d3f2d 476 while (1){ //começou mensagem
marcoantonioara 4:05d5aa4d3f2d 477 if (cont > 250) {
marcoantonioara 4:05d5aa4d3f2d 478 //led2=!led2;
marcoantonioara 4:05d5aa4d3f2d 479 return;
marcoantonioara 4:05d5aa4d3f2d 480 }
marcoantonioara 4:05d5aa4d3f2d 481 if (state == 0 ){
marcoantonioara 4:05d5aa4d3f2d 482 if (spi_2.write(0x00) == header[0])
marcoantonioara 4:05d5aa4d3f2d 483 state =1;
marcoantonioara 4:05d5aa4d3f2d 484 else {
marcoantonioara 4:05d5aa4d3f2d 485 cont++;
marcoantonioara 4:05d5aa4d3f2d 486 wait_ms(10);
marcoantonioara 4:05d5aa4d3f2d 487 }
marcoantonioara 4:05d5aa4d3f2d 488
marcoantonioara 4:05d5aa4d3f2d 489
marcoantonioara 4:05d5aa4d3f2d 490 }
marcoantonioara 4:05d5aa4d3f2d 491 else if (state == 1){ // read 0xb5
marcoantonioara 4:05d5aa4d3f2d 492 if (spi_2.write(0x00) == header[1]){
marcoantonioara 4:05d5aa4d3f2d 493 state =2;
marcoantonioara 4:05d5aa4d3f2d 494 }
marcoantonioara 4:05d5aa4d3f2d 495 else state =0;
marcoantonioara 4:05d5aa4d3f2d 496 }
marcoantonioara 4:05d5aa4d3f2d 497 else if (state == 2) {// read 0xb5 0x62
marcoantonioara 4:05d5aa4d3f2d 498 if (spi_2.write(0x00) == header[2]){
marcoantonioara 4:05d5aa4d3f2d 499 state =3;
marcoantonioara 4:05d5aa4d3f2d 500 }
marcoantonioara 4:05d5aa4d3f2d 501 else state =0;
marcoantonioara 4:05d5aa4d3f2d 502 }
marcoantonioara 4:05d5aa4d3f2d 503 else if (state == 3) {// read 0xb5 0x62 0x06
marcoantonioara 4:05d5aa4d3f2d 504 if (spi_2.write(0x00) == header[3]){
marcoantonioara 4:05d5aa4d3f2d 505 state =4;
marcoantonioara 4:05d5aa4d3f2d 506 }
marcoantonioara 4:05d5aa4d3f2d 507 else state =0;
marcoantonioara 4:05d5aa4d3f2d 508 }
marcoantonioara 4:05d5aa4d3f2d 509 else if (state == 4) {// read 0xb5 0x62 0x06 0x013
marcoantonioara 4:05d5aa4d3f2d 510
marcoantonioara 4:05d5aa4d3f2d 511 if (byte == 0){//mostrar todo o pacote
marcoantonioara 4:05d5aa4d3f2d 512 uint8_t packet[100];
marcoantonioara 4:05d5aa4d3f2d 513 uint8_t value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 514 uint8_t packet_size;
marcoantonioara 4:05d5aa4d3f2d 515
marcoantonioara 4:05d5aa4d3f2d 516 for (packet_size = 0 ; packet_size < 100 ;packet_size++) {
marcoantonioara 4:05d5aa4d3f2d 517 if (value != '\n' ){
marcoantonioara 4:05d5aa4d3f2d 518 packet [packet_size]= value;
marcoantonioara 4:05d5aa4d3f2d 519 value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 520 }
marcoantonioara 4:05d5aa4d3f2d 521 else {
marcoantonioara 4:05d5aa4d3f2d 522 lora_send_packet (packet , (uint8_t) packet_size+1);
marcoantonioara 4:05d5aa4d3f2d 523 //packet_size = MAXIMUM_PACKET_SIZE +1;
marcoantonioara 4:05d5aa4d3f2d 524 return;
marcoantonioara 4:05d5aa4d3f2d 525 }
marcoantonioara 4:05d5aa4d3f2d 526 }//fim for
marcoantonioara 4:05d5aa4d3f2d 527 }//fim if byte
marcoantonioara 4:05d5aa4d3f2d 528
marcoantonioara 4:05d5aa4d3f2d 529 else {//mostrar apenas um byte
marcoantonioara 4:05d5aa4d3f2d 530
marcoantonioara 4:05d5aa4d3f2d 531
marcoantonioara 4:05d5aa4d3f2d 532 for (int i = 0 ; i < byte-1 ;i++)
marcoantonioara 4:05d5aa4d3f2d 533 spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 534
marcoantonioara 4:05d5aa4d3f2d 535 uint8_t packet[]={(uint8_t)99,(uint8_t)spi_2.write(0x00)};
marcoantonioara 4:05d5aa4d3f2d 536 lora_send_packet (packet , (uint8_t) 2);
marcoantonioara 4:05d5aa4d3f2d 537
marcoantonioara 4:05d5aa4d3f2d 538
marcoantonioara 4:05d5aa4d3f2d 539 for (int i = 0 ; i < 100 ;i++)
marcoantonioara 4:05d5aa4d3f2d 540 if (spi_2.write(0x00) == '\n')
marcoantonioara 4:05d5aa4d3f2d 541 return;
marcoantonioara 4:05d5aa4d3f2d 542
marcoantonioara 4:05d5aa4d3f2d 543 return;
marcoantonioara 4:05d5aa4d3f2d 544
marcoantonioara 4:05d5aa4d3f2d 545 }//fim else byte
marcoantonioara 4:05d5aa4d3f2d 546
marcoantonioara 4:05d5aa4d3f2d 547 }
marcoantonioara 4:05d5aa4d3f2d 548
marcoantonioara 4:05d5aa4d3f2d 549 }
marcoantonioara 4:05d5aa4d3f2d 550
marcoantonioara 4:05d5aa4d3f2d 551 }
marcoantonioara 4:05d5aa4d3f2d 552
marcoantonioara 4:05d5aa4d3f2d 553
marcoantonioara 4:05d5aa4d3f2d 554 void gps_wait_same_packet () {
marcoantonioara 4:05d5aa4d3f2d 555
marcoantonioara 4:05d5aa4d3f2d 556 char state = 0;
marcoantonioara 4:05d5aa4d3f2d 557 int cont =0;
marcoantonioara 4:05d5aa4d3f2d 558
marcoantonioara 4:05d5aa4d3f2d 559 while (1){ //começou mensagem
marcoantonioara 4:05d5aa4d3f2d 560 if (cont > 250) {
marcoantonioara 4:05d5aa4d3f2d 561 //led2=!led2;
marcoantonioara 4:05d5aa4d3f2d 562 return;
marcoantonioara 4:05d5aa4d3f2d 563 }
marcoantonioara 4:05d5aa4d3f2d 564 if (state == 0 ){
marcoantonioara 4:05d5aa4d3f2d 565 if (spi_2.write(0x00) == 0xb5)
marcoantonioara 4:05d5aa4d3f2d 566 state =1;
marcoantonioara 4:05d5aa4d3f2d 567 else {
marcoantonioara 4:05d5aa4d3f2d 568 cont++;
marcoantonioara 4:05d5aa4d3f2d 569 wait_ms(10);
marcoantonioara 4:05d5aa4d3f2d 570 }
marcoantonioara 4:05d5aa4d3f2d 571
marcoantonioara 4:05d5aa4d3f2d 572
marcoantonioara 4:05d5aa4d3f2d 573 }
marcoantonioara 4:05d5aa4d3f2d 574 else if (state == 1){ // read 0xb5
marcoantonioara 4:05d5aa4d3f2d 575 if (spi_2.write(0x00) == 0x62){
marcoantonioara 4:05d5aa4d3f2d 576 state =2;
marcoantonioara 4:05d5aa4d3f2d 577 }
marcoantonioara 4:05d5aa4d3f2d 578 else state =0;
marcoantonioara 4:05d5aa4d3f2d 579 }
marcoantonioara 4:05d5aa4d3f2d 580 else if (state == 2){
marcoantonioara 4:05d5aa4d3f2d 581 led1=1;
marcoantonioara 4:05d5aa4d3f2d 582 uint8_t packet[200];
marcoantonioara 4:05d5aa4d3f2d 583 uint8_t value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 584 uint8_t packet_size;
marcoantonioara 4:05d5aa4d3f2d 585
marcoantonioara 4:05d5aa4d3f2d 586 for (packet_size = 0 ; packet_size < 200 ;packet_size++) {
marcoantonioara 4:05d5aa4d3f2d 587 if (value != '\n' ){
marcoantonioara 4:05d5aa4d3f2d 588 packet [packet_size]= value;
marcoantonioara 4:05d5aa4d3f2d 589 value = spi_2.write(0x00);
marcoantonioara 4:05d5aa4d3f2d 590 }
marcoantonioara 4:05d5aa4d3f2d 591 else {
marcoantonioara 4:05d5aa4d3f2d 592 lora_send_packet (packet , (uint8_t) packet_size+1);
marcoantonioara 4:05d5aa4d3f2d 593 //packet_size = MAXIMUM_PACKET_SIZE +1;
marcoantonioara 4:05d5aa4d3f2d 594 return;
marcoantonioara 4:05d5aa4d3f2d 595 }
marcoantonioara 4:05d5aa4d3f2d 596
marcoantonioara 4:05d5aa4d3f2d 597 }//fim for
marcoantonioara 4:05d5aa4d3f2d 598 lora_send_packet (packet , 200);
marcoantonioara 4:05d5aa4d3f2d 599 }
marcoantonioara 4:05d5aa4d3f2d 600 }
marcoantonioara 4:05d5aa4d3f2d 601 }
marcoantonioara 4:05d5aa4d3f2d 602
marcoantonioara 4:05d5aa4d3f2d 603 void gps_config_gnss (){
marcoantonioara 4:05d5aa4d3f2d 604
marcoantonioara 4:05d5aa4d3f2d 605 uint8_t packet_cfg_gnss[] = {
marcoantonioara 4:05d5aa4d3f2d 606 0xB5, 0x62, // Header
marcoantonioara 4:05d5aa4d3f2d 607 0x06, 0x3E, // Class ID = CFG, Msg ID = UBX-CFG-GNSS
marcoantonioara 4:05d5aa4d3f2d 608 0x3C, 0x00, // Payload Length = 60 bytes
marcoantonioara 4:05d5aa4d3f2d 609 0x00, 0x00, 0x20, 0x07, // msgVer=0, numTrkChHw=32, numTrkChUse=32, numConfigBlocks=7
marcoantonioara 4:05d5aa4d3f2d 610 0x00, 0x08, 0x10, 0x00, 0x01, 0x00, 0x01, 0x01, // gnssId=0 (GPS), resTrkCh=8, maxTrkCh=12, ENABLE
marcoantonioara 4:05d5aa4d3f2d 611 0x01, 0x01, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, // gnssId=1 (SBAS), resTrkCh=1, maxTrkCh=2, ENABLE
marcoantonioara 4:05d5aa4d3f2d 612 0x02, 0x04, 0x0A, 0x00, 0x01, 0x00, 0x01, 0x00, // gnssId=2 (Galileo), resTrkCh=4, maxTrkCh=10, ENABLE
marcoantonioara 4:05d5aa4d3f2d 613 0x03, 0x04, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, // gnssId=3 (BeiDou), resTrkCh=4, maxTrkCh=8, DISABLE
marcoantonioara 4:05d5aa4d3f2d 614 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, // gnssId=4 (IMES), resTrkCh=0, maxTrkCh=8, DISABLE
marcoantonioara 4:05d5aa4d3f2d 615 0x05, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, // gnssId=5 (QZSS), resTrkCh=0, maxTrkCh=3, DISABLE
marcoantonioara 4:05d5aa4d3f2d 616 0x06, 0x04, 0x08, 0x00, 0x01, 0x00, 0x01, 0x00, // gnssId=6 (GLONASS), resTrkCh=4, maxTrkCh=8, ENABLE
marcoantonioara 4:05d5aa4d3f2d 617 0x00, 0x00 //checksums A &amp; B
marcoantonioara 4:05d5aa4d3f2d 618 };
marcoantonioara 4:05d5aa4d3f2d 619 uint8_t pos_ck = sizeof(packet_cfg_gnss)-2;
marcoantonioara 4:05d5aa4d3f2d 620
marcoantonioara 4:05d5aa4d3f2d 621 uint8_t ubxi;
marcoantonioara 4:05d5aa4d3f2d 622 //calcula checksum
marcoantonioara 4:05d5aa4d3f2d 623 for (ubxi=2; ubxi<pos_ck ; ubxi++) {
marcoantonioara 4:05d5aa4d3f2d 624 packet_cfg_gnss[pos_ck] = packet_cfg_gnss[pos_ck] + packet_cfg_gnss[ubxi];
marcoantonioara 4:05d5aa4d3f2d 625 packet_cfg_gnss[pos_ck+1] = packet_cfg_gnss[pos_ck+1] + packet_cfg_gnss[pos_ck];
marcoantonioara 4:05d5aa4d3f2d 626 }
marcoantonioara 4:05d5aa4d3f2d 627
marcoantonioara 4:05d5aa4d3f2d 628 }
marcoantonioara 4:05d5aa4d3f2d 629
marcoantonioara 4:05d5aa4d3f2d 630
marcoantonioara 4:05d5aa4d3f2d 631 void gps_print_local (){
marcoantonioara 4:05d5aa4d3f2d 632 uint8_t packet_nav_pvt[] = { 0xB5, 0x62, 0x01, 0x07, 0x00, 0x00, 0x08, 0x19};
marcoantonioara 4:05d5aa4d3f2d 633
marcoantonioara 4:05d5aa4d3f2d 634 //=============envia pacote nav pvt
marcoantonioara 4:05d5aa4d3f2d 635 for ( int i=0; i< sizeof(packet_nav_pvt) ; i++){
marcoantonioara 4:05d5aa4d3f2d 636 spi_2.write(packet_nav_pvt[i]);
marcoantonioara 4:05d5aa4d3f2d 637 wait_ms(20);
marcoantonioara 4:05d5aa4d3f2d 638 }
marcoantonioara 4:05d5aa4d3f2d 639
marcoantonioara 4:05d5aa4d3f2d 640 gps_navPVT Data = le_nav_pvt();
marcoantonioara 4:05d5aa4d3f2d 641 uint8_t packet [100];
marcoantonioara 4:05d5aa4d3f2d 642 //uint8_t packet []= {(Data.lon >> 24) & 0xff ,(Data.lon >> 16) & 0xff ,(Data.lon >> 8) & 0xff,Data.lon & 0xff,(Data.lat >> 24)& 0xff , (Data.lat >> 16) & 0xff ,(Data.lat >> 8) & 0xff , Data.lat & 0xff ,(Data.hMSL >> 24)& 0xff ,(Data.hMSL >> 16) & 0xff ,(Data.hMSL >> 8) & 0xff, Data.hMSL & 0xff};
marcoantonioara 4:05d5aa4d3f2d 643
marcoantonioara 4:05d5aa4d3f2d 644 printf ("gps lat=%d lon=%d \n",Data.lat ,Data.lon );
marcoantonioara 4:05d5aa4d3f2d 645 }
marcoantonioara 4:05d5aa4d3f2d 646
marcoantonioara 4:05d5aa4d3f2d 647 void gps_config (){
marcoantonioara 4:05d5aa4d3f2d 648 //spi gps configuration
marcoantonioara 4:05d5aa4d3f2d 649 spi_2.format(8,0);
marcoantonioara 4:05d5aa4d3f2d 650 spi_2.frequency(1000000); //1MHz
marcoantonioara 4:05d5aa4d3f2d 651 wait(0.1);
marcoantonioara 4:05d5aa4d3f2d 652
marcoantonioara 4:05d5aa4d3f2d 653 //gps reset
marcoantonioara 4:05d5aa4d3f2d 654 gps_reset = 0;
marcoantonioara 4:05d5aa4d3f2d 655 wait_ms(50);
marcoantonioara 4:05d5aa4d3f2d 656 gps_reset = 1;
marcoantonioara 4:05d5aa4d3f2d 657 wait(1.5);
marcoantonioara 4:05d5aa4d3f2d 658 }
marcoantonioara 4:05d5aa4d3f2d 659