Skip to content

Commit

Permalink
Updated to using Joystick instead of Keypad
Browse files Browse the repository at this point in the history
Implemented basic Joystick input processing
Implemented new compass sensor processing
Implemented new protocol to send/receive HDOP and SAT value
Renamed and updated the sensors app to show compass info
  • Loading branch information
yu17 committed Jun 23, 2023
1 parent 7a483e2 commit cada975
Show file tree
Hide file tree
Showing 28 changed files with 592 additions and 176 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,14 @@ char kbd_read(uint8_t pollint) {
else delay(4);
}
return key;
}

void kbd_init() {
for (uint8_t i=0;i<4;i++) {
pinMode(KBD_ROW[i],OUTPUT);
digitalWrite(KBD_ROW[i],HIGH);
pinMode(KBD_COL[i],INPUT_PULLUP);
}
disp.write(">>> Keyboard inited\n");
disp.display();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define resc_keyboard 1.0

#include <Arduino.h>
#include "resc_display.h"

// ----- PRGSW/Keyboard -----
#define PRGSW_PIN 0
Expand All @@ -14,5 +15,6 @@ extern const char KBD_GRID[4][4];
extern char c;

char kbd_read(uint8_t pollint);
void kbd_init();

#endif
8 changes: 0 additions & 8 deletions lora-gps-LoRa32v3/app_bme680.h

This file was deleted.

10 changes: 5 additions & 5 deletions lora-gps-LoRa32v3/app_gps.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "app_gps.h"

void *app_gps(void *param) {
char key;
enum JOY_DISCRETE joy;
disp.setTextSize(1);//21 characters per line
TICK=0;
while (1) {
Expand Down Expand Up @@ -41,11 +41,11 @@ void *app_gps(void *param) {
disp.write(buffer);
disp.display();
}
key=kbd_read(0);
switch (key) {
case 'C':
joy=joy_read(0);
switch (joy) {
case L:
return NULL;
case 'D':
case R:
return NULL;
}
TICK++;
Expand Down
1 change: 1 addition & 0 deletions lora-gps-LoRa32v3/app_gps.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include "common_misc.h"
#include "resc_display.h"
#include "resc_joystick.h"
#include "resc_gps.h"

void *app_gps(void *param);
Expand Down
2 changes: 1 addition & 1 deletion lora-gps-LoRa32v3/app_mainmenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ struct menuitem_t *mainmenu_load(uint8_t levels[]) {
item->desc="Sensors";
item->enter_behavior=1;
item->drop_menu=1;
item->enter=&app_bme680;
item->enter=&app_sensors;
item->param=NULL;
//4-Settings
item->next=(struct menuitem_t*)malloc(sizeof(struct menuitem_t));
Expand Down
2 changes: 1 addition & 1 deletion lora-gps-LoRa32v3/app_mainmenu.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include "common_menu.h"
#include "app_shiptracker.h"
#include "app_gps.h"
#include "app_bme680.h"
#include "app_sensors.h"

extern struct menuitem_t *mainmenu;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "app_bme680.h"
#include "app_sensors.h"

void *app_bme680(void *param) {
char key;
void *app_sensors(void *param) {
enum JOY_DISCRETE joy;
disp.setTextSize(1);//21 characters per line
TICK=0;
while (1) {
Expand All @@ -17,17 +17,21 @@ void *app_bme680(void *param) {
disp.setCursor(6, 32+4);
sprintf(buffer,"Humid = %.3f%%",BME680.humidity);
disp.write(buffer);
disp.setCursor(6, 48+4);
sprintf(buffer,"Heading = %d",compass.readHeading());
disp.write(buffer);
disp.display();
}
key=kbd_read(0);
switch (key) {
case 'C':
joy=joy_read(0);
switch (joy) {
case L:
return NULL;
case 'D':
case R:
return NULL;
}
TICK++;
delay(TICKINT);
}
return NULL;
}
}

12 changes: 12 additions & 0 deletions lora-gps-LoRa32v3/app_sensors.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef app_sensorsc
#define app_sensorsc 1.0

#include "common_misc.h"
#include "resc_joystick.h"
#include "resc_display.h"
#include "resc_bme680.h"
#include "resc_QMC5883L.h"

void *app_sensors(void *param);

#endif
140 changes: 72 additions & 68 deletions lora-gps-LoRa32v3/app_shiptracker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ struct menuitem_t *shipctrl_menu(uint8_t levels[]) {

void* func_tracker_shipctrl_sendcommand(void* param) {
struct packet_frame_t pk_comm;
pk_comm.magicnum=LORAGPS_MAG_HEAD;
pk_comm.magicnum=LORAGPS_HHLD_HEAD;
pk_comm.pid=0;
pk_comm.cid=LORAGPS_HANDHELDID;
memcpy(&(pk_comm.sig), param, sizeof(uint8_t)+sizeof(struct packet_ctrl_t));
Expand All @@ -260,7 +260,7 @@ void func_tracker_shiplist_update(void *param) {
PacketRSSI=LoRa.readPacketRSSI();
PacketSNR=LoRa.readPacketSNR();
PacketID=pk_probe.pid;
if (PacketLen && pk_probe.magicnum==LORAGPS_MAG_HEAD) {
if (PacketLen && pk_probe.magicnum==LORAGPS_TRCK_HEAD) {
while (ship && ship->ship_cid!=pk_probe.cid) ship=ship->next;
if (!ship) {
ship=(struct ship_data_t *)malloc(sizeof(struct ship_data_t));
Expand All @@ -280,6 +280,9 @@ void func_tracker_shiplist_update(void *param) {
case LORAGPS_INFO_MOTN:
memcpy(&(ship->ship_motn),pk_probe.fields,sizeof(struct packet_motn_t));
break;
case LORAGPS_INFO_STAT:
memcpy(&(ship->ship_stat),pk_probe.fields,sizeof(struct packet_stat_t));
break;
case LORAGPS_INFO_ACCR:
memcpy(&(ship->ship_accr),pk_probe.fields,sizeof(struct packet_accr_t));
break;
Expand All @@ -295,7 +298,7 @@ void func_tracker_shiplist_update(void *param) {
void func_tracker_shipinfo(struct ship_data_t *ship) {
bool runflag=1;
uint8_t page=0;
char key;
enum JOY_DISCRETE joy;
while (runflag) {
disp.clearDisplay();
disp.setTextSize(1);
Expand All @@ -307,7 +310,7 @@ void func_tracker_shipinfo(struct ship_data_t *ship) {
sprintf(buffer,"%02d:%02d:%02d",GPS.time.hour(),GPS.time.minute(),GPS.time.second());
disp.write(buffer);
disp.setCursor(6*15, 0);
sprintf(buffer,"%.3fV",ship->ship_motn.bat);
sprintf(buffer,"%.3fV",ship->ship_stat.vbat);
disp.write(buffer);
disp.setCursor(0, 8);
sprintf(buffer,"%9.6f%c",abs(ship->ship_cord.latitude),ship->ship_cord.latitude<0?'S':'N');
Expand Down Expand Up @@ -353,69 +356,69 @@ void func_tracker_shipinfo(struct ship_data_t *ship) {
sprintf(buffer,"PKT: %d",PacketID);
disp.write(buffer);
}
else if (page==1) {
disp.setCursor(6, 0);
sprintf(buffer,"%04d-%02d-%02d %02d:%02d:%02d",GPS.date.year(),GPS.date.month(),GPS.date.day(),GPS.time.hour(),GPS.time.minute(),GPS.time.second());
disp.write(buffer);
disp.setCursor(0, 8);
sprintf(buffer,"Accel/Gyro:");
disp.write(buffer);
disp.setCursor(0,16);
sprintf(buffer,"%7.2f",ship->ship_accr.acc_x);
disp.write(buffer);
disp.setCursor(6*7,16);
sprintf(buffer,"%7.2f",ship->ship_accr.acc_y);
disp.write(buffer);
disp.setCursor(6*14,16);
sprintf(buffer,"%7.2f",ship->ship_accr.acc_z);
disp.write(buffer);
disp.setCursor(0,24);
sprintf(buffer,"%7.2f",ship->ship_accr.gyro_x);
disp.write(buffer);
disp.setCursor(6*7,24);
sprintf(buffer,"%7.2f",ship->ship_accr.gyro_y);
disp.write(buffer);
disp.setCursor(6*14,24);
sprintf(buffer,"%7.2f",ship->ship_accr.gyro_z);
disp.write(buffer);
disp.setCursor(0,32);
sprintf(buffer,"Orientation:");
disp.write(buffer);
disp.setCursor(0,40);
sprintf(buffer,"%7.2f",ship->ship_pose.agl_x);
disp.write(buffer);
disp.setCursor(6*7,40);
sprintf(buffer,"%7.2f",ship->ship_pose.agl_y);
disp.write(buffer);
disp.setCursor(6*14,40);
sprintf(buffer,"%7.2f",ship->ship_pose.agl_z);
disp.write(buffer);
disp.setCursor(0,48);
sprintf(buffer,"%7.2f",ship->ship_pose.pitch);
disp.write(buffer);
disp.setCursor(6*7,48);
sprintf(buffer,"%7.2f",ship->ship_pose.roll);
disp.write(buffer);
disp.setCursor(6*14,48);
sprintf(buffer,"%7.2f",ship->ship_pose.yaw);
disp.write(buffer);
disp.setCursor(0,56);
sprintf(buffer,"Temperature: %.2f%cC",ship->ship_pose.temperature,248);
disp.write(buffer);
}
// else if (page==1) {
// disp.setCursor(6, 0);
// sprintf(buffer,"%04d-%02d-%02d %02d:%02d:%02d",GPS.date.year(),GPS.date.month(),GPS.date.day(),GPS.time.hour(),GPS.time.minute(),GPS.time.second());
// disp.write(buffer);
// disp.setCursor(0, 8);
// sprintf(buffer,"Accel/Gyro:");
// disp.write(buffer);
// disp.setCursor(0,16);
// sprintf(buffer,"%7.2f",ship->ship_accr.acc_x);
// disp.write(buffer);
// disp.setCursor(6*7,16);
// sprintf(buffer,"%7.2f",ship->ship_accr.acc_y);
// disp.write(buffer);
// disp.setCursor(6*14,16);
// sprintf(buffer,"%7.2f",ship->ship_accr.acc_z);
// disp.write(buffer);
// disp.setCursor(0,24);
// sprintf(buffer,"%7.2f",ship->ship_accr.gyro_x);
// disp.write(buffer);
// disp.setCursor(6*7,24);
// sprintf(buffer,"%7.2f",ship->ship_accr.gyro_y);
// disp.write(buffer);
// disp.setCursor(6*14,24);
// sprintf(buffer,"%7.2f",ship->ship_accr.gyro_z);
// disp.write(buffer);
// disp.setCursor(0,32);
// sprintf(buffer,"Orientation:");
// disp.write(buffer);
// disp.setCursor(0,40);
// sprintf(buffer,"%7.2f",ship->ship_pose.agl_x);
// disp.write(buffer);
// disp.setCursor(6*7,40);
// sprintf(buffer,"%7.2f",ship->ship_pose.agl_y);
// disp.write(buffer);
// disp.setCursor(6*14,40);
// sprintf(buffer,"%7.2f",ship->ship_pose.agl_z);
// disp.write(buffer);
// disp.setCursor(0,48);
// sprintf(buffer,"%7.2f",ship->ship_pose.pitch);
// disp.write(buffer);
// disp.setCursor(6*7,48);
// sprintf(buffer,"%7.2f",ship->ship_pose.roll);
// disp.write(buffer);
// disp.setCursor(6*14,48);
// sprintf(buffer,"%7.2f",ship->ship_pose.yaw);
// disp.write(buffer);
// disp.setCursor(0,56);
// sprintf(buffer,"Temperature: %.2f%cC",ship->ship_pose.temperature,248);
// disp.write(buffer);
// }
disp.display();
key=kbd_read(0);
switch (key) {
case 'A':
joy=joy_read(0);
switch (joy) {
case U:
if (page>0) page--;
break;
case 'B':
case D:
if (page<1) page++;
break;
case 'C':
case L:
runflag=0;
break;
case 'D':
case R:
menu_exec(&shipctrl_menu);
break;
}
Expand Down Expand Up @@ -470,37 +473,38 @@ void func_tracker_shiplist_render(struct ship_data_t *ship, uint8_t pos, uint8_t
void func_tracker_selship(struct ship_list_t *shiplist) {
uint8_t pos=0;
struct ship_data_t *ship=shiplist->ship;
char key;
enum JOY_DISCRETE joy;
bool runflag=1;
while (runflag) {
if (!ship && shiplist->ship) {
ship=shiplist->ship;
}
func_tracker_shiplist_render(ship, pos, 2);
key=kbd_read(0);
switch (key) {
case 'A':
joy=joy_read(0);
switch (joy) {
case U:
if (ship && ship->prev) {
ship=ship->prev;
if (pos>1 || (pos==1 && !ship->prev)) pos--;
}
break;
case 'B':
case D:
if (ship && ship->next) {
ship=ship->next;
if (pos<2 || (pos==2 && !ship->next)) pos++;
}
break;
case 'C':
case L:
runflag=0;
break;
case 'D':
case R:
if (ship) func_tracker_shipinfo(ship);
break;
case '#':
case B:
uint8_t sig[sizeof(uint8_t)+sizeof(struct packet_ctrl_t)];
sig[0]=LORAGPS_CTRL_LORA_OFF;
func_tracker_shipctrl_sendcommand(&sig);
delay(100);
sig[0]=LORAGPS_CTRL_LORA_ON;
func_tracker_shipctrl_sendcommand(&sig);
break;
Expand Down
Loading

0 comments on commit cada975

Please sign in to comment.