From ec9e5f6f34477e9d54e0f6dcae49a2f07b50070b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 03:35:35 -0500 Subject: [PATCH 01/81] revert to Payload_BME280_MPU6050_XS_Extended for cleanup --- stempayload/payload_pico/payload_pico.ino | 1501 +++------------------ 1 file changed, 200 insertions(+), 1301 deletions(-) diff --git a/stempayload/payload_pico/payload_pico.ino b/stempayload/payload_pico/payload_pico.ino index ca29204d..f7b391b4 100644 --- a/stempayload/payload_pico/payload_pico.ino +++ b/stempayload/payload_pico/payload_pico.ino @@ -1,434 +1,138 @@ -/* - * Pico Payload code for the v1.3 and later STEM Payload Board for the CubeSatSim - * - * Copyright Alan B. Johnston - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * (at your option) any later version. - *F - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * along with this program. If not, see . - */ - -// This code is an Arduino sketch for the Raspberry Pi Pico -// based on the Raspberry Pi Code - -//#define PICO_0V1 // define for Pico v0.1 hardware - -#include "payload_pico.h" -#include "DumbTXSWS.h" #include -//#include #include #include -//#include +#include #include -//#include -#include -#include "pico/stdlib.h" // stdlib -//#include "hardware/irq.h" // interrupts -//#include "hardware/pwm.h" // pwm -//#include "hardware/sync.h" // wait for interrupt -//#include "RPi_Pico_ISR_Timer.h" -//#include "RPi_Pico_TimerInterrupt.h" -#include -#include "hardware/gpio.h" -#include "hardware/adc.h" -//#include "SSTV-Arduino-Scottie1-Library.h" -#include "LittleFS.h" -//#include -//#include "picosstvpp.h" -#include "pico/bootrom.h" -#include "hardware/watchdog.h" -#include -#include - -// jpg files to be stored in flash storage on Pico (FS 512kB setting) -//#include "sstv1.h" -//#include "sstv2.h" - -//Adafruit_INA219 ina219_1_0x40; -//Adafruit_INA219 ina219_1_0x41(0x41); -//Adafruit_INA219 ina219_1_0x44(0x44); -//Adafruit_INA219 ina219_1_0x45(0x45); -//Adafruit_INA219 ina219_2_0x40(0x40); -//Adafruit_INA219 ina219_2_0x41(0x41); -//Adafruit_INA219 ina219_2_0x44(0x44); -//Adafruit_INA219 ina219_2_0x45(0x45); - -//Adafruit_SI5351 clockgen = Adafruit_SI5351(); -TinyGPSPlus gps; - -unsigned long micros3; -bool show_gps = true; // set to false to not see all GPS messages -volatile int skip = 0; - -//WiFiServer server(port); -//WiFiClient client; -WiFiClient net; -MQTTClient client; - -#define PICO_W // define if Pico W board. Otherwise, compilation fail for Pico or runtime fail if compile as Pico W - -//#define APRS_VHF - -byte green_led_counter = 0; -//char call[] = "AMSAT"; // put your callsign here - -//extern bool get_camera_image(bool debug); -//extern bool start_camera(); - -float rand_float(float lower, float upper) { - - return (float)(random(lower*100, upper*100)/100.0); -} +#include "Adafruit_SI1145.h" +#include + +#define SEALEVELPRESSURE_HPA (1013.25) + +Adafruit_BME280 bme; +MPU6050 mpu6050(Wire); +Adafruit_SI1145 uv = Adafruit_SI1145(); +Adafruit_LIS3MDL lis3mdl; + +long timer = 0; +int bmePresent; +int uvPresent; +int magPresent; +int RXLED = 17; // The RX LED has a defined Arduino pin +int greenLED = 9; +int blueLED = 8; +void eeprom_word_write(int addr, int val); +short eeprom_word_read(int addr); +int first_time = true; +int first_read = true; +float T2 = 26.3; // Temperature data point 1 +float R2 = 167; // Reading data point 1 +float T1 = 2; // Temperature data point 2 +float R1 = 179; // Reading data point 2 +int sensorValue; +float Temp; +float rest; +float magRaw = 0; +float magRawAbs = 0; void setup() { - set_sys_clock_khz(133000, true); - - Serial.begin(115200); - - delay(10000); - - LittleFS.begin(); -// LittleFS.format(); // only format if files of size 0 keep showing up -//#ifdef APRS_VHF -// mode = AFSK; // force to APRS -//#else -// read_mode(); -//#endif - -// new_mode = mode; - -// pinMode(LED_BUILTIN, OUTPUT); -// blinkTimes(1); + Serial.begin(9600); // Serial Monitor for testing -/// sleep(5.0); - -// otherwise, run CubeSatSim Pico code - - Serial.println("CubeSatSim Pico Payload v0.4 starting...\n"); - -/**/ - if (check_for_wifi()) { - wifi = true; - led_builtin_pin = LED_BUILTIN; // use default GPIO for Pico W - pinMode(LED_BUILTIN, OUTPUT); -// configure_wifi(); - } else { - led_builtin_pin = 25; // manually set GPIO 25 for Pico board -// pinMode(25, OUTPUT); - pinMode(led_builtin_pin, OUTPUT); - } -/**/ - - config_gpio(); - - Serial.print("Pi Zero present, so running Payload OK code."); - sr_frs_present = true; -// program_radio(); - start_payload(); - - pinMode(15, INPUT_PULLUP); - pinMode(22, OUTPUT); - digitalWrite(22, 1); - pinMode(17, OUTPUT); - digitalWrite(17, 1); - - prompt = false; - prompting = false; - -} - -void loop() { - - payload_OK_only(); - sleep(1.0); - Serial.print("Squelch: "); - Serial.println(digitalRead(15)); -// Serial.println(" "); - prompt_for_input(); -} - -void config_gpio() { - - pinMode(0, INPUT); - pinMode(1, INPUT); - - // set all Pico GPIO connected pins to input - for (int i = 6; i < 22; i++) { - pinMode(i, INPUT); - } - pinMode(26, INPUT); - pinMode(27, INPUT); - pinMode(28, INPUT); -} + Serial1.begin(115200); // Pi UART faster speed -void program_radio() { - if (sr_frs_present) { - Serial.println("Programming SR_FRS!"); - - pinMode(PD_PIN, OUTPUT); - pinMode(PTT_PIN, OUTPUT); - digitalWrite(PD_PIN, HIGH); // enable SR_FRS - digitalWrite(PTT_PIN, HIGH); // stop transmit - - DumbTXSWS mySerial(SWTX_PIN); // TX pin - mySerial.begin(9600); - - for (int i = 0; i < 5; i++) { - sleep(0.5); // delay(500); -#ifdef APRS_VHF - mySerial.println("AT+DMOSETGROUP=0,144.3900,144.3900,0,3,0,0\r"); // can change to 144.39 for standard APRS -// mySerial.println("AT+DMOSETGROUP=0,145.0000,145.0000,0,3,0,0\r"); // can change to 145 for testing ASPRS -#else - mySerial.println("AT+DMOSETGROUP=0,435.1000,434.9900,0,3,0,0\r"); // squelch set to 3 -#endif - sleep(0.5); - mySerial.println("AT+DMOSETMIC=8,0\r"); // was 8 - - } - } -#ifdef APRS_VHF - Serial.println("Programming FM tx 144.39, rx on 144.39 MHz"); -#else - Serial.println("Programming FM tx 434.9, rx on 435.0 MHz"); -#endif -// digitalWrite(PTT_PIN, LOW); // transmit carrier for 0.5 sec -// sleep(0.5); -// digitalWrite(PTT_PIN, HIGH); - digitalWrite(PD_PIN, LOW); // disable SR_FRS - pinMode(PD_PIN, INPUT); - pinMode(PTT_PIN, INPUT); -} + Serial.println("Starting!"); -bool read_config_file() { - char buff[255]; - // Open configuration file with callsign and reset count - Serial.println("Reading config file"); - File config_file = LittleFS.open("/payload.cfg", "r"); -// FILE * config_file = fopen("/payload.cfg", "r"); - if (!config_file) { - return(false); - } - -// char * cfg_buf[100]; - config_file.read((uint8_t *)buff, 255); -// sscanf(buff, "%d", &cnt); - sscanf(buff, "%f %f %f", xOffset, yOffset, zOffset); - config_file.close(); -// if (debug_mode) - Serial.printf("Config file /payload.cfg contains %f %f %f\n", xOffset, yOffset, zOffset); - - config_file.close(); - -// write_config_file(); - - return(true); -} - -void write_config_file() { - Serial.println("Writing /payload.cfg file"); - char buff[255]; - File config_file = LittleFS.open("/payload.cfg", "w+"); - - sprintf(buff, "%f %f %f", xOffset, yOffset, zOffset); - Serial.println("Writing string "); -// if (debug_mode) - print_string(buff); - config_file.write(buff, strlen(buff)); - - config_file.close(); -// Serial.println("Write complete"); - -} - -void read_sensors() -{ - -} - -void print_string(char *string) -{ - int count = 0; - while ((count < 250) && (string[count] != 0)) - { - Serial.print(string[count++]); - } - Serial.println(" "); -} - -void start_payload() { - -//#ifdef APRS_VHF -// Serial2.setRX(9); -// Serial2.setRX(9); -// Serial2.setRX(1); - delay(100); -// Serial2.setTX(8); -// Serial2.setTX(8); -// Serial2.setRX(0); - -/* - delay(100); - Serial1.setRX(1); - delay(100); - Serial1.setTX(0); - delay(10); -*/ -/* - Serial1.begin(115200); // serial to Pi - - Serial.println("Starting Serial1 for payload"); - - Serial2.begin(115200); // serial from GPS - - Serial.println("Starting Serial2 for GPS"); -*/ -//#else - Serial1.setRX(1); - delay(100); - Serial1.setTX(0); - delay(100); - Serial1.begin(115200); // Pi UART faster speed - - Serial2.begin(9600); // serial from GPS - some GPS modules need 115200 - - Serial.println("Starting Serial2 for GPS"); -//#endif - - Serial.println("Starting payload!"); - blink_setup(); -/* + blink(500); - sleep(0.25); // delay(250); + delay(250); blink(500); - sleep(0.25); // delay(250); + delay(250); led_set(greenLED, HIGH); - sleep(0.25); // delay(250); + delay(250); led_set(greenLED, LOW); led_set(blueLED, HIGH); - sleep(0.25); // delay(250); + delay(250); led_set(blueLED, LOW); -*/ - - if (bme.begin()) { + + if (bme.begin(0x76)) { bmePresent = 1; } else { - Serial.println("Could not find a valid BME280 sensor, check wiring!"); + Serial.println("BME280 sensor fault"); bmePresent = 0; } - - Wire.begin(); - Wire.beginTransmission(0x68); - if (Wire.endTransmission() != 0) { - Serial.println("Could not find a valid MPU6050 sensor, check wiring!"); - mpuPresent = 0; + + if (! uv.begin()) { + Serial.println("Si1145 sensor fault"); + uvPresent = 0; + } else { + uvPresent = 1; + } + + if (! lis3mdl.begin_I2C()) { + Serial.println("LIS3MDL sensor fault"); + magPresent = 0; + } else { + magPresent = 1; } - else { - mpuPresent = 1; - mpu6050.begin(); + mpu6050.begin(); -// if ((read_config_file()) && (payload_command != PAYLOAD_RESET)) - if (false) + if (eeprom_word_read(0) == 0xA07) { - Serial.println("Reading gyro offsets from config file\n"); + Serial.println("Reading gyro offsets from EEPROM\n"); + + float xOffset = ((float)eeprom_word_read(1)) / 100.0; + float yOffset = ((float)eeprom_word_read(2)) / 100.0; + float zOffset = ((float)eeprom_word_read(3)) / 100.0; + + Serial.println(xOffset, DEC); + Serial.println(yOffset, DEC); + Serial.println(zOffset, DEC); + mpu6050.setGyroOffsets(xOffset, yOffset, zOffset); - } - else { - payload_command = false; - Serial.println("Calculating gyro offsets and storing in EEPROM\n"); mpu6050.calcGyroOffsets(true); -/* + eeprom_word_write(0, 0xA07); eeprom_word_write(1, (int)(mpu6050.getGyroXoffset() * 100.0) + 0.5); eeprom_word_write(2, (int)(mpu6050.getGyroYoffset() * 100.0) + 0.5); eeprom_word_write(3, (int)(mpu6050.getGyroZoffset() * 100.0) + 0.5); -*/ -// flag = 0xA07; - xOffset = mpu6050.getGyroXoffset(); - yOffset = mpu6050.getGyroYoffset(); - zOffset = mpu6050.getGyroZoffset(); - - write_config_file(); - } - } - if (!(payload = bmePresent || mpuPresent)) - Serial.println("No payload sensors detected"); - + Serial.println(eeprom_word_read(0), HEX); + Serial.println(((float)eeprom_word_read(1)) / 100.0, DEC); + Serial.println(((float)eeprom_word_read(2)) / 100.0, DEC); + Serial.println(((float)eeprom_word_read(3)) / 100.0, DEC); + } pinMode(greenLED, OUTPUT); pinMode(blueLED, OUTPUT); - } -void payload_OK_only() -{ - payload_str[0] = '\0'; // clear the payload string - - if ((Serial.available() > 0)|| first_time == true) // commented back in - { +void loop() { + + if ((Serial.available() > 0) || first_time == true) { blink(50); char result = Serial.read(); - char header[] = "OK BME280 "; - char str[100]; - - strcpy(payload_str, header); -// print_string(str); - if (bmePresent) -// sprintf(str, "%4.2f %6.2f %6.2f %5.2f ", - sprintf(str, "%.1f %.2f %.1f %.2f ", - bme.readTemperature(), bme.readPressure() / 100.0, bme.readAltitude(SEALEVELPRESSURE_HPA), bme.readHumidity()); - else - sprintf(str, "OK BME280 0.0 0.0 0.0 0.0 "); - strcat(payload_str, str); - - if (mpuPresent) { -// print_string(payload_str); - mpu6050.update(); -// sprintf(str, " MPU6050 %5.2f %5.2f %5.2f %5.2f %5.2f %5.2f ", - sprintf(str, " MPU6050 %.1f %.1f %.1f %.1f %.1f %.1f ", - mpu6050.getGyroX(), mpu6050.getGyroY(), mpu6050.getGyroZ(), mpu6050.getAccX(), mpu6050.getAccY(), mpu6050.getAccZ()); - - strcat(payload_str, str); -// print_string(payload_str); - } if (result == 'R') { Serial.println("OK"); delay(100); -// first_time = true; - start_payload(); -// setup(); + first_time = true; + setup(); } - else if (result == 'g') { - show_gps = !show_gps; - } else if (result == 'C') { Serial.println("Clearing stored gyro offsets in EEPROM\n"); - EEPROM.put(0, (float)0.0); -// first_time = true; - start_payload(); -// setup(); + eeprom_word_write(0, 0x00); + first_time = true; + setup(); } - if ((result == '?') || first_time == true) // commented back in - if (true) + if ((result == '?') || first_time == true) { - -// first_time = false; + first_time = false; if (bmePresent) { Serial.print("OK BME280 "); Serial.print(bme.readTemperature()); @@ -442,7 +146,6 @@ void payload_OK_only() { Serial.print("OK BME280 0.0 0.0 0.0 0.0"); } - if (mpuPresent) { mpu6050.update(); Serial.print(" MPU6050 "); @@ -452,132 +155,70 @@ void payload_OK_only() Serial.print(" "); Serial.print(mpu6050.getGyroZ()); - Serial.print(" "); - Serial.print(mpu6050.getAccX()); - Serial.print(" "); - Serial.print(mpu6050.getAccY()); - Serial.print(" "); - Serial.print(mpu6050.getAccZ()); - } else + Serial.print(" "); + Serial.print(mpu6050.getAccX()); + Serial.print(" "); + Serial.print(mpu6050.getAccY()); + Serial.print(" "); + Serial.print(mpu6050.getAccZ()); + + sensorValue = analogRead(A3); + Temp = T1 + (sensorValue - R1) * ((T2 - T1) / (R2 - R1)); + + Serial.print(" XS "); + Serial.print(Temp); + Serial.print(" "); + if (uvPresent) { + Serial.print(uv.readVisible()); + Serial.print(" "); + Serial.print(uv.readIR()); + Serial.print(" "); + } else { - Serial.print(" MPU6050 0.0 0.0 0.0 0.0 0.0 0.0"); + Serial.print("0.0 0.0 "); + } + if (magPresent) { + lis3mdl.read(); + magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); + magAbs = abs(magRaw); + Serial.println(magAbs); + } else + { + Serial.println("0.0"); } - - sensorValue = analogRead(TEMPERATURE_PIN); - //Serial.println(sensorValue); - Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); - - Serial.print(" GPS "); - Serial.print(Sensor1,4); - Serial.print(" "); - Serial.print(Sensor2,4); - Serial.print(" "); - Serial.print(Sensor3,2); - Serial.print(" AN "); - Serial.println(sensorValue); // ,0); + float rotation = sqrt(mpu6050.getGyroX() * mpu6050.getGyroX() + mpu6050.getGyroY() * mpu6050.getGyroY() + mpu6050.getGyroZ() * mpu6050.getGyroZ()); + float acceleration = sqrt(mpu6050.getAccX() * mpu6050.getAccX() + mpu6050.getAccY() * mpu6050.getAccY() + mpu6050.getAccZ() * mpu6050.getAccZ()); - if (mpuPresent) { - float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); - float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); -// Serial.print(rotation); -// Serial.print(" "); -// Serial.println(acceleration); - - if (acceleration > 1.2) + if (acceleration > 1.2) led_set(greenLED, HIGH); - else + else led_set(greenLED, LOW); - - if (rotation > 5) - led_set(blueLED, HIGH); - else - led_set(blueLED, LOW); - } - } - } - -// Serial2.print("b"); - delay(250); -// if (Serial2.available() > 0) { - if (true) { -/* - while (Serial2.available() > 0) // read GPS - Serial.write(Serial2.read()); -*/ -// For one second we parse GPS data and report some key values - newData = false; - - unsigned long starting = millis(); - for (unsigned long start = millis(); millis() - start < 1000;) // 5000;) - { - while (Serial2.available()) - { - char c = Serial2.read(); - if (show_gps) - Serial.write(c); // uncomment this line if you want to see the GPS data flowing - if (gps.encode(c)) // Did a new valid sentence come in? - newData = true; + if (rotation > 5) + led_set(blueLED, HIGH); + else + led_set(blueLED, LOW); } - } - if (newData) - { - Serial.printf("GPS read new data in ms: %d\n", millis() - start); - float flon = 0.0, flat = 0.0, flalt = 0.0; - unsigned long age; - starting = millis(); -// gps.f_get_position(&flat, &flon, &age); - - Serial.print(F("Location: ")); - if (gps.location.isValid()) - { - Serial.print(gps.location.lat(), 6); - Serial.print(F(",")); - Serial.print(gps.location.lng(), 6); - - flat = gps.location.lat(); - flon = gps.location.lng(); - flalt = gps.altitude.meters(); - } - else - { - Serial.print(F("INVALID")); } - Serial.print("\r\n"); - - Sensor1 = flat; - Sensor2 = flon; - Sensor3 = flalt; // (float) gps.altitude.meters(); -// Serial.printf("New GPS data: %f %f %f ms: %d\n", Sensor1, Sensor2, Sensor3, millis() - start); - } else -// Serial.printf("GPS read no new data: %d\n", millis() - start); - ; - + + if (Serial1.available() > 0) { + blink(50); -/* - if (Serial1.available()) { - char result = Serial1.read(); -// Serial1.println(result); -// Serial.println(result); // don't print read result - - if (result == 'R') { - Serial1.println("OK"); - delay(100); - first_read = true; - start_payload(); -// setup(); - } - } -*/ -// if (result == '?') - if (true) // always send payload data over serial + char result = Serial1.read(); + + if (result == 'R') { + Serial1.println("OK"); + delay(100); + first_read = true; + setup(); + } + + if (result == '?') { if (bmePresent) { -// Serial1.print("START_FLAGOK BME280 "); - Serial1.print(sensor_start_flag); Serial1.print("OK BME280 "); - Serial1.print(bme.readTemperature()); + Serial1.print(bme.readTemperature()); Serial1.print(" "); Serial1.print(bme.readPressure() / 100.0F); Serial1.print(" "); @@ -586,11 +227,8 @@ void payload_OK_only() Serial1.print(bme.readHumidity()); } else { -// Serial1.print("START_FLAGOK BME280 0.0 0.0 0.0 0.0"); - Serial1.print(sensor_start_flag); - Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); + Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); } - if (mpuPresent) { mpu6050.update(); Serial1.print(" MPU6050 "); @@ -600,67 +238,61 @@ void payload_OK_only() Serial1.print(" "); Serial1.print(mpu6050.getGyroZ()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccX()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccY()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccZ()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccX()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccY()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccZ()); + + sensorValue = analogRead(A3); + Temp = T1 + (sensorValue - R1) * ((T2 - T1) / (R2 - R1)); - } else + Serial1.print(" XS "); + Serial1.print(Temp); + Serial1.print(" "); + if (uvPresent) { + Serial1.print(uv.readVisible()); + Serial1.print(" "); + Serial1.print(uv.readIR()); + Serial1.print(" "); + } else + { + Serial1.print("0.0 0.0 "); + } + if (magPresent) { + lis3mdl.read(); + magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); + magAbs = abs(magRaw); + Serial1.println(magAbs); + } else { - Serial1.print(" MPU6050 0.0 0.0 0.0 0.0 0.0 0.0"); - } + Serial1.println("0.0"); + } - sensorValue = analogRead(TEMPERATURE_PIN); - //Serial.println(sensorValue); - Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); - Serial1.print(" GPS "); - Serial1.print(Sensor1,4); - Serial1.print(" "); - Serial1.print(Sensor2,4); - Serial1.print(" "); - Serial1.print(Sensor3,2); - Serial1.print(" AN "); - Serial1.print(sensorValue); //,0); -// Serial1.println("END_FLAG"); - Serial1.println(sensor_end_flag); - - blink(50); - delay(50); - blink(50); - - if (mpuPresent) { - float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); - float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); -// Serial.print(rotation); -// Serial.print(" "); -// Serial.println(acceleration); + float rotation = sqrt(mpu6050.getGyroX() * mpu6050.getGyroX() + mpu6050.getGyroY() * mpu6050.getGyroY() + mpu6050.getGyroZ() * mpu6050.getGyroZ()); + float acceleration = sqrt(mpu6050.getAccX() * mpu6050.getAccX() + mpu6050.getAccY() * mpu6050.getAccY() + mpu6050.getAccZ() * mpu6050.getAccZ()); - if (first_read == true) { - first_read = false; - rest = acceleration; - } + if (first_read == true) { + first_read = false; + rest = acceleration; + } - if (acceleration > 1.2 * rest) + if (acceleration > 1.2 * rest) led_set(greenLED, HIGH); - else + else led_set(greenLED, LOW); - - if (rotation > 5) + + if (rotation > 5) led_set(blueLED, HIGH); - else + else led_set(blueLED, LOW); } - } } - delay(100); } -/**/ -/* void eeprom_word_write(int addr, int val) { EEPROM.write(addr * 2, lowByte(val)); @@ -671,38 +303,45 @@ short eeprom_word_read(int addr) { return ((EEPROM.read(addr * 2 + 1) << 8) | EEPROM.read(addr * 2)); } -*/ -void blink_setup() +void blink_setup() { -#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) +#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) // initialize digital pin PB1 as an output. pinMode(PC13, OUTPUT); pinMode(PB9, OUTPUT); pinMode(PB8, OUTPUT); #endif -#if defined __AVR_ATmega32U4__ || ARDUINO_ARCH_RP2040 +#if defined __AVR_ATmega32U4__ pinMode(RXLED, OUTPUT); // Set RX LED as an output // TX LED is set as an output behind the scenes pinMode(greenLED, OUTPUT); - pinMode(blueLED,OUTPUT); + pinMode(blueLED, OUTPUT); #endif } void blink(int length) { - if (wifi) - digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON - else - digitalWrite(led_builtin_pin, HIGH); // set the built-in LED ON - - sleep(length/1000.0); // delay(length); // wait for a lenth of time +#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) + digitalWrite(PC13, LOW); // turn the LED on (HIGH is the voltage level) +#endif - if (wifi) - digitalWrite(LED_BUILTIN, LOW); // set the built-in LED OFF - else - digitalWrite(led_builtin_pin, LOW); // set the built-in LED OFF +#if defined __AVR_ATmega32U4__ + digitalWrite(RXLED, LOW); // set the RX LED ON + TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF +#endif + + delay(length); // wait for a lenth of time + +#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) + digitalWrite(PC13, HIGH); // turn the LED off by making the voltage LOW +#endif + +#if defined __AVR_ATmega32U4__ + digitalWrite(RXLED, HIGH); // set the RX LED OFF + TXLED0; //TX LED macro to turn LED ON +#endif } void led_set(int ledPin, bool state) @@ -711,750 +350,10 @@ void led_set(int ledPin, bool state) if (ledPin == greenLED) digitalWrite(PB9, state); else if (ledPin == blueLED) - digitalWrite(PB8, state); + digitalWrite(PB8, state); #endif -#if defined __AVR_ATmega32U4__ || ARDUINO_ARCH_RP2040 - digitalWrite(ledPin, state); -#endif -} - - -void sleep(float timer) { // sleeps for intervals more than 0.01 milli seconds - - unsigned long time_us = (unsigned long)(timer * 1000000.0); - unsigned long startSleep = micros(); - while ((micros() - startSleep) < time_us) { -// busy_wait_us(100); - delayMicroseconds(100); - } -} - -void blinkTimes(int blinks) { - for (int i = 0; i < blinks; i++) { - digitalWrite(MAIN_LED_GREEN, LOW); - - if (wifi) - digitalWrite(LED_BUILTIN, LOW); // set the built-in LED OFF - else - digitalWrite(led_builtin_pin, LOW); // set the built-in LED OFF - - sleep(0.1); - digitalWrite(MAIN_LED_GREEN, HIGH); - - if (wifi) - digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON - else - digitalWrite(led_builtin_pin, HIGH); // set the built-in LED ON - - sleep(0.1); - } -} - -void blinkFastTimes(int blinks) { - for (int i = 0; i < blinks; i++) { - digitalWrite(MAIN_LED_GREEN, LOW); - - if (wifi) - digitalWrite(LED_BUILTIN, LOW); // set the built-in LED OFF - else - digitalWrite(led_builtin_pin, LOW); // set the built-in LED OFF - - sleep(0.05); - digitalWrite(MAIN_LED_GREEN, HIGH); - - if (wifi) - digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON - else - digitalWrite(led_builtin_pin, HIGH); // set the built-in LED ON - - sleep(0.05); - } -} - -void blink_pin(int pin, int duration) { - - digitalWrite(pin, HIGH); - sleep((float)duration / 1000.00); - digitalWrite(pin, LOW); - -} - - -bool check_for_wifi() { - -#ifndef PICO_W - - Serial.println("WiFi disabled in software"); - return(false); // skip check if not Pico W board or compilation will fail - +#if defined __AVR_ATmega32U4__ + digitalWrite(ledPin, state); #endif - -// stdio_init_all(); - -// adc_init(); -// adc_gpio_init(29); - pinMode(29, INPUT); -// adc_select_input(3); - const float conversion_factor = 3.3f / (1 << 12); -// uint16_t result = adc_read(); - uint16_t result = analogRead(29); -// Serial.printf("ADC3 value: 0x%03x, voltage: %f V\n", result, result * conversion_factor); - -// if (result < 0x100) { - if (result < 0x10) { - Serial.println("\nPico W detected!\n"); - return(true); - } - else { - Serial.println("\nPico detected!\n"); - return(false); - } -} - -void show_dir() { - LittleFS.begin(); - Dir dir = LittleFS.openDir("/"); -// or Dir dir = LittleFS.openDir("/data"); - Serial.println("FS directory:"); - while (dir.next()) { - Serial.print(dir.fileName()); - if(dir.fileSize()) { - File f = dir.openFile("r"); - Serial.print(" "); - Serial.println(f.size()); - } - } - Serial.println(">"); -} - -void serial_input() { - - if (prompt == false) { // only query if not in the middle of prompting - - if (Serial.available() > 0) { // check for user input on serial port - -// blink(50); - char result = Serial.read(); - - if ((result != '\n') && (result != '\r')) { - - Serial.println(result); - - switch(result) { - case 'h': - case 'H': - // Serial.println("Help"); - prompt = PROMPT_HELP; - break; - - case 'a': - case 'A': - Serial.println("Change to AFSK/APRS mode"); - new_mode = AFSK; - break; - - case 'm': - case 'M': - Serial.println("Change to CW mode"); - new_mode = CW; - break; - - case 'F': - Serial.println("Formatting flash memory"); - prompt = PROMPT_FORMAT; - break; - case 'f': - Serial.println("Change to FSK mode"); - new_mode = FSK; - break; - - case 'b': - case 'B': - Serial.println("Change to BPSK mode"); - new_mode = BPSK; - break; - - case 's': - Serial.println("Change to SSTV mode"); - new_mode = SSTV; - break; - - case 'S': - Serial.println("I2C scan"); - prompt = PROMPT_I2CSCAN; - break; - - case 'i': - case 'I': - Serial.println("Restart CubeSatsim software"); - prompt = PROMPT_RESTART; - break; - - case 'c': - Serial.println("Change the CALLSIGN"); - prompt = PROMPT_CALLSIGN; - break; - - case 'C': - Serial.println("Debug camera"); - debug_camera = true; - prompt = PROMPT_CAMERA; - break; - - case 't': - case 'T': - Serial.println("Change the Simulated Telemetry"); - prompt = PROMPT_SIM; - break; - - case 'p': - case 'P': - Serial.println("Reset payload EEPROM settings"); - prompt = PROMPT_PAYLOAD; - break; - - case 'r': - case 'R': - Serial.println("Change the Resets Count"); - prompt = PROMPT_RESET; - break; - - case 'o': - case 'O': - Serial.println("Read diode temperature"); - prompt = PROMPT_TEMP; - break; - - case 'l': - case 'L': - Serial.println("Change the Latitude and Longitude"); - prompt = PROMPT_LAT; - break; - - case 'v': - case 'V': - Serial.println("Read INA219 voltage and current"); - prompt = PROMPT_VOLTAGE; - break; - - case '?': - Serial.println("Query payload sensors"); - prompt = PROMPT_QUERY; - break; - - case 'd': - Serial.println("Change debug mode"); - prompt = PROMPT_DEBUG; - break; - - case 'w': - Serial.println(wifi); - Serial.println("Connect to WiFi"); - prompt = PROMPT_WIFI; - break; - - default: - Serial.println("Not a command\n"); - - break; - } - } - } - } -} - -void prompt_for_input() { - float float_result; - - if (!prompting) { - prompting = true; - - while (Serial.available() > 0) // clear any characters in serial input buffer - Serial.read(); - - switch(prompt) { - - case PROMPT_HELP: - Serial.println("\nChange settings by typing the letter:"); - Serial.println("h Help info"); - Serial.println("F Format flash memory"); - Serial.println("S I2C scan"); - Serial.println("i Restart"); - Serial.println("p Reset payload and stored EEPROM values"); - Serial.println("? Query sensors"); - Serial.println("o Read diode temperature"); - Serial.println("d Change debug mode"); - Serial.println("w Connect to WiFi\n"); - -// Serial.printf("Software version v0.39 \nConfig file /payload.cfg contains %s %d %f %f %s\n\n", callsign, reset_count, lat_file, long_file, sim_yes); -/* - switch(mode) { - - case(AFSK): - Serial.println("AFSK mode"); - break; - - case(FSK): - Serial.println("FSK mode"); - break; - - case(BPSK): - Serial.println("BPSK mode"); - break; - - case(SSTV): - Serial.println("SSTV mode"); - break; - - case(CW): - Serial.println("CW mode"); - break; - } -*/ - break; - - case PROMPT_REBOOT: - Serial.println("Rebooting..."); - Serial.flush(); - watchdog_reboot (0, SRAM_END, 500); // restart Pico - sleep(20.0); - break; - - case PROMPT_FORMAT: - LittleFS.format(); -// Serial.println("Reboot or power cycle to restart the CubeSatSim"); - // while (1) ; // infinite loop - Serial.println("Rebooting..."); - Serial.flush(); - watchdog_reboot (0, SRAM_END, 500); // restart Pico - sleep(20.0); - break; - - case PROMPT_PAYLOAD: - Serial.println("Resetting the Payload"); - payload_command = PAYLOAD_RESET; - start_payload(); - break; - - case PROMPT_WIFI: - Serial.println(wifi); - if (wifi) { - char ssid[30], pass[30]; - Serial.println("Enter the credentials for your WiFi network"); - - Serial.print("Enter WiFi SSID: "); - get_serial_string(); - - print_string(serial_string); - - if (strlen(serial_string) > 0) { - strcpy(ssid, serial_string); - Serial.print("Enter WiFi password: "); - get_serial_string(); - if (strlen(serial_string) > 0) { - strcpy(pass, serial_string); - Serial.println("Connecting to Wifi"); -// Serial.printf("%s%s\n",ssid, pass); - - WiFi.begin(ssid, pass); - - unsigned int elapsed_timer = (unsigned int) millis(); - while ((WiFi.status() != WL_CONNECTED) && ((millis() - elapsed_timer) < 10000)) { - Serial.print("."); - delay(500); - } - if (((millis() - elapsed_timer) > 10000)) - Serial.println("Failed to connect!"); - else - Serial.println("Connected to WiFi!"); - } else - Serial.println("No password entered."); - } else - Serial.println("No SSID entered."); - } else - Serial.println("WiFi not available"); - - break; - - case PROMPT_I2CSCAN: - Serial.print("I2C scan"); - -// -------------------------------------- -// i2c_scanner -// -// Version 1 -// This program (or code that looks like it) -// can be found in many places. -// For example on the Arduino.cc forum. -// The original author is not know. -// Version 2, Juni 2012, Using Arduino 1.0.1 -// Adapted to be as simple as possible by Arduino.cc user Krodal -// Version 3, Feb 26 2013 -// V3 by louarnold -// Version 4, March 3, 2013, Using Arduino 1.0.3 -// by Arduino.cc user Krodal. -// Changes by louarnold removed. -// Scanning addresses changed from 0...127 to 1...119, -// according to the i2c scanner by Nick Gammon -// https://www.gammon.com.au/forum/?id=10896 -// Version 5, March 28, 2013 -// As version 4, but address scans now to 127. -// A sensor seems to use address 120. -// Version 6, November 27, 2015. -// Added waiting for the Leonardo serial communication. -// -// -// This sketch tests the standard 7-bit addresses -// Devices with higher bit address might not be seen properly. -// - - -{ - byte error, address; - int nDevices; - - Serial.println("Scanning I2C Bus 1"); - - nDevices = 0; - for(address = 1; address < 127; address++ ) - { - // The i2c_scanner uses the return value of - // the Write.endTransmisstion to see if - // a device did acknowledge to the address. - Wire.beginTransmission(address); - error = Wire.endTransmission(); - - if (error == 0) - { - Serial.print("I2C device found at bus 1 address 0x"); - if (address<16) - Serial.print("0"); - Serial.print(address,HEX); - Serial.println(" !"); - - nDevices++; - } - else if (error==4) - { - Serial.print("Unknown error at bus 1 address 0x"); - if (address<16) - Serial.print("0"); - Serial.println(address,HEX); - } - } - if (nDevices == 0) - Serial.println("No I2C devices found on bus 1\n"); - else - Serial.println("done\n"); - - delay(5000); // wait 5 seconds for next scan - - Serial.println("Scanning I2C Bus 2"); - - nDevices = 0; - for(address = 1; address < 127; address++ ) - { - // The i2c_scanner uses the return value of - // the Write.endTransmisstion to see if - // a device did acknowledge to the address. - - Wire1.beginTransmission(address); - error = Wire1.endTransmission(); - - if (error == 0) - { - Serial.print("I2C device found at bus 2 address 0x"); - if (address<16) - Serial.print("0"); - Serial.print(address,HEX); - Serial.println(" !"); - - nDevices++; - } - else if (error==4) - { - Serial.print("Unknown error at bus 2 address 0x"); - if (address<16) - Serial.print("0"); - Serial.println(address,HEX); - } - } - if (nDevices == 0) - Serial.println("No I2C devices found on bus 2\n"); - else - Serial.println("done\n"); - -} - Serial.println("complete"); - break; - - - -/* - - case PROMPT_SIM: - if (sim_mode == TRUE) - Serial.println("Simulted Telemetry mode is currently on"); - else - Serial.println("Simulted Telemetry mode is currently off"); - Serial.println("Do you want Simulated Telemetry on (y/n)"); - get_serial_char(); - if ((serial_string[0] == 'y') || (serial_string[0] == 'Y')) { - Serial.println("Setting Simulated telemetry to on"); - reset_min_max(); - config_simulated_telem(); - write_config_file(); - } else if ((serial_string[0] == 'n') || (serial_string[0] == 'N')) { - Serial.println("Setting Simulated telemetry to off"); - reset_min_max(); - sim_mode = false; - if (!ina219_started) - start_ina219(); - write_config_file(); - } else - Serial.println("No change to Simulated Telemetry mode"); - break; - - case PROMPT_LAT: - - Serial.println("Changing the latitude and longitude - only used for APRS telemetry"); - Serial.println("Hitting return keeps the current value."); - - Serial.print("Current value of latitude is "); - Serial.println(latitude); - Serial.println("Enter latitude (decimal degrees, positive is north): "); - get_serial_string(); - float_result = atof(serial_string); - if (float_result != 0.0) { - Serial.print("Latitude updated to "); - Serial.println(float_result); - latitude = float_result; - } else - Serial.println("Latitude not updated"); - - get_serial_clear_buffer(); - Serial.print("Current value of longitude is "); - Serial.println(longitude); - Serial.println("Enter longitude (decimal degrees, positive is east): "); - get_serial_string(); - float_result = atof(serial_string); - if (float_result != 0.0) { - Serial.print("Longitude updated to "); - Serial.println(float_result); - longitude = float_result; - } else - Serial.println("Longitude not updated"); - - write_config_file(); - if (mode == AFSK) - set_lat_lon(); - - break; - - case PROMPT_QUERY: - Serial.println("Querying payload sensors"); - payload_command = PAYLOAD_QUERY; - break; - - case PROMPT_CAMERA: - show_dir(); - get_camera_image(debug_camera); - show_dir(); - break; - - case PROMPT_TEMP: - sensorValue = analogRead(TEMPERATURE_PIN); - Serial.print("Raw diode voltage: "); - Serial.println(sensorValue); - Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); - Serial.print("Calculated temperature: "); - Serial.print(Temp); - Serial.println(" C"); - break; - - case PROMPT_VOLTAGE: - Serial.println("Querying INA219 voltage and current sensors"); - if (!ina219_started) - start_ina219(); - voltage_read = true; - read_ina219(); - break; - - - case PROMPT_RESET: - Serial.println("Reset count is now 0"); - reset_count = 0; - write_config_file(); - break; - - case PROMPT_RESTART: - prompt = false; -// Serial.println("Restart not yet implemented"); - start_payload(); -// start_ina219(); - if ((mode != CW) || (!filter_present)) - transmit_callsign(callsign); - sleep(0.5); - config_telem(); - config_radio(); - sampleTime = (unsigned int) millis(); - break; - - case PROMPT_DEBUG: - Serial.print("Changing Debug Mode to "); - debug_mode = !debug_mode; - if (debug_mode) - Serial.println("on"); - else - Serial.println("off"); - break; -*/ - - } - prompt = false; - prompting = false; - } -// else -// Serial.println("Already prompting!"); -} - -void get_serial_string() { - int input = 0; - int i = 0; - unsigned int elapsed_time = (unsigned int) millis(); - while ((input != '\n') && (input!= '\r') && (i < 128) && ((millis() - elapsed_time) < 20000)) { - if (Serial.available() > 0) { - input = Serial.read(); - if ((input != '\n') && (input!= '\r')) { - serial_string[i++] = input; - Serial.write(input); - } - } - sleep(0.1); - } - serial_string[i] = 0; - Serial.println(" "); -} - -void get_serial_char() { - unsigned int elapsed_time = (unsigned int) millis(); - while (((millis() - elapsed_time) < 20000) && (Serial.available() < 1)) { } - if (Serial.available() > 0) { - serial_string[0] = Serial.read(); // get character - Serial.write(serial_string[0]); - serial_string[1] = 0; - Serial.println(" "); - } else - { - serial_string[0] = 0; // timeout - no character - } -} - -void get_serial_clear_buffer() { -// Serial.println("Emptying serial input buffer"); - while (Serial.available() > 0) - Serial.read(); - -} - - -void read_config() { - LittleFS.begin(); - Serial.println("Reading config file"); - char buff[32]; - File mode_file = LittleFS.open("/config.txt", "r"); -// if (!mode_file) { -// write_mode(mode); -// } else { - // if (mode_file.read((uint8_t *)buff, 31)) { -// Serial.println("Reading mode from .mode file"); - sscanf(buff, "%d", &mode); - mode_file.close(); -// Serial.print("Mode is "); -// Serial.print(mode); - -// } - //} -} - -void write_config(int save_mode) { - - char buff[32]; - Serial.println("Writing config file"); - File mode_file = LittleFS.open("/config.txt", "w+"); - - sprintf(buff, "%d", save_mode); - if (debug_mode) { - Serial.println("Writing string"); - print_string(buff); - } - - if (mode_file.write(buff, strlen(buff)) != strlen(buff)) { -// Serial.println(mode_file.write(buff, strlen(buff))); - Serial.println("*** config file write error! ***\n\n"); - blinkFastTimes(3); - } - - mode_file.close(); -// Serial.println("Write complete"); -} - - -void get_input() { -// if (mode != SSTV) -// Serial.print("+"); -// if ((mode == CW) || (mode == SSTV)) - serial_input(); - -// check for button press -// if (digitalRead(MAIN_PB_PIN) == PRESSED) // pushbutton is pressed -// process_pushbutton(); - if (BOOTSEL) // boot selector button is pressed on Pico -// process_bootsel(); - Serial.println("boot selector button pressed!"); - - if (prompt) { -// Serial.println("Need to prompt for input!"); - prompt_for_input(); - prompt = false; - } -/* - // check to see if the mode has changed - if (mode != new_mode) { - Serial.println("Changing mode"); - cw_stop = false; // enable CW or won't hear CW ID -/// if (mode == SSTV) { -/// ITimer1.detachInterrupt(); -/// start_button_isr(); // restart button isr -/// } - int old_mode = mode; - bool config_done = false; -// mode = new_mode; // change modes if button pressed - write_mode(new_mode); - - Serial.println("Rebooting..."); - Serial.flush(); - watchdog_reboot (0, SRAM_END, 500); //10); // restart Pico - - sleep(20.0); - */ -/* - if (new_mode != CW) - transmit_callsign(callsign); - sleep(0.5); - - if (!config_done) - config_telem(); // run this here for all other modes - - config_radio(); - if ((mode == FSK) || (mode == BPSK)) { - digitalWrite(LED_BUILTIN, HIGH); - digitalWrite(MAIN_LED_BLUE, HIGH); - } - - sampleTime = (unsigned int) millis(); -*/ -// } - } From 2856702a92733afd52965f096f07133005e1ba71 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 03:39:22 -0500 Subject: [PATCH 02/81] Revert to Payload_BME280_MPU6050_XS.ino for cleanup --- stempayload/payload_pico/payload_pico.ino | 383 +++++++++++----------- 1 file changed, 184 insertions(+), 199 deletions(-) diff --git a/stempayload/payload_pico/payload_pico.ino b/stempayload/payload_pico/payload_pico.ino index f7b391b4..f0111f9e 100644 --- a/stempayload/payload_pico/payload_pico.ino +++ b/stempayload/payload_pico/payload_pico.ino @@ -1,49 +1,56 @@ +// code for Pro Micro or STM32 on the CubeSat Simulator STEM Payload board +// answers "OK" on the serial port Serial1 when queried by the Pi + #include #include #include #include #include -#include "Adafruit_SI1145.h" -#include - #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; MPU6050 mpu6050(Wire); -Adafruit_SI1145 uv = Adafruit_SI1145(); -Adafruit_LIS3MDL lis3mdl; - + long timer = 0; int bmePresent; -int uvPresent; -int magPresent; int RXLED = 17; // The RX LED has a defined Arduino pin int greenLED = 9; int blueLED = 8; +int Sensor1 = 0; +float Sensor2 = 0; void eeprom_word_write(int addr, int val); short eeprom_word_read(int addr); int first_time = true; int first_read = true; + +#if defined __AVR_ATmega32U4__ float T2 = 26.3; // Temperature data point 1 float R2 = 167; // Reading data point 1 float T1 = 2; // Temperature data point 2 float R1 = 179; // Reading data point 2 +#endif +#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) +float T2 = 25; // Temperature data point 1 +float R2 = 671; // Reading data point 1 +float T1 = 15.5; // Temperature data point 2 +float R1 = 695; // Reading data point 2 +#endif + int sensorValue; float Temp; float rest; -float magRaw = 0; -float magRawAbs = 0; - + void setup() { Serial.begin(9600); // Serial Monitor for testing - + Serial1.begin(115200); // Pi UART faster speed - +// Serial1.begin(9600); // Pi UART faster speed + Serial.println("Starting!"); - + blink_setup(); - + blink(500); delay(250); blink(500); @@ -58,79 +65,139 @@ void setup() { if (bme.begin(0x76)) { bmePresent = 1; } else { - Serial.println("BME280 sensor fault"); + Serial.println("Could not find a valid BME280 sensor, check wiring!"); bmePresent = 0; } - - if (! uv.begin()) { - Serial.println("Si1145 sensor fault"); - uvPresent = 0; - } else { - uvPresent = 1; - } - - if (! lis3mdl.begin_I2C()) { - Serial.println("LIS3MDL sensor fault"); - magPresent = 0; - } else { - magPresent = 1; - } - + mpu6050.begin(); - + if (eeprom_word_read(0) == 0xA07) { Serial.println("Reading gyro offsets from EEPROM\n"); - + float xOffset = ((float)eeprom_word_read(1)) / 100.0; float yOffset = ((float)eeprom_word_read(2)) / 100.0; float zOffset = ((float)eeprom_word_read(3)) / 100.0; - + Serial.println(xOffset, DEC); Serial.println(yOffset, DEC); Serial.println(zOffset, DEC); - + mpu6050.setGyroOffsets(xOffset, yOffset, zOffset); } else { Serial.println("Calculating gyro offsets and storing in EEPROM\n"); - + mpu6050.calcGyroOffsets(true); - + eeprom_word_write(0, 0xA07); eeprom_word_write(1, (int)(mpu6050.getGyroXoffset() * 100.0) + 0.5); eeprom_word_write(2, (int)(mpu6050.getGyroYoffset() * 100.0) + 0.5); eeprom_word_write(3, (int)(mpu6050.getGyroZoffset() * 100.0) + 0.5); - + Serial.println(eeprom_word_read(0), HEX); Serial.println(((float)eeprom_word_read(1)) / 100.0, DEC); Serial.println(((float)eeprom_word_read(2)) / 100.0, DEC); Serial.println(((float)eeprom_word_read(3)) / 100.0, DEC); } - pinMode(greenLED, OUTPUT); - pinMode(blueLED, OUTPUT); +/**/ } - + void loop() { + + if (Serial1.available() > 0) { + blink(50); + char result = Serial1.read(); +// Serial1.println(result); +// Serial1.println("OK"); + +// if (result == '?') + { + if (bmePresent) { + Serial1.print("OK BME280 "); + Serial1.print(bme.readTemperature()); + Serial1.print(" "); + Serial1.print(bme.readPressure() / 100.0F); + Serial1.print(" "); + Serial1.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); + Serial1.print(" "); + Serial1.print(bme.readHumidity()); + } else + { + Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); + } + mpu6050.update(); + + Serial1.print(" MPU6050 "); + Serial1.print(mpu6050.getGyroX()); + Serial1.print(" "); + Serial1.print(mpu6050.getGyroY()); + Serial1.print(" "); + Serial1.print(mpu6050.getGyroZ()); + + Serial1.print(" "); + Serial1.print(mpu6050.getAccX()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccY()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccZ()); + + sensorValue = read_analog(); + +// Serial.println(sensorValue); + Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); + + Serial1.print(" XS "); + Serial1.print(Temp); + Serial1.print(" "); + Serial1.println(Sensor2); + + float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); + float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); +// Serial.print(rotation); +// Serial.print(" "); +// Serial.println(acceleration); + + if (first_read == true) { + first_read = false; + rest = acceleration; + } + + if (acceleration > 1.2 * rest) + led_set(greenLED, HIGH); + else + led_set(greenLED, LOW); + + if (rotation > 5) + led_set(blueLED, HIGH); + else + led_set(blueLED, LOW); + } + + } - if ((Serial.available() > 0) || first_time == true) { + if (Serial.available() > 0) { blink(50); char result = Serial.read(); - - if (result == 'R') { - Serial.println("OK"); +// Serial.println(result); +// Serial.println("OK"); +// Serial.println(counter++); + + if (result == 'R') { + Serial1.println("OK"); delay(100); - first_time = true; + first_read = true; setup(); } - else if (result == 'C') { + else if (result == 'C') { Serial.println("Clearing stored gyro offsets in EEPROM\n"); eeprom_word_write(0, 0x00); first_time = true; setup(); - } - if ((result == '?') || first_time == true) + } + + if ((result == '?') || first_time == true) { first_time = false; if (bmePresent) { @@ -147,213 +214,131 @@ void loop() { Serial.print("OK BME280 0.0 0.0 0.0 0.0"); } mpu6050.update(); - + Serial.print(" MPU6050 "); Serial.print(mpu6050.getGyroX()); Serial.print(" "); Serial.print(mpu6050.getGyroY()); Serial.print(" "); Serial.print(mpu6050.getGyroZ()); - - Serial.print(" "); - Serial.print(mpu6050.getAccX()); - Serial.print(" "); - Serial.print(mpu6050.getAccY()); - Serial.print(" "); - Serial.print(mpu6050.getAccZ()); - - sensorValue = analogRead(A3); - Temp = T1 + (sensorValue - R1) * ((T2 - T1) / (R2 - R1)); - - Serial.print(" XS "); - Serial.print(Temp); - Serial.print(" "); - if (uvPresent) { - Serial.print(uv.readVisible()); - Serial.print(" "); - Serial.print(uv.readIR()); - Serial.print(" "); - } else - { - Serial.print("0.0 0.0 "); - } - if (magPresent) { - lis3mdl.read(); - magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); - magAbs = abs(magRaw); - Serial.println(magAbs); - } else - { - Serial.println("0.0"); - } - - float rotation = sqrt(mpu6050.getGyroX() * mpu6050.getGyroX() + mpu6050.getGyroY() * mpu6050.getGyroY() + mpu6050.getGyroZ() * mpu6050.getGyroZ()); - float acceleration = sqrt(mpu6050.getAccX() * mpu6050.getAccX() + mpu6050.getAccY() * mpu6050.getAccY() + mpu6050.getAccZ() * mpu6050.getAccZ()); - - if (acceleration > 1.2) - led_set(greenLED, HIGH); - else - led_set(greenLED, LOW); - - if (rotation > 5) - led_set(blueLED, HIGH); - else - led_set(blueLED, LOW); + + Serial.print(" "); + Serial.print(mpu6050.getAccX()); + Serial.print(" "); + Serial.print(mpu6050.getAccY()); + Serial.print(" "); + Serial.print(mpu6050.getAccZ()); + + sensorValue = read_analog(); + + Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); + + Serial.print(" XS "); + Serial.print(Temp); + Serial.print(" "); + Serial.print(Sensor2); + Serial.print(" ("); + Serial.print(sensorValue); + Serial.println(")"); + + float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); + float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); +// Serial.print(rotation); +// Serial.print(" "); +// Serial.println(acceleration); + + if (first_read == true) { + first_read = false; + rest = acceleration; } - } - - if (Serial1.available() > 0) { - - blink(50); - char result = Serial1.read(); - - if (result == 'R') { - Serial1.println("OK"); - delay(100); - first_read = true; - setup(); - } - - if (result == '?') - { - if (bmePresent) { - Serial1.print("OK BME280 "); - Serial1.print(bme.readTemperature()); - Serial1.print(" "); - Serial1.print(bme.readPressure() / 100.0F); - Serial1.print(" "); - Serial1.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); - Serial1.print(" "); - Serial1.print(bme.readHumidity()); - } else - { - Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); - } - mpu6050.update(); - - Serial1.print(" MPU6050 "); - Serial1.print(mpu6050.getGyroX()); - Serial1.print(" "); - Serial1.print(mpu6050.getGyroY()); - Serial1.print(" "); - Serial1.print(mpu6050.getGyroZ()); - - Serial1.print(" "); - Serial1.print(mpu6050.getAccX()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccY()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccZ()); - - sensorValue = analogRead(A3); - Temp = T1 + (sensorValue - R1) * ((T2 - T1) / (R2 - R1)); - - Serial1.print(" XS "); - Serial1.print(Temp); - Serial1.print(" "); - if (uvPresent) { - Serial1.print(uv.readVisible()); - Serial1.print(" "); - Serial1.print(uv.readIR()); - Serial1.print(" "); - } else - { - Serial1.print("0.0 0.0 "); - } - if (magPresent) { - lis3mdl.read(); - magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); - magAbs = abs(magRaw); - Serial1.println(magAbs); - } else - { - Serial1.println("0.0"); - } - - - float rotation = sqrt(mpu6050.getGyroX() * mpu6050.getGyroX() + mpu6050.getGyroY() * mpu6050.getGyroY() + mpu6050.getGyroZ() * mpu6050.getGyroZ()); - float acceleration = sqrt(mpu6050.getAccX() * mpu6050.getAccX() + mpu6050.getAccY() * mpu6050.getAccY() + mpu6050.getAccZ() * mpu6050.getAccZ()); - - if (first_read == true) { - first_read = false; - rest = acceleration; - } - - if (acceleration > 1.2 * rest) + + if (acceleration > 1.2 * rest) led_set(greenLED, HIGH); - else + else led_set(greenLED, LOW); - - if (rotation > 5) + + if (rotation > 5) led_set(blueLED, HIGH); - else + else led_set(blueLED, LOW); } - } - + } + delay(100); } - + void eeprom_word_write(int addr, int val) { EEPROM.write(addr * 2, lowByte(val)); EEPROM.write(addr * 2 + 1, highByte(val)); } - + short eeprom_word_read(int addr) { return ((EEPROM.read(addr * 2 + 1) << 8) | EEPROM.read(addr * 2)); } - -void blink_setup() + +void blink_setup() { -#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) +#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) // initialize digital pin PB1 as an output. pinMode(PC13, OUTPUT); pinMode(PB9, OUTPUT); pinMode(PB8, OUTPUT); #endif - + #if defined __AVR_ATmega32U4__ pinMode(RXLED, OUTPUT); // Set RX LED as an output // TX LED is set as an output behind the scenes pinMode(greenLED, OUTPUT); - pinMode(blueLED, OUTPUT); + pinMode(blueLED,OUTPUT); #endif } - + void blink(int length) { #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) digitalWrite(PC13, LOW); // turn the LED on (HIGH is the voltage level) #endif - + #if defined __AVR_ATmega32U4__ digitalWrite(RXLED, LOW); // set the RX LED ON TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF -#endif - +#endif + delay(length); // wait for a lenth of time - + #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) digitalWrite(PC13, HIGH); // turn the LED off by making the voltage LOW #endif - + #if defined __AVR_ATmega32U4__ digitalWrite(RXLED, HIGH); // set the RX LED OFF TXLED0; //TX LED macro to turn LED ON -#endif +#endif } - + void led_set(int ledPin, bool state) { #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) if (ledPin == greenLED) digitalWrite(PB9, state); else if (ledPin == blueLED) - digitalWrite(PB8, state); + digitalWrite(PB8, state); #endif - + #if defined __AVR_ATmega32U4__ - digitalWrite(ledPin, state); + digitalWrite(ledPin, state); +#endif +} + +int read_analog() +{ + int sensorValue; + #if defined __AVR_ATmega32U4__ + sensorValue = analogRead(A3); +#endif +#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) + sensorValue = analogRead(PA7); #endif + return(sensorValue); } From c41e3a54b3bc32d1811c44526688746ab8935f61 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 04:02:58 -0500 Subject: [PATCH 03/81] Update payload_pico.ino revert --- stempayload/payload_pico/payload_pico.ino | 1544 ++++++++++++++++++--- 1 file changed, 1330 insertions(+), 214 deletions(-) diff --git a/stempayload/payload_pico/payload_pico.ino b/stempayload/payload_pico/payload_pico.ino index f0111f9e..ca29204d 100644 --- a/stempayload/payload_pico/payload_pico.ino +++ b/stempayload/payload_pico/payload_pico.ino @@ -1,205 +1,434 @@ -// code for Pro Micro or STM32 on the CubeSat Simulator STEM Payload board -// answers "OK" on the serial port Serial1 when queried by the Pi +/* + * Pico Payload code for the v1.3 and later STEM Payload Board for the CubeSatSim + * + * Copyright Alan B. Johnston + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * (at your option) any later version. + *F + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * along with this program. If not, see . + */ +// This code is an Arduino sketch for the Raspberry Pi Pico +// based on the Raspberry Pi Code + +//#define PICO_0V1 // define for Pico v0.1 hardware + +#include "payload_pico.h" +#include "DumbTXSWS.h" #include +//#include #include #include -#include +//#include #include -#define SEALEVELPRESSURE_HPA (1013.25) +//#include +#include +#include "pico/stdlib.h" // stdlib +//#include "hardware/irq.h" // interrupts +//#include "hardware/pwm.h" // pwm +//#include "hardware/sync.h" // wait for interrupt +//#include "RPi_Pico_ISR_Timer.h" +//#include "RPi_Pico_TimerInterrupt.h" +#include +#include "hardware/gpio.h" +#include "hardware/adc.h" +//#include "SSTV-Arduino-Scottie1-Library.h" +#include "LittleFS.h" +//#include +//#include "picosstvpp.h" +#include "pico/bootrom.h" +#include "hardware/watchdog.h" +#include +#include -Adafruit_BME280 bme; -MPU6050 mpu6050(Wire); - -long timer = 0; -int bmePresent; -int RXLED = 17; // The RX LED has a defined Arduino pin -int greenLED = 9; -int blueLED = 8; -int Sensor1 = 0; -float Sensor2 = 0; -void eeprom_word_write(int addr, int val); -short eeprom_word_read(int addr); -int first_time = true; -int first_read = true; - -#if defined __AVR_ATmega32U4__ -float T2 = 26.3; // Temperature data point 1 -float R2 = 167; // Reading data point 1 -float T1 = 2; // Temperature data point 2 -float R1 = 179; // Reading data point 2 -#endif -#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) -float T2 = 25; // Temperature data point 1 -float R2 = 671; // Reading data point 1 -float T1 = 15.5; // Temperature data point 2 -float R1 = 695; // Reading data point 2 -#endif +// jpg files to be stored in flash storage on Pico (FS 512kB setting) +//#include "sstv1.h" +//#include "sstv2.h" + +//Adafruit_INA219 ina219_1_0x40; +//Adafruit_INA219 ina219_1_0x41(0x41); +//Adafruit_INA219 ina219_1_0x44(0x44); +//Adafruit_INA219 ina219_1_0x45(0x45); +//Adafruit_INA219 ina219_2_0x40(0x40); +//Adafruit_INA219 ina219_2_0x41(0x41); +//Adafruit_INA219 ina219_2_0x44(0x44); +//Adafruit_INA219 ina219_2_0x45(0x45); + +//Adafruit_SI5351 clockgen = Adafruit_SI5351(); +TinyGPSPlus gps; + +unsigned long micros3; +bool show_gps = true; // set to false to not see all GPS messages +volatile int skip = 0; + +//WiFiServer server(port); +//WiFiClient client; +WiFiClient net; +MQTTClient client; + +#define PICO_W // define if Pico W board. Otherwise, compilation fail for Pico or runtime fail if compile as Pico W + +//#define APRS_VHF + +byte green_led_counter = 0; +//char call[] = "AMSAT"; // put your callsign here + +//extern bool get_camera_image(bool debug); +//extern bool start_camera(); + +float rand_float(float lower, float upper) { + + return (float)(random(lower*100, upper*100)/100.0); +} -int sensorValue; -float Temp; -float rest; - void setup() { - Serial.begin(9600); // Serial Monitor for testing - - Serial1.begin(115200); // Pi UART faster speed -// Serial1.begin(9600); // Pi UART faster speed - - Serial.println("Starting!"); - + set_sys_clock_khz(133000, true); + + Serial.begin(115200); + + delay(10000); + + LittleFS.begin(); +// LittleFS.format(); // only format if files of size 0 keep showing up +//#ifdef APRS_VHF +// mode = AFSK; // force to APRS +//#else +// read_mode(); +//#endif + +// new_mode = mode; + +// pinMode(LED_BUILTIN, OUTPUT); +// blinkTimes(1); + +/// sleep(5.0); + +// otherwise, run CubeSatSim Pico code + + Serial.println("CubeSatSim Pico Payload v0.4 starting...\n"); + +/**/ + if (check_for_wifi()) { + wifi = true; + led_builtin_pin = LED_BUILTIN; // use default GPIO for Pico W + pinMode(LED_BUILTIN, OUTPUT); +// configure_wifi(); + } else { + led_builtin_pin = 25; // manually set GPIO 25 for Pico board +// pinMode(25, OUTPUT); + pinMode(led_builtin_pin, OUTPUT); + } +/**/ + + config_gpio(); + + Serial.print("Pi Zero present, so running Payload OK code."); + sr_frs_present = true; +// program_radio(); + start_payload(); + + pinMode(15, INPUT_PULLUP); + pinMode(22, OUTPUT); + digitalWrite(22, 1); + pinMode(17, OUTPUT); + digitalWrite(17, 1); + + prompt = false; + prompting = false; + +} + +void loop() { + + payload_OK_only(); + sleep(1.0); + Serial.print("Squelch: "); + Serial.println(digitalRead(15)); +// Serial.println(" "); + prompt_for_input(); +} + +void config_gpio() { + + pinMode(0, INPUT); + pinMode(1, INPUT); + + // set all Pico GPIO connected pins to input + for (int i = 6; i < 22; i++) { + pinMode(i, INPUT); + } + pinMode(26, INPUT); + pinMode(27, INPUT); + pinMode(28, INPUT); +} + +void program_radio() { + if (sr_frs_present) { + Serial.println("Programming SR_FRS!"); + + pinMode(PD_PIN, OUTPUT); + pinMode(PTT_PIN, OUTPUT); + digitalWrite(PD_PIN, HIGH); // enable SR_FRS + digitalWrite(PTT_PIN, HIGH); // stop transmit + + DumbTXSWS mySerial(SWTX_PIN); // TX pin + mySerial.begin(9600); + + for (int i = 0; i < 5; i++) { + sleep(0.5); // delay(500); +#ifdef APRS_VHF + mySerial.println("AT+DMOSETGROUP=0,144.3900,144.3900,0,3,0,0\r"); // can change to 144.39 for standard APRS +// mySerial.println("AT+DMOSETGROUP=0,145.0000,145.0000,0,3,0,0\r"); // can change to 145 for testing ASPRS +#else + mySerial.println("AT+DMOSETGROUP=0,435.1000,434.9900,0,3,0,0\r"); // squelch set to 3 +#endif + sleep(0.5); + mySerial.println("AT+DMOSETMIC=8,0\r"); // was 8 + + } + } +#ifdef APRS_VHF + Serial.println("Programming FM tx 144.39, rx on 144.39 MHz"); +#else + Serial.println("Programming FM tx 434.9, rx on 435.0 MHz"); +#endif +// digitalWrite(PTT_PIN, LOW); // transmit carrier for 0.5 sec +// sleep(0.5); +// digitalWrite(PTT_PIN, HIGH); + digitalWrite(PD_PIN, LOW); // disable SR_FRS + pinMode(PD_PIN, INPUT); + pinMode(PTT_PIN, INPUT); +} + +bool read_config_file() { + char buff[255]; + // Open configuration file with callsign and reset count + Serial.println("Reading config file"); + File config_file = LittleFS.open("/payload.cfg", "r"); +// FILE * config_file = fopen("/payload.cfg", "r"); + if (!config_file) { + return(false); + } + +// char * cfg_buf[100]; + config_file.read((uint8_t *)buff, 255); +// sscanf(buff, "%d", &cnt); + sscanf(buff, "%f %f %f", xOffset, yOffset, zOffset); + config_file.close(); +// if (debug_mode) + Serial.printf("Config file /payload.cfg contains %f %f %f\n", xOffset, yOffset, zOffset); + + config_file.close(); + +// write_config_file(); + + return(true); +} + +void write_config_file() { + Serial.println("Writing /payload.cfg file"); + char buff[255]; + File config_file = LittleFS.open("/payload.cfg", "w+"); + + sprintf(buff, "%f %f %f", xOffset, yOffset, zOffset); + Serial.println("Writing string "); +// if (debug_mode) + print_string(buff); + config_file.write(buff, strlen(buff)); + + config_file.close(); +// Serial.println("Write complete"); + +} + +void read_sensors() +{ + +} + +void print_string(char *string) +{ + int count = 0; + while ((count < 250) && (string[count] != 0)) + { + Serial.print(string[count++]); + } + Serial.println(" "); +} + +void start_payload() { + +//#ifdef APRS_VHF +// Serial2.setRX(9); +// Serial2.setRX(9); +// Serial2.setRX(1); + delay(100); +// Serial2.setTX(8); +// Serial2.setTX(8); +// Serial2.setRX(0); + +/* + delay(100); + Serial1.setRX(1); + delay(100); + Serial1.setTX(0); + delay(10); +*/ +/* + Serial1.begin(115200); // serial to Pi + + Serial.println("Starting Serial1 for payload"); + + Serial2.begin(115200); // serial from GPS + + Serial.println("Starting Serial2 for GPS"); +*/ +//#else + Serial1.setRX(1); + delay(100); + Serial1.setTX(0); + delay(100); + Serial1.begin(115200); // Pi UART faster speed + + Serial2.begin(9600); // serial from GPS - some GPS modules need 115200 + + Serial.println("Starting Serial2 for GPS"); +//#endif + + Serial.println("Starting payload!"); + blink_setup(); - +/* blink(500); - delay(250); + sleep(0.25); // delay(250); blink(500); - delay(250); + sleep(0.25); // delay(250); led_set(greenLED, HIGH); - delay(250); + sleep(0.25); // delay(250); led_set(greenLED, LOW); led_set(blueLED, HIGH); - delay(250); + sleep(0.25); // delay(250); led_set(blueLED, LOW); - - if (bme.begin(0x76)) { +*/ + + if (bme.begin()) { bmePresent = 1; } else { Serial.println("Could not find a valid BME280 sensor, check wiring!"); bmePresent = 0; } - - mpu6050.begin(); - - if (eeprom_word_read(0) == 0xA07) + + Wire.begin(); + Wire.beginTransmission(0x68); + if (Wire.endTransmission() != 0) { + Serial.println("Could not find a valid MPU6050 sensor, check wiring!"); + mpuPresent = 0; + } + else { + mpuPresent = 1; + mpu6050.begin(); + + +// if ((read_config_file()) && (payload_command != PAYLOAD_RESET)) + if (false) { - Serial.println("Reading gyro offsets from EEPROM\n"); - - float xOffset = ((float)eeprom_word_read(1)) / 100.0; - float yOffset = ((float)eeprom_word_read(2)) / 100.0; - float zOffset = ((float)eeprom_word_read(3)) / 100.0; - - Serial.println(xOffset, DEC); - Serial.println(yOffset, DEC); - Serial.println(zOffset, DEC); - + Serial.println("Reading gyro offsets from config file\n"); mpu6050.setGyroOffsets(xOffset, yOffset, zOffset); + } + else { + payload_command = false; + Serial.println("Calculating gyro offsets and storing in EEPROM\n"); - + mpu6050.calcGyroOffsets(true); - +/* eeprom_word_write(0, 0xA07); eeprom_word_write(1, (int)(mpu6050.getGyroXoffset() * 100.0) + 0.5); eeprom_word_write(2, (int)(mpu6050.getGyroYoffset() * 100.0) + 0.5); eeprom_word_write(3, (int)(mpu6050.getGyroZoffset() * 100.0) + 0.5); - - Serial.println(eeprom_word_read(0), HEX); - Serial.println(((float)eeprom_word_read(1)) / 100.0, DEC); - Serial.println(((float)eeprom_word_read(2)) / 100.0, DEC); - Serial.println(((float)eeprom_word_read(3)) / 100.0, DEC); +*/ +// flag = 0xA07; + xOffset = mpu6050.getGyroXoffset(); + yOffset = mpu6050.getGyroYoffset(); + zOffset = mpu6050.getGyroZoffset(); + + write_config_file(); } -/**/ + } + + if (!(payload = bmePresent || mpuPresent)) + Serial.println("No payload sensors detected"); + + pinMode(greenLED, OUTPUT); + pinMode(blueLED, OUTPUT); + } - -void loop() { - - if (Serial1.available() > 0) { - blink(50); - char result = Serial1.read(); -// Serial1.println(result); -// Serial1.println("OK"); - -// if (result == '?') - { - if (bmePresent) { - Serial1.print("OK BME280 "); - Serial1.print(bme.readTemperature()); - Serial1.print(" "); - Serial1.print(bme.readPressure() / 100.0F); - Serial1.print(" "); - Serial1.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); - Serial1.print(" "); - Serial1.print(bme.readHumidity()); - } else - { - Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); - } - mpu6050.update(); - - Serial1.print(" MPU6050 "); - Serial1.print(mpu6050.getGyroX()); - Serial1.print(" "); - Serial1.print(mpu6050.getGyroY()); - Serial1.print(" "); - Serial1.print(mpu6050.getGyroZ()); - - Serial1.print(" "); - Serial1.print(mpu6050.getAccX()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccY()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccZ()); - - sensorValue = read_analog(); - -// Serial.println(sensorValue); - Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); - - Serial1.print(" XS "); - Serial1.print(Temp); - Serial1.print(" "); - Serial1.println(Sensor2); - - float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); - float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); -// Serial.print(rotation); -// Serial.print(" "); -// Serial.println(acceleration); - - if (first_read == true) { - first_read = false; - rest = acceleration; - } - - if (acceleration > 1.2 * rest) - led_set(greenLED, HIGH); - else - led_set(greenLED, LOW); - - if (rotation > 5) - led_set(blueLED, HIGH); - else - led_set(blueLED, LOW); - } - - } - if (Serial.available() > 0) { +void payload_OK_only() +{ + payload_str[0] = '\0'; // clear the payload string + + if ((Serial.available() > 0)|| first_time == true) // commented back in + { blink(50); char result = Serial.read(); -// Serial.println(result); -// Serial.println("OK"); -// Serial.println(counter++); - - if (result == 'R') { - Serial1.println("OK"); + char header[] = "OK BME280 "; + char str[100]; + + strcpy(payload_str, header); +// print_string(str); + if (bmePresent) +// sprintf(str, "%4.2f %6.2f %6.2f %5.2f ", + sprintf(str, "%.1f %.2f %.1f %.2f ", + bme.readTemperature(), bme.readPressure() / 100.0, bme.readAltitude(SEALEVELPRESSURE_HPA), bme.readHumidity()); + else + sprintf(str, "OK BME280 0.0 0.0 0.0 0.0 "); + strcat(payload_str, str); + + if (mpuPresent) { +// print_string(payload_str); + mpu6050.update(); + +// sprintf(str, " MPU6050 %5.2f %5.2f %5.2f %5.2f %5.2f %5.2f ", + sprintf(str, " MPU6050 %.1f %.1f %.1f %.1f %.1f %.1f ", + mpu6050.getGyroX(), mpu6050.getGyroY(), mpu6050.getGyroZ(), mpu6050.getAccX(), mpu6050.getAccY(), mpu6050.getAccZ()); + + strcat(payload_str, str); +// print_string(payload_str); + } + if (result == 'R') { + Serial.println("OK"); delay(100); - first_read = true; - setup(); +// first_time = true; + start_payload(); +// setup(); } - else if (result == 'C') { + else if (result == 'g') { + show_gps = !show_gps; + } + else if (result == 'C') { Serial.println("Clearing stored gyro offsets in EEPROM\n"); - eeprom_word_write(0, 0x00); - first_time = true; - setup(); - } - - if ((result == '?') || first_time == true) + EEPROM.put(0, (float)0.0); +// first_time = true; + start_payload(); +// setup(); + } + if ((result == '?') || first_time == true) // commented back in + if (true) { - first_time = false; + +// first_time = false; if (bmePresent) { Serial.print("OK BME280 "); Serial.print(bme.readTemperature()); @@ -213,45 +442,207 @@ void loop() { { Serial.print("OK BME280 0.0 0.0 0.0 0.0"); } + if (mpuPresent) { mpu6050.update(); - + Serial.print(" MPU6050 "); Serial.print(mpu6050.getGyroX()); Serial.print(" "); Serial.print(mpu6050.getGyroY()); Serial.print(" "); Serial.print(mpu6050.getGyroZ()); - + Serial.print(" "); Serial.print(mpu6050.getAccX()); Serial.print(" "); Serial.print(mpu6050.getAccY()); Serial.print(" "); - Serial.print(mpu6050.getAccZ()); - - sensorValue = read_analog(); - + Serial.print(mpu6050.getAccZ()); + } else + { + Serial.print(" MPU6050 0.0 0.0 0.0 0.0 0.0 0.0"); + } + + sensorValue = analogRead(TEMPERATURE_PIN); + //Serial.println(sensorValue); Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); - - Serial.print(" XS "); - Serial.print(Temp); + + + Serial.print(" GPS "); + Serial.print(Sensor1,4); Serial.print(" "); - Serial.print(Sensor2); - Serial.print(" ("); - Serial.print(sensorValue); - Serial.println(")"); - + Serial.print(Sensor2,4); + Serial.print(" "); + Serial.print(Sensor3,2); + Serial.print(" AN "); + Serial.println(sensorValue); // ,0); + + if (mpuPresent) { float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); // Serial.print(rotation); // Serial.print(" "); // Serial.println(acceleration); + if (acceleration > 1.2) + led_set(greenLED, HIGH); + else + led_set(greenLED, LOW); + + if (rotation > 5) + led_set(blueLED, HIGH); + else + led_set(blueLED, LOW); + } + } + } + +// Serial2.print("b"); + delay(250); + +// if (Serial2.available() > 0) { + if (true) { +/* + while (Serial2.available() > 0) // read GPS + Serial.write(Serial2.read()); +*/ +// For one second we parse GPS data and report some key values + newData = false; + + unsigned long starting = millis(); + for (unsigned long start = millis(); millis() - start < 1000;) // 5000;) + { + while (Serial2.available()) + { + char c = Serial2.read(); + if (show_gps) + Serial.write(c); // uncomment this line if you want to see the GPS data flowing + if (gps.encode(c)) // Did a new valid sentence come in? + newData = true; + } + } + if (newData) + { + Serial.printf("GPS read new data in ms: %d\n", millis() - start); + float flon = 0.0, flat = 0.0, flalt = 0.0; + unsigned long age; + starting = millis(); +// gps.f_get_position(&flat, &flon, &age); + + Serial.print(F("Location: ")); + if (gps.location.isValid()) + { + Serial.print(gps.location.lat(), 6); + Serial.print(F(",")); + Serial.print(gps.location.lng(), 6); + + flat = gps.location.lat(); + flon = gps.location.lng(); + flalt = gps.altitude.meters(); + } + else + { + Serial.print(F("INVALID")); + } + Serial.print("\r\n"); + + Sensor1 = flat; + Sensor2 = flon; + Sensor3 = flalt; // (float) gps.altitude.meters(); +// Serial.printf("New GPS data: %f %f %f ms: %d\n", Sensor1, Sensor2, Sensor3, millis() - start); + } else +// Serial.printf("GPS read no new data: %d\n", millis() - start); + ; + + blink(50); +/* + if (Serial1.available()) { + char result = Serial1.read(); +// Serial1.println(result); +// Serial.println(result); // don't print read result + + if (result == 'R') { + Serial1.println("OK"); + delay(100); + first_read = true; + start_payload(); +// setup(); + } + } +*/ +// if (result == '?') + if (true) // always send payload data over serial + { + if (bmePresent) { +// Serial1.print("START_FLAGOK BME280 "); + Serial1.print(sensor_start_flag); + Serial1.print("OK BME280 "); + Serial1.print(bme.readTemperature()); + Serial1.print(" "); + Serial1.print(bme.readPressure() / 100.0F); + Serial1.print(" "); + Serial1.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); + Serial1.print(" "); + Serial1.print(bme.readHumidity()); + } else + { +// Serial1.print("START_FLAGOK BME280 0.0 0.0 0.0 0.0"); + Serial1.print(sensor_start_flag); + Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); + } + if (mpuPresent) { + mpu6050.update(); + + Serial1.print(" MPU6050 "); + Serial1.print(mpu6050.getGyroX()); + Serial1.print(" "); + Serial1.print(mpu6050.getGyroY()); + Serial1.print(" "); + Serial1.print(mpu6050.getGyroZ()); + + Serial1.print(" "); + Serial1.print(mpu6050.getAccX()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccY()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccZ()); + + } else + { + Serial1.print(" MPU6050 0.0 0.0 0.0 0.0 0.0 0.0"); + } + + sensorValue = analogRead(TEMPERATURE_PIN); + //Serial.println(sensorValue); + Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); + + Serial1.print(" GPS "); + Serial1.print(Sensor1,4); + Serial1.print(" "); + Serial1.print(Sensor2,4); + Serial1.print(" "); + Serial1.print(Sensor3,2); + Serial1.print(" AN "); + Serial1.print(sensorValue); //,0); +// Serial1.println("END_FLAG"); + Serial1.println(sensor_end_flag); + + blink(50); + delay(50); + blink(50); + + if (mpuPresent) { + float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); + float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); +// Serial.print(rotation); +// Serial.print(" "); +// Serial.println(acceleration); + if (first_read == true) { first_read = false; rest = acceleration; } - + if (acceleration > 1.2 * rest) led_set(greenLED, HIGH); else @@ -262,21 +653,26 @@ void loop() { else led_set(blueLED, LOW); } - } + } + } + delay(100); } - + +/**/ +/* void eeprom_word_write(int addr, int val) { EEPROM.write(addr * 2, lowByte(val)); EEPROM.write(addr * 2 + 1, highByte(val)); } - + short eeprom_word_read(int addr) { return ((EEPROM.read(addr * 2 + 1) << 8) | EEPROM.read(addr * 2)); } - +*/ + void blink_setup() { #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) @@ -285,38 +681,30 @@ void blink_setup() pinMode(PB9, OUTPUT); pinMode(PB8, OUTPUT); #endif - -#if defined __AVR_ATmega32U4__ + +#if defined __AVR_ATmega32U4__ || ARDUINO_ARCH_RP2040 pinMode(RXLED, OUTPUT); // Set RX LED as an output // TX LED is set as an output behind the scenes pinMode(greenLED, OUTPUT); pinMode(blueLED,OUTPUT); #endif } - + void blink(int length) { -#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) - digitalWrite(PC13, LOW); // turn the LED on (HIGH is the voltage level) -#endif - -#if defined __AVR_ATmega32U4__ - digitalWrite(RXLED, LOW); // set the RX LED ON - TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF -#endif - - delay(length); // wait for a lenth of time - -#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) - digitalWrite(PC13, HIGH); // turn the LED off by making the voltage LOW -#endif - -#if defined __AVR_ATmega32U4__ - digitalWrite(RXLED, HIGH); // set the RX LED OFF - TXLED0; //TX LED macro to turn LED ON -#endif + if (wifi) + digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON + else + digitalWrite(led_builtin_pin, HIGH); // set the built-in LED ON + + sleep(length/1000.0); // delay(length); // wait for a lenth of time + + if (wifi) + digitalWrite(LED_BUILTIN, LOW); // set the built-in LED OFF + else + digitalWrite(led_builtin_pin, LOW); // set the built-in LED OFF } - + void led_set(int ledPin, bool state) { #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) @@ -325,20 +713,748 @@ void led_set(int ledPin, bool state) else if (ledPin == blueLED) digitalWrite(PB8, state); #endif - -#if defined __AVR_ATmega32U4__ + +#if defined __AVR_ATmega32U4__ || ARDUINO_ARCH_RP2040 digitalWrite(ledPin, state); #endif } -int read_analog() -{ - int sensorValue; - #if defined __AVR_ATmega32U4__ - sensorValue = analogRead(A3); -#endif -#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) - sensorValue = analogRead(PA7); + +void sleep(float timer) { // sleeps for intervals more than 0.01 milli seconds + + unsigned long time_us = (unsigned long)(timer * 1000000.0); + unsigned long startSleep = micros(); + while ((micros() - startSleep) < time_us) { +// busy_wait_us(100); + delayMicroseconds(100); + } +} + +void blinkTimes(int blinks) { + for (int i = 0; i < blinks; i++) { + digitalWrite(MAIN_LED_GREEN, LOW); + + if (wifi) + digitalWrite(LED_BUILTIN, LOW); // set the built-in LED OFF + else + digitalWrite(led_builtin_pin, LOW); // set the built-in LED OFF + + sleep(0.1); + digitalWrite(MAIN_LED_GREEN, HIGH); + + if (wifi) + digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON + else + digitalWrite(led_builtin_pin, HIGH); // set the built-in LED ON + + sleep(0.1); + } +} + +void blinkFastTimes(int blinks) { + for (int i = 0; i < blinks; i++) { + digitalWrite(MAIN_LED_GREEN, LOW); + + if (wifi) + digitalWrite(LED_BUILTIN, LOW); // set the built-in LED OFF + else + digitalWrite(led_builtin_pin, LOW); // set the built-in LED OFF + + sleep(0.05); + digitalWrite(MAIN_LED_GREEN, HIGH); + + if (wifi) + digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON + else + digitalWrite(led_builtin_pin, HIGH); // set the built-in LED ON + + sleep(0.05); + } +} + +void blink_pin(int pin, int duration) { + + digitalWrite(pin, HIGH); + sleep((float)duration / 1000.00); + digitalWrite(pin, LOW); + +} + + +bool check_for_wifi() { + +#ifndef PICO_W + + Serial.println("WiFi disabled in software"); + return(false); // skip check if not Pico W board or compilation will fail + #endif - return(sensorValue); + +// stdio_init_all(); + +// adc_init(); +// adc_gpio_init(29); + pinMode(29, INPUT); +// adc_select_input(3); + const float conversion_factor = 3.3f / (1 << 12); +// uint16_t result = adc_read(); + uint16_t result = analogRead(29); +// Serial.printf("ADC3 value: 0x%03x, voltage: %f V\n", result, result * conversion_factor); + +// if (result < 0x100) { + if (result < 0x10) { + Serial.println("\nPico W detected!\n"); + return(true); + } + else { + Serial.println("\nPico detected!\n"); + return(false); + } +} + +void show_dir() { + LittleFS.begin(); + Dir dir = LittleFS.openDir("/"); +// or Dir dir = LittleFS.openDir("/data"); + Serial.println("FS directory:"); + while (dir.next()) { + Serial.print(dir.fileName()); + if(dir.fileSize()) { + File f = dir.openFile("r"); + Serial.print(" "); + Serial.println(f.size()); + } + } + Serial.println(">"); +} + +void serial_input() { + + if (prompt == false) { // only query if not in the middle of prompting + + if (Serial.available() > 0) { // check for user input on serial port + +// blink(50); + char result = Serial.read(); + + if ((result != '\n') && (result != '\r')) { + + Serial.println(result); + + switch(result) { + case 'h': + case 'H': + // Serial.println("Help"); + prompt = PROMPT_HELP; + break; + + case 'a': + case 'A': + Serial.println("Change to AFSK/APRS mode"); + new_mode = AFSK; + break; + + case 'm': + case 'M': + Serial.println("Change to CW mode"); + new_mode = CW; + break; + + case 'F': + Serial.println("Formatting flash memory"); + prompt = PROMPT_FORMAT; + break; + case 'f': + Serial.println("Change to FSK mode"); + new_mode = FSK; + break; + + case 'b': + case 'B': + Serial.println("Change to BPSK mode"); + new_mode = BPSK; + break; + + case 's': + Serial.println("Change to SSTV mode"); + new_mode = SSTV; + break; + + case 'S': + Serial.println("I2C scan"); + prompt = PROMPT_I2CSCAN; + break; + + case 'i': + case 'I': + Serial.println("Restart CubeSatsim software"); + prompt = PROMPT_RESTART; + break; + + case 'c': + Serial.println("Change the CALLSIGN"); + prompt = PROMPT_CALLSIGN; + break; + + case 'C': + Serial.println("Debug camera"); + debug_camera = true; + prompt = PROMPT_CAMERA; + break; + + case 't': + case 'T': + Serial.println("Change the Simulated Telemetry"); + prompt = PROMPT_SIM; + break; + + case 'p': + case 'P': + Serial.println("Reset payload EEPROM settings"); + prompt = PROMPT_PAYLOAD; + break; + + case 'r': + case 'R': + Serial.println("Change the Resets Count"); + prompt = PROMPT_RESET; + break; + + case 'o': + case 'O': + Serial.println("Read diode temperature"); + prompt = PROMPT_TEMP; + break; + + case 'l': + case 'L': + Serial.println("Change the Latitude and Longitude"); + prompt = PROMPT_LAT; + break; + + case 'v': + case 'V': + Serial.println("Read INA219 voltage and current"); + prompt = PROMPT_VOLTAGE; + break; + + case '?': + Serial.println("Query payload sensors"); + prompt = PROMPT_QUERY; + break; + + case 'd': + Serial.println("Change debug mode"); + prompt = PROMPT_DEBUG; + break; + + case 'w': + Serial.println(wifi); + Serial.println("Connect to WiFi"); + prompt = PROMPT_WIFI; + break; + + default: + Serial.println("Not a command\n"); + + break; + } + } + } + } +} + +void prompt_for_input() { + float float_result; + + if (!prompting) { + prompting = true; + + while (Serial.available() > 0) // clear any characters in serial input buffer + Serial.read(); + + switch(prompt) { + + case PROMPT_HELP: + Serial.println("\nChange settings by typing the letter:"); + Serial.println("h Help info"); + Serial.println("F Format flash memory"); + Serial.println("S I2C scan"); + Serial.println("i Restart"); + Serial.println("p Reset payload and stored EEPROM values"); + Serial.println("? Query sensors"); + Serial.println("o Read diode temperature"); + Serial.println("d Change debug mode"); + Serial.println("w Connect to WiFi\n"); + +// Serial.printf("Software version v0.39 \nConfig file /payload.cfg contains %s %d %f %f %s\n\n", callsign, reset_count, lat_file, long_file, sim_yes); +/* + switch(mode) { + + case(AFSK): + Serial.println("AFSK mode"); + break; + + case(FSK): + Serial.println("FSK mode"); + break; + + case(BPSK): + Serial.println("BPSK mode"); + break; + + case(SSTV): + Serial.println("SSTV mode"); + break; + + case(CW): + Serial.println("CW mode"); + break; + } +*/ + break; + + case PROMPT_REBOOT: + Serial.println("Rebooting..."); + Serial.flush(); + watchdog_reboot (0, SRAM_END, 500); // restart Pico + sleep(20.0); + break; + + case PROMPT_FORMAT: + LittleFS.format(); +// Serial.println("Reboot or power cycle to restart the CubeSatSim"); + // while (1) ; // infinite loop + Serial.println("Rebooting..."); + Serial.flush(); + watchdog_reboot (0, SRAM_END, 500); // restart Pico + sleep(20.0); + break; + + case PROMPT_PAYLOAD: + Serial.println("Resetting the Payload"); + payload_command = PAYLOAD_RESET; + start_payload(); + break; + + case PROMPT_WIFI: + Serial.println(wifi); + if (wifi) { + char ssid[30], pass[30]; + Serial.println("Enter the credentials for your WiFi network"); + + Serial.print("Enter WiFi SSID: "); + get_serial_string(); + + print_string(serial_string); + + if (strlen(serial_string) > 0) { + strcpy(ssid, serial_string); + Serial.print("Enter WiFi password: "); + get_serial_string(); + if (strlen(serial_string) > 0) { + strcpy(pass, serial_string); + Serial.println("Connecting to Wifi"); +// Serial.printf("%s%s\n",ssid, pass); + + WiFi.begin(ssid, pass); + + unsigned int elapsed_timer = (unsigned int) millis(); + while ((WiFi.status() != WL_CONNECTED) && ((millis() - elapsed_timer) < 10000)) { + Serial.print("."); + delay(500); + } + if (((millis() - elapsed_timer) > 10000)) + Serial.println("Failed to connect!"); + else + Serial.println("Connected to WiFi!"); + } else + Serial.println("No password entered."); + } else + Serial.println("No SSID entered."); + } else + Serial.println("WiFi not available"); + + break; + + case PROMPT_I2CSCAN: + Serial.print("I2C scan"); + +// -------------------------------------- +// i2c_scanner +// +// Version 1 +// This program (or code that looks like it) +// can be found in many places. +// For example on the Arduino.cc forum. +// The original author is not know. +// Version 2, Juni 2012, Using Arduino 1.0.1 +// Adapted to be as simple as possible by Arduino.cc user Krodal +// Version 3, Feb 26 2013 +// V3 by louarnold +// Version 4, March 3, 2013, Using Arduino 1.0.3 +// by Arduino.cc user Krodal. +// Changes by louarnold removed. +// Scanning addresses changed from 0...127 to 1...119, +// according to the i2c scanner by Nick Gammon +// https://www.gammon.com.au/forum/?id=10896 +// Version 5, March 28, 2013 +// As version 4, but address scans now to 127. +// A sensor seems to use address 120. +// Version 6, November 27, 2015. +// Added waiting for the Leonardo serial communication. +// +// +// This sketch tests the standard 7-bit addresses +// Devices with higher bit address might not be seen properly. +// + + +{ + byte error, address; + int nDevices; + + Serial.println("Scanning I2C Bus 1"); + + nDevices = 0; + for(address = 1; address < 127; address++ ) + { + // The i2c_scanner uses the return value of + // the Write.endTransmisstion to see if + // a device did acknowledge to the address. + Wire.beginTransmission(address); + error = Wire.endTransmission(); + + if (error == 0) + { + Serial.print("I2C device found at bus 1 address 0x"); + if (address<16) + Serial.print("0"); + Serial.print(address,HEX); + Serial.println(" !"); + + nDevices++; + } + else if (error==4) + { + Serial.print("Unknown error at bus 1 address 0x"); + if (address<16) + Serial.print("0"); + Serial.println(address,HEX); + } + } + if (nDevices == 0) + Serial.println("No I2C devices found on bus 1\n"); + else + Serial.println("done\n"); + + delay(5000); // wait 5 seconds for next scan + + Serial.println("Scanning I2C Bus 2"); + + nDevices = 0; + for(address = 1; address < 127; address++ ) + { + // The i2c_scanner uses the return value of + // the Write.endTransmisstion to see if + // a device did acknowledge to the address. + + Wire1.beginTransmission(address); + error = Wire1.endTransmission(); + + if (error == 0) + { + Serial.print("I2C device found at bus 2 address 0x"); + if (address<16) + Serial.print("0"); + Serial.print(address,HEX); + Serial.println(" !"); + + nDevices++; + } + else if (error==4) + { + Serial.print("Unknown error at bus 2 address 0x"); + if (address<16) + Serial.print("0"); + Serial.println(address,HEX); + } + } + if (nDevices == 0) + Serial.println("No I2C devices found on bus 2\n"); + else + Serial.println("done\n"); + +} + Serial.println("complete"); + break; + + + +/* + + case PROMPT_SIM: + if (sim_mode == TRUE) + Serial.println("Simulted Telemetry mode is currently on"); + else + Serial.println("Simulted Telemetry mode is currently off"); + Serial.println("Do you want Simulated Telemetry on (y/n)"); + get_serial_char(); + if ((serial_string[0] == 'y') || (serial_string[0] == 'Y')) { + Serial.println("Setting Simulated telemetry to on"); + reset_min_max(); + config_simulated_telem(); + write_config_file(); + } else if ((serial_string[0] == 'n') || (serial_string[0] == 'N')) { + Serial.println("Setting Simulated telemetry to off"); + reset_min_max(); + sim_mode = false; + if (!ina219_started) + start_ina219(); + write_config_file(); + } else + Serial.println("No change to Simulated Telemetry mode"); + break; + + case PROMPT_LAT: + + Serial.println("Changing the latitude and longitude - only used for APRS telemetry"); + Serial.println("Hitting return keeps the current value."); + + Serial.print("Current value of latitude is "); + Serial.println(latitude); + Serial.println("Enter latitude (decimal degrees, positive is north): "); + get_serial_string(); + float_result = atof(serial_string); + if (float_result != 0.0) { + Serial.print("Latitude updated to "); + Serial.println(float_result); + latitude = float_result; + } else + Serial.println("Latitude not updated"); + + get_serial_clear_buffer(); + Serial.print("Current value of longitude is "); + Serial.println(longitude); + Serial.println("Enter longitude (decimal degrees, positive is east): "); + get_serial_string(); + float_result = atof(serial_string); + if (float_result != 0.0) { + Serial.print("Longitude updated to "); + Serial.println(float_result); + longitude = float_result; + } else + Serial.println("Longitude not updated"); + + write_config_file(); + if (mode == AFSK) + set_lat_lon(); + + break; + + case PROMPT_QUERY: + Serial.println("Querying payload sensors"); + payload_command = PAYLOAD_QUERY; + break; + + case PROMPT_CAMERA: + show_dir(); + get_camera_image(debug_camera); + show_dir(); + break; + + case PROMPT_TEMP: + sensorValue = analogRead(TEMPERATURE_PIN); + Serial.print("Raw diode voltage: "); + Serial.println(sensorValue); + Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); + Serial.print("Calculated temperature: "); + Serial.print(Temp); + Serial.println(" C"); + break; + + case PROMPT_VOLTAGE: + Serial.println("Querying INA219 voltage and current sensors"); + if (!ina219_started) + start_ina219(); + voltage_read = true; + read_ina219(); + break; + + + case PROMPT_RESET: + Serial.println("Reset count is now 0"); + reset_count = 0; + write_config_file(); + break; + + case PROMPT_RESTART: + prompt = false; +// Serial.println("Restart not yet implemented"); + start_payload(); +// start_ina219(); + if ((mode != CW) || (!filter_present)) + transmit_callsign(callsign); + sleep(0.5); + config_telem(); + config_radio(); + sampleTime = (unsigned int) millis(); + break; + + case PROMPT_DEBUG: + Serial.print("Changing Debug Mode to "); + debug_mode = !debug_mode; + if (debug_mode) + Serial.println("on"); + else + Serial.println("off"); + break; +*/ + + } + prompt = false; + prompting = false; + } +// else +// Serial.println("Already prompting!"); +} + +void get_serial_string() { + int input = 0; + int i = 0; + unsigned int elapsed_time = (unsigned int) millis(); + while ((input != '\n') && (input!= '\r') && (i < 128) && ((millis() - elapsed_time) < 20000)) { + if (Serial.available() > 0) { + input = Serial.read(); + if ((input != '\n') && (input!= '\r')) { + serial_string[i++] = input; + Serial.write(input); + } + } + sleep(0.1); + } + serial_string[i] = 0; + Serial.println(" "); +} + +void get_serial_char() { + unsigned int elapsed_time = (unsigned int) millis(); + while (((millis() - elapsed_time) < 20000) && (Serial.available() < 1)) { } + if (Serial.available() > 0) { + serial_string[0] = Serial.read(); // get character + Serial.write(serial_string[0]); + serial_string[1] = 0; + Serial.println(" "); + } else + { + serial_string[0] = 0; // timeout - no character + } +} + +void get_serial_clear_buffer() { +// Serial.println("Emptying serial input buffer"); + while (Serial.available() > 0) + Serial.read(); + +} + + +void read_config() { + LittleFS.begin(); + Serial.println("Reading config file"); + char buff[32]; + File mode_file = LittleFS.open("/config.txt", "r"); +// if (!mode_file) { +// write_mode(mode); +// } else { + // if (mode_file.read((uint8_t *)buff, 31)) { +// Serial.println("Reading mode from .mode file"); + sscanf(buff, "%d", &mode); + mode_file.close(); +// Serial.print("Mode is "); +// Serial.print(mode); + +// } + //} +} + +void write_config(int save_mode) { + + char buff[32]; + Serial.println("Writing config file"); + File mode_file = LittleFS.open("/config.txt", "w+"); + + sprintf(buff, "%d", save_mode); + if (debug_mode) { + Serial.println("Writing string"); + print_string(buff); + } + + if (mode_file.write(buff, strlen(buff)) != strlen(buff)) { +// Serial.println(mode_file.write(buff, strlen(buff))); + Serial.println("*** config file write error! ***\n\n"); + blinkFastTimes(3); + } + + mode_file.close(); +// Serial.println("Write complete"); +} + + +void get_input() { +// if (mode != SSTV) +// Serial.print("+"); +// if ((mode == CW) || (mode == SSTV)) + serial_input(); + +// check for button press +// if (digitalRead(MAIN_PB_PIN) == PRESSED) // pushbutton is pressed +// process_pushbutton(); + if (BOOTSEL) // boot selector button is pressed on Pico +// process_bootsel(); + Serial.println("boot selector button pressed!"); + + if (prompt) { +// Serial.println("Need to prompt for input!"); + prompt_for_input(); + prompt = false; + } +/* + // check to see if the mode has changed + if (mode != new_mode) { + Serial.println("Changing mode"); + cw_stop = false; // enable CW or won't hear CW ID +/// if (mode == SSTV) { +/// ITimer1.detachInterrupt(); +/// start_button_isr(); // restart button isr +/// } + int old_mode = mode; + bool config_done = false; +// mode = new_mode; // change modes if button pressed + write_mode(new_mode); + + Serial.println("Rebooting..."); + Serial.flush(); + watchdog_reboot (0, SRAM_END, 500); //10); // restart Pico + + sleep(20.0); + */ +/* + if (new_mode != CW) + transmit_callsign(callsign); + sleep(0.5); + + if (!config_done) + config_telem(); // run this here for all other modes + + config_radio(); + if ((mode == FSK) || (mode == BPSK)) { + digitalWrite(LED_BUILTIN, HIGH); + digitalWrite(MAIN_LED_BLUE, HIGH); + } + + sampleTime = (unsigned int) millis(); +*/ +// } + } From f189e6aaabf25d180b90b8aff136a2262acaeec2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 04:05:20 -0500 Subject: [PATCH 04/81] added ARDUINO_ARCH_RP2040 test --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index f0111f9e..860ab76b 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -48,6 +48,10 @@ void setup() { // Serial1.begin(9600); // Pi UART faster speed Serial.println("Starting!"); + +#ifndef ARDUINO_ARCH_RP2040 + Serial.println("This code is for the Raspberry Pi Pico hardware."); +#endif blink_setup(); From e029b6e15d59d5333498e80080f874ef444eb766 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 04:20:52 -0500 Subject: [PATCH 05/81] T1 definition --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 860ab76b..dfd3db19 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -23,6 +23,12 @@ short eeprom_word_read(int addr); int first_time = true; int first_read = true; +#if defined ARDUINO_ARCH_RP2040 +float T2 = 26.3; // Temperature data point 1 +float R2 = 167; // Reading data point 1 +float T1 = 2; // Temperature data point 2 +float R1 = 179; // Reading data point 2 +#endif #if defined __AVR_ATmega32U4__ float T2 = 26.3; // Temperature data point 1 float R2 = 167; // Reading data point 1 From c5d1b1cdc9d8e61f92b47f1254e77f8a9de46f21 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 04:27:49 -0500 Subject: [PATCH 06/81] add start and end flag --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index dfd3db19..2632f6ea 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -45,6 +45,9 @@ float R1 = 695; // Reading data point 2 int sensorValue; float Temp; float rest; + +char sensor_end_flag[] = "_END_FLAG_"; +char sensor_start_flag[] = "_START_FLAG_"; void setup() { @@ -125,6 +128,7 @@ void loop() { // if (result == '?') { if (bmePresent) { + Serial1.print(sensor_start_flag); Serial1.print("OK BME280 "); Serial1.print(bme.readTemperature()); Serial1.print(" "); @@ -135,6 +139,7 @@ void loop() { Serial1.print(bme.readHumidity()); } else { + Serial1.print(sensor_start_flag); Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); } mpu6050.update(); @@ -162,6 +167,7 @@ void loop() { Serial1.print(Temp); Serial1.print(" "); Serial1.println(Sensor2); + Serial1.println(sensor_end_flag); float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); From 4106ae405757a45b289b1bd7b4a1b7e56d1d43d6 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 08:26:09 -0500 Subject: [PATCH 07/81] always send over Serial1 --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 2632f6ea..1100ee2c 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -124,7 +124,8 @@ void loop() { char result = Serial1.read(); // Serial1.println(result); // Serial1.println("OK"); - + } + { // if (result == '?') { if (bmePresent) { From d68441d31c022ef9536620b4e72bc439e95f66dc Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 08:29:40 -0500 Subject: [PATCH 08/81] print sensors to serial every time --- .../Payload_BME280_MPU6050_XS.ino | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 1100ee2c..5596e4ff 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -138,10 +138,21 @@ void loop() { Serial1.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial1.print(" "); Serial1.print(bme.readHumidity()); + + Serial.print("OK BME280 "); + Serial.print(bme.readTemperature()); + Serial.print(" "); + Serial.print(bme.readPressure() / 100.0F); + Serial.print(" "); + Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); + Serial.print(" "); + Serial.print(bme.readHumidity()); } else { Serial1.print(sensor_start_flag); Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); + + Serial.print("OK BME280 0.0 0.0 0.0 0.0"); } mpu6050.update(); @@ -158,7 +169,21 @@ void loop() { Serial1.print(mpu6050.getAccY()); Serial1.print(" "); Serial1.print(mpu6050.getAccZ()); + + Serial.print(" MPU6050 "); + Serial.print(mpu6050.getGyroX()); + Serial.print(" "); + Serial.print(mpu6050.getGyroY()); + Serial.print(" "); + Serial.print(mpu6050.getGyroZ()); + Serial.print(" "); + Serial.print(mpu6050.getAccX()); + Serial.print(" "); + Serial.print(mpu6050.getAccY()); + Serial.print(" "); + Serial.print(mpu6050.getAccZ()); + sensorValue = read_analog(); // Serial.println(sensorValue); @@ -169,6 +194,11 @@ void loop() { Serial1.print(" "); Serial1.println(Sensor2); Serial1.println(sensor_end_flag); + + Serial.print(" XS "); + Serial.print(Temp); + Serial.print(" "); + Serial.println(Sensor2); float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); From ca906fc4a4725d468c38cfac2c160a374ae8a80e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 08:33:26 -0500 Subject: [PATCH 09/81] add one second delay --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 5596e4ff..543d1590 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -310,7 +310,7 @@ void loop() { led_set(blueLED, LOW); } } - delay(100); + delay(1000); } void eeprom_word_write(int addr, int val) From 8d295cbb30c834566253b5003e7d4c2e0554a0db Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 08:42:46 -0500 Subject: [PATCH 10/81] add check for wifi on Pico --- .../Payload_BME280_MPU6050_XS.ino | 80 ++++++++++++++++++- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 543d1590..b2f9ba43 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -22,6 +22,9 @@ void eeprom_word_write(int addr, int val); short eeprom_word_read(int addr); int first_time = true; int first_read = true; +bool check_for_wifi(); +bool wifi = false; +#define PICO_W // define if Pico W board. Otherwise, compilation fail for Pico or runtime fail if compile as Pico W #if defined ARDUINO_ARCH_RP2040 float T2 = 26.3; // Temperature data point 1 @@ -60,6 +63,18 @@ void setup() { #ifndef ARDUINO_ARCH_RP2040 Serial.println("This code is for the Raspberry Pi Pico hardware."); + + pinMode(0, INPUT); + pinMode(1, INPUT); + + // set all Pico GPIO connected pins to input + for (int i = 6; i < 22; i++) { + pinMode(i, INPUT); + } + pinMode(26, INPUT); + pinMode(27, INPUT); + pinMode(28, INPUT); + #endif blink_setup(); @@ -339,6 +354,20 @@ void blink_setup() pinMode(greenLED, OUTPUT); pinMode(blueLED,OUTPUT); #endif + +#if defined ARDUINO_ARCH_RP2040 + if (check_for_wifi()) { + wifi = true; + led_builtin_pin = LED_BUILTIN; // use default GPIO for Pico W + pinMode(LED_BUILTIN, OUTPUT); +// configure_wifi(); + } else { + led_builtin_pin = 25; // manually set GPIO 25 for Pico board +// pinMode(25, OUTPUT); + pinMode(led_builtin_pin, OUTPUT); + } +#endif + } void blink(int length) @@ -351,8 +380,13 @@ void blink(int length) digitalWrite(RXLED, LOW); // set the RX LED ON TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF #endif - - delay(length); // wait for a lenth of time + +#if defined ARDUINO_ARCH_RP2040 + if (wifi) + digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON + else + digitalWrite(led_builtin_pin, HIGH); // set the built-in LED ON +#endif #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) digitalWrite(PC13, HIGH); // turn the LED off by making the voltage LOW @@ -362,6 +396,16 @@ void blink(int length) digitalWrite(RXLED, HIGH); // set the RX LED OFF TXLED0; //TX LED macro to turn LED ON #endif + +#if defined ARDUINO_ARCH_RP2040 + if (wifi) + digitalWrite(LED_BUILTIN, LOW); // set the built-in LED OFF + else + digitalWrite(led_builtin_pin, LOW); // set the built-in LED OFF + +// delay(length); // wait for a lenth of time +#endif + } void led_set(int ledPin, bool state) @@ -389,3 +433,35 @@ int read_analog() #endif return(sensorValue); } + +bool check_for_wifi() { + +#ifndef PICO_W + + Serial.println("WiFi disabled in software"); + return(false); // skip check if not Pico W board or compilation will fail + +#endif + +// stdio_init_all(); + +// adc_init(); +// adc_gpio_init(29); + pinMode(29, INPUT); +// adc_select_input(3); + const float conversion_factor = 3.3f / (1 << 12); +// uint16_t result = adc_read(); + uint16_t result = analogRead(29); +// Serial.printf("ADC3 value: 0x%03x, voltage: %f V\n", result, result * conversion_factor); + +// if (result < 0x100) { + if (result < 0x10) { + Serial.println("\nPico W detected!\n"); + return(true); + } + else { + Serial.println("\nPico detected!\n"); + return(false); + } +} + From 92ee1536bbcafbee89019b353bb99b52f0683c01 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 08:43:59 -0500 Subject: [PATCH 11/81] add led_builtin_pin; --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 1 + 1 file changed, 1 insertion(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index b2f9ba43..c7061f77 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -24,6 +24,7 @@ int first_time = true; int first_read = true; bool check_for_wifi(); bool wifi = false; +int led_builtin_pin; #define PICO_W // define if Pico W board. Otherwise, compilation fail for Pico or runtime fail if compile as Pico W #if defined ARDUINO_ARCH_RP2040 From 7420d25d036a89a8b6d9c7053a66639bf3b1b4a8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 08:46:15 -0500 Subject: [PATCH 12/81] blink built in LED each time --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index c7061f77..418d922a 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -134,9 +134,10 @@ void setup() { } void loop() { - + + blink(50); + if (Serial1.available() > 0) { - blink(50); char result = Serial1.read(); // Serial1.println(result); // Serial1.println("OK"); From 9381dca0c07bb22a86e5a350f25ce35dfd6e8a8d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 08:56:07 -0500 Subject: [PATCH 13/81] add green and blue LED support --- .../Payload_BME280_MPU6050_XS.ino | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 418d922a..cb705952 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -206,16 +206,16 @@ void loop() { // Serial.println(sensorValue); Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); - Serial1.print(" XS "); + Serial1.print(" GPS 0 0 0 AN "); Serial1.print(Temp); Serial1.print(" "); - Serial1.println(Sensor2); - Serial1.println(sensor_end_flag); +// Serial1.println(Sensor2); +// Serial1.println(sensor_end_flag); - Serial.print(" XS "); + Serial.print(" GPS 0 0 0 AN "); Serial.print(Temp); - Serial.print(" "); - Serial.println(Sensor2); +// Serial.print(" "); +// Serial.println(Sensor2); float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); @@ -422,6 +422,13 @@ void led_set(int ledPin, bool state) #if defined __AVR_ATmega32U4__ digitalWrite(ledPin, state); #endif + +#if defined ARDUINO_ARCH_RP2040 + if (ledPin == greenLED) + digitalWrite(19, state); + else if (ledPin == blueLED) + digitalWrite(18, state); +#endif } int read_analog() @@ -432,6 +439,9 @@ int read_analog() #endif #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) sensorValue = analogRead(PA7); +#endif +#if defined ARDUINO_ARCH_RP2040 + sensorValue = analogRead(28); #endif return(sensorValue); } @@ -445,18 +455,11 @@ bool check_for_wifi() { #endif -// stdio_init_all(); - -// adc_init(); -// adc_gpio_init(29); pinMode(29, INPUT); -// adc_select_input(3); const float conversion_factor = 3.3f / (1 << 12); -// uint16_t result = adc_read(); uint16_t result = analogRead(29); // Serial.printf("ADC3 value: 0x%03x, voltage: %f V\n", result, result * conversion_factor); -// if (result < 0x100) { if (result < 0x10) { Serial.println("\nPico W detected!\n"); return(true); From e6a133c94392226857e349c8669c1168d472130d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 08:59:29 -0500 Subject: [PATCH 14/81] add 10 second delay at start --- .../Payload_BME280_MPU6050_XS.ino | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index cb705952..6500baf5 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -55,10 +55,12 @@ char sensor_start_flag[] = "_START_FLAG_"; void setup() { - Serial.begin(9600); // Serial Monitor for testing + Serial.begin(115200); // Serial Monitor for testing Serial1.begin(115200); // Pi UART faster speed // Serial1.begin(9600); // Pi UART faster speed + + delay(10000); Serial.println("Starting!"); @@ -207,13 +209,13 @@ void loop() { Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); Serial1.print(" GPS 0 0 0 AN "); - Serial1.print(Temp); - Serial1.print(" "); + Serial1.println(Temp); +// Serial1.print(" "); // Serial1.println(Sensor2); // Serial1.println(sensor_end_flag); Serial.print(" GPS 0 0 0 AN "); - Serial.print(Temp); + Serial.println(Temp); // Serial.print(" "); // Serial.println(Sensor2); From e9df224fe6ae90a10d99e6e1b0c8014c6080d4da Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 09:03:57 -0500 Subject: [PATCH 15/81] skip eprom for Pico --- .../Payload_BME280_MPU6050_XS.ino | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 6500baf5..d70d6122 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -18,8 +18,8 @@ int greenLED = 9; int blueLED = 8; int Sensor1 = 0; float Sensor2 = 0; -void eeprom_word_write(int addr, int val); -short eeprom_word_read(int addr); +void prom_word_write(int addr, int val); +short prom_word_read(int addr); int first_time = true; int first_read = true; bool check_for_wifi(); @@ -57,14 +57,14 @@ void setup() { Serial.begin(115200); // Serial Monitor for testing - Serial1.begin(115200); // Pi UART faster speed -// Serial1.begin(9600); // Pi UART faster speed + Serial1.begin(115200); // Pi UART faster spd +// Serial1.begin(9600); // Pi UART faster spd delay(10000); Serial.println("Starting!"); -#ifndef ARDUINO_ARCH_RP2040 +#ifdefined ARDUINO_ARCH_RP2040 Serial.println("This code is for the Raspberry Pi Pico hardware."); pinMode(0, INPUT); @@ -86,9 +86,9 @@ void setup() { delay(250); blink(500); delay(250); - led_set(greenLED, HIGH); + led_set(grnLED, HIGH); delay(250); - led_set(greenLED, LOW); + led_set(grnLED, LOW); led_set(blueLED, HIGH); delay(250); led_set(blueLED, LOW); @@ -101,7 +101,7 @@ void setup() { } mpu6050.begin(); - + if (eeprom_word_read(0) == 0xA07) { Serial.println("Reading gyro offsets from EEPROM\n"); @@ -118,8 +118,12 @@ void setup() { } else { +#ifdefined ARDUINO_ARCH_RP2040 + Serial.println("Calculating gyro offsets\n"); + mpu6050.calcGyroOffsets(true); +#endif +#ifndef ARDUINO_ARCH_RP2040 Serial.println("Calculating gyro offsets and storing in EEPROM\n"); - mpu6050.calcGyroOffsets(true); eeprom_word_write(0, 0xA07); @@ -131,6 +135,7 @@ void setup() { Serial.println(((float)eeprom_word_read(1)) / 100.0, DEC); Serial.println(((float)eeprom_word_read(2)) / 100.0, DEC); Serial.println(((float)eeprom_word_read(3)) / 100.0, DEC); +#endif } /**/ } From 5cce8736ce0419137e9ef09e340fb6acc3101726 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 09:04:50 -0500 Subject: [PATCH 16/81] ifdef typo --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index d70d6122..72c57181 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -64,7 +64,7 @@ void setup() { Serial.println("Starting!"); -#ifdefined ARDUINO_ARCH_RP2040 +#ifdef ARDUINO_ARCH_RP2040 Serial.println("This code is for the Raspberry Pi Pico hardware."); pinMode(0, INPUT); @@ -118,7 +118,7 @@ void setup() { } else { -#ifdefined ARDUINO_ARCH_RP2040 +#ifdef ARDUINO_ARCH_RP2040 Serial.println("Calculating gyro offsets\n"); mpu6050.calcGyroOffsets(true); #endif From 44c219b73f8a5cee1fcd9c856c57143be70c54e2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 09:06:11 -0500 Subject: [PATCH 17/81] typo --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 72c57181..0d15ddd5 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -86,9 +86,9 @@ void setup() { delay(250); blink(500); delay(250); - led_set(grnLED, HIGH); + led_set(greenLED, HIGH); delay(250); - led_set(grnLED, LOW); + led_set(greenLED, LOW); led_set(blueLED, HIGH); delay(250); led_set(blueLED, LOW); From 103aac727721c24b093612e04442616d9cda6fbd Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 09:09:03 -0500 Subject: [PATCH 18/81] don't clear EEPROM for Pico --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 0d15ddd5..933554bb 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -262,10 +262,12 @@ void loop() { setup(); } else if (result == 'C') { +#ifndef ARDUINO_ARCH_RP2040 Serial.println("Clearing stored gyro offsets in EEPROM\n"); eeprom_word_write(0, 0x00); first_time = true; setup(); +#endif } if ((result == '?') || first_time == true) From edfdb175e0cfddca73eaa3489106247feabe64af Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 09:12:28 -0500 Subject: [PATCH 19/81] remove '?' query on serial --- .../Payload_BME280_MPU6050_XS.ino | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 933554bb..ae889759 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -254,22 +254,22 @@ void loop() { // Serial.println(result); // Serial.println("OK"); // Serial.println(counter++); - - if (result == 'R') { +#ifndef ARDUINO_ARCH_RP2040 + if (result == 'R') { Serial1.println("OK"); delay(100); first_read = true; setup(); } else if (result == 'C') { -#ifndef ARDUINO_ARCH_RP2040 Serial.println("Clearing stored gyro offsets in EEPROM\n"); eeprom_word_write(0, 0x00); first_time = true; setup(); -#endif } - +#endif + +/* if ((result == '?') || first_time == true) { first_time = false; @@ -336,6 +336,8 @@ void loop() { led_set(blueLED, LOW); } } + +*/ delay(1000); } From 507de8e285f2714297f1168e52cf5ea55dada3bd Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 09:13:55 -0500 Subject: [PATCH 20/81] typo --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index ae889759..d1d24530 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -335,9 +335,10 @@ void loop() { else led_set(blueLED, LOW); } +*/ } -*/ + delay(1000); } From 650f40a0dbf0b7a83c0ea033b9ebb3d49db8ec20 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 09:19:20 -0500 Subject: [PATCH 21/81] set mode green and blue LEDs --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index d1d24530..7aa80ad7 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -378,7 +378,10 @@ void blink_setup() } else { led_builtin_pin = 25; // manually set GPIO 25 for Pico board // pinMode(25, OUTPUT); - pinMode(led_builtin_pin, OUTPUT); + pinMode(led_builtin_pin, OUTPUT); + + pinMode(18, OUTPUT); + pinMode(19, OUTPUT); } #endif From fe59513a6a246f34971ed65059cf84347a72c04b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 09:22:28 -0500 Subject: [PATCH 22/81] green and blue LEDs --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 7aa80ad7..d7070ce5 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -438,7 +438,7 @@ void led_set(int ledPin, bool state) digitalWrite(ledPin, state); #endif -#if defined ARDUINO_ARCH_RP2040 +#ifdef ARDUINO_ARCH_RP2040 if (ledPin == greenLED) digitalWrite(19, state); else if (ledPin == blueLED) From d5cf9659789ede4ce848fd3010b7eddd0e65d7c9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 10:51:24 -0500 Subject: [PATCH 23/81] set Serial1 for Pico --- .../Payload_BME280_MPU6050_XS.ino | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index d7070ce5..6d2bbd79 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -55,6 +55,13 @@ char sensor_start_flag[] = "_START_FLAG_"; void setup() { +#ifdef ARDUINO_ARCH_RP2040 + Serial1.setRX(1); + delay(100); + Serial1.setTX(0); + delay(100); +#endif + Serial.begin(115200); // Serial Monitor for testing Serial1.begin(115200); // Pi UART faster spd From 7f1de3d049cfc5453611a753144498b02034b088 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 10:55:54 -0500 Subject: [PATCH 24/81] turn on Serial1 --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 6d2bbd79..cc0c6181 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -74,8 +74,8 @@ void setup() { #ifdef ARDUINO_ARCH_RP2040 Serial.println("This code is for the Raspberry Pi Pico hardware."); - pinMode(0, INPUT); - pinMode(1, INPUT); + // pinMode(0, INPUT); + // pinMode(1, INPUT); // set all Pico GPIO connected pins to input for (int i = 6; i < 22; i++) { From cb00d7bfabb549c293e7c686024963cfbbd79054 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 10:59:11 -0500 Subject: [PATCH 25/81] put back in end flag --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index cc0c6181..b41534e8 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -224,7 +224,7 @@ void loop() { Serial1.println(Temp); // Serial1.print(" "); // Serial1.println(Sensor2); -// Serial1.println(sensor_end_flag); + Serial1.println(sensor_end_flag); Serial.print(" GPS 0 0 0 AN "); Serial.println(Temp); From cba0718e2afcc1ea6a4c3cf8d5640f5bd2e53a00 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:17:16 -0500 Subject: [PATCH 26/81] write voltage and current over serial to Pico --- main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main.c b/main.c index 4872165d..ca4bdf4c 100644 --- a/main.c +++ b/main.c @@ -611,6 +611,8 @@ int main(int argc, char * argv[]) { fgets(cmdbuffer, 1000, file1); fprintf(stderr, "Python read Result: %s\n", cmdbuffer); + serialPuts(uart_fd, cmdbuffer); // write INA data to Pico over serial + const char space[2] = " "; token = strtok(cmdbuffer, space); From 1cfb919c7fd82a5ede493d592239c2062e75f748 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:21:02 -0500 Subject: [PATCH 27/81] send string --- main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index ca4bdf4c..19e68acc 100644 --- a/main.c +++ b/main.c @@ -611,7 +611,8 @@ int main(int argc, char * argv[]) { fgets(cmdbuffer, 1000, file1); fprintf(stderr, "Python read Result: %s\n", cmdbuffer); - serialPuts(uart_fd, cmdbuffer); // write INA data to Pico over serial +// serialPuts(uart_fd, cmdbuffer); // write INA data to Pico over serial + serialPuts(uart_fd, 'XXX\n'); // write data to Pico over serial const char space[2] = " "; token = strtok(cmdbuffer, space); From dba49e6b8dd87acd32b87a27266cd825577516d9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:24:05 -0500 Subject: [PATCH 28/81] another serial test. --- main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 19e68acc..6bc98048 100644 --- a/main.c +++ b/main.c @@ -612,7 +612,8 @@ int main(int argc, char * argv[]) { fprintf(stderr, "Python read Result: %s\n", cmdbuffer); // serialPuts(uart_fd, cmdbuffer); // write INA data to Pico over serial - serialPuts(uart_fd, 'XXX\n'); // write data to Pico over serial + char test[] = 'Hello\n'; + serialPuts(uart_fd, test); // write data to Pico over serial const char space[2] = " "; token = strtok(cmdbuffer, space); From b0c5a8d91fdf5719504c8fa9abb6e576cf8b8df5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:25:47 -0500 Subject: [PATCH 29/81] another test --- main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.c b/main.c index 6bc98048..b716d4d3 100644 --- a/main.c +++ b/main.c @@ -612,7 +612,7 @@ int main(int argc, char * argv[]) { fprintf(stderr, "Python read Result: %s\n", cmdbuffer); // serialPuts(uart_fd, cmdbuffer); // write INA data to Pico over serial - char test[] = 'Hello\n'; + char test[] = "Hello\n"; serialPuts(uart_fd, test); // write data to Pico over serial const char space[2] = " "; From 12e9acce1fa0008da21afe370b21463ea074ca65 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:27:20 -0500 Subject: [PATCH 30/81] print string received by Pico --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index b41534e8..c90c2461 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -153,7 +153,7 @@ void loop() { if (Serial1.available() > 0) { char result = Serial1.read(); -// Serial1.println(result); + Serial.println(result); // Serial1.println("OK"); } { From c4c410cd5b55a0b61b811a0ee664415b3b55572a Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:34:56 -0500 Subject: [PATCH 31/81] read string --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index c90c2461..b879b148 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -152,7 +152,8 @@ void loop() { blink(50); if (Serial1.available() > 0) { - char result = Serial1.read(); + string result; + result = Serial1.readString(); Serial.println(result); // Serial1.println("OK"); } From c42ad62fc770068f0a7f5e07345779b7dfccf5fc Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:35:40 -0500 Subject: [PATCH 32/81] fixed String --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index b879b148..b34c6271 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -152,7 +152,7 @@ void loop() { blink(50); if (Serial1.available() > 0) { - string result; + String result; result = Serial1.readString(); Serial.println(result); // Serial1.println("OK"); From 1e55f436c80b59d07774e36ae059fa5890d214bc Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:42:25 -0500 Subject: [PATCH 33/81] back to serial read --- .../Payload_BME280_MPU6050_XS.ino | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index b34c6271..091cd1e8 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -152,9 +152,10 @@ void loop() { blink(50); if (Serial1.available() > 0) { - String result; - result = Serial1.readString(); - Serial.println(result); + while (Serial1.available() > 0) { + char result = Serial1.read(); + Serial.print(result); + } // Serial1.println("OK"); } { From aa33877a61fdc46e51339a1c6ba6e9fb60e91e76 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:52:56 -0500 Subject: [PATCH 34/81] test prints --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 091cd1e8..6ff5709a 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -152,11 +152,12 @@ void loop() { blink(50); if (Serial1.available() > 0) { + Serial.print("Received serial data!!!\n"); while (Serial1.available() > 0) { char result = Serial1.read(); Serial.print(result); } -// Serial1.println("OK"); + Serial.println(" "); } { // if (result == '?') From 05b360026c3847f804cae10f134d345842af9797 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Thu, 4 Jan 2024 11:58:40 -0500 Subject: [PATCH 35/81] add delay --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 6ff5709a..a492682e 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -152,7 +152,8 @@ void loop() { blink(50); if (Serial1.available() > 0) { - Serial.print("Received serial data!!!\n"); + Serial.print("Received serial data!!!\n"); + delay(10); while (Serial1.available() > 0) { char result = Serial1.read(); Serial.print(result); From a548a832ad5e43d7deb8efb1c11c3c9fd3b436d8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 04:26:31 -0500 Subject: [PATCH 36/81] add gps code --- .../Payload_BME280_MPU6050_XS.ino | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index a492682e..719db24b 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -6,11 +6,14 @@ #include #include #include +//#include + #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; MPU6050 mpu6050(Wire); - +//TinyGPSPlus gps; + long timer = 0; int bmePresent; int RXLED = 17; // The RX LED has a defined Arduino pin @@ -52,7 +55,9 @@ float rest; char sensor_end_flag[] = "_END_FLAG_"; char sensor_start_flag[] = "_START_FLAG_"; - +bool show_gps = true; // set to false to not see all GPS messages +float flon = 0.0, flat = 0.0, flalt = 0.0; + void setup() { #ifdef ARDUINO_ARCH_RP2040 @@ -65,7 +70,7 @@ void setup() { Serial.begin(115200); // Serial Monitor for testing Serial1.begin(115200); // Pi UART faster spd -// Serial1.begin(9600); // Pi UART faster spd +// Serial1.begin(9600); // Pi UART faster spd delay(10000); @@ -74,6 +79,9 @@ void setup() { #ifdef ARDUINO_ARCH_RP2040 Serial.println("This code is for the Raspberry Pi Pico hardware."); + Serial.println("Starting Serial2 for GPS"); +// Serial2.begin(9600); // serial from GPS - some GPS modules need 115200 + // pinMode(0, INPUT); // pinMode(1, INPUT); @@ -83,7 +91,8 @@ void setup() { } pinMode(26, INPUT); pinMode(27, INPUT); - pinMode(28, INPUT); + pinMode(28, INPUT); + pinMode(15, INPUT_PULLUP); // squelch #endif @@ -224,8 +233,18 @@ void loop() { // Serial.println(sensorValue); Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); - Serial1.print(" GPS 0 0 0 AN "); - Serial1.println(Temp); +// Serial1.print(" GPS 0 0 0 AN "); + + Serial.print(" GPS "); + Serial.print(flat,4); + Serial.print(" "); + Serial.print(flon,4); + Serial.print(" "); + Serial.print(flalt,2); + + Serial1.print(" AN "); + Serial1.println(Temp); + // Serial1.print(" "); // Serial1.println(Sensor2); Serial1.println(sensor_end_flag); @@ -348,8 +367,12 @@ void loop() { } */ } - - + +#ifdef ARDUINO_ARCH_RP2040 + Serial.print("Squelch: "); + Serial.println(digitalRead(15)); +#endif + delay(1000); } From 511c8fe826e246df69ad3915bbb68adfb8dbaee9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 04:34:43 -0500 Subject: [PATCH 37/81] fixed gps --- .../Payload_BME280_MPU6050_XS.ino | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 719db24b..04d57ab6 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -55,7 +55,7 @@ float rest; char sensor_end_flag[] = "_END_FLAG_"; char sensor_start_flag[] = "_START_FLAG_"; -bool show_gps = true; // set to false to not see all GPS messages +bool show_ = true; // set to false to not see all messages float flon = 0.0, flat = 0.0, flalt = 0.0; void setup() { @@ -79,8 +79,8 @@ void setup() { #ifdef ARDUINO_ARCH_RP2040 Serial.println("This code is for the Raspberry Pi Pico hardware."); - Serial.println("Starting Serial2 for GPS"); -// Serial2.begin(9600); // serial from GPS - some GPS modules need 115200 + Serial.println("Starting Serial2 for "); +// Serial2.begin(9600); // serial from - some modules need 115200 // pinMode(0, INPUT); // pinMode(1, INPUT); @@ -235,22 +235,29 @@ void loop() { // Serial1.print(" GPS 0 0 0 AN "); - Serial.print(" GPS "); - Serial.print(flat,4); - Serial.print(" "); - Serial.print(flon,4); - Serial.print(" "); - Serial.print(flalt,2); + Serial1.print(" GPS "); + Serial1.print(flat,4); + Serial1.print(" "); + Serial1.print(flon,4); + Serial1.print(" "); + Serial1.print(flalt,2); - Serial1.print(" AN "); + Serial1.print(" TMP "); Serial1.println(Temp); // Serial1.print(" "); // Serial1.println(Sensor2); - Serial1.println(sensor_end_flag); - Serial.print(" GPS 0 0 0 AN "); - Serial.println(Temp); + Serial.print(" GPS "); + Serial.print(flat,4); + Serial.print(" "); + Serial.print(flon,4); + Serial.print(" "); + Serial.print(flalt,2); + +// Serial.print(" GPS 0 0 0 AN "); + Serial.print(" TMP "); + Serial.print(Temp); // Serial.print(" "); // Serial.println(Sensor2); @@ -275,7 +282,11 @@ void loop() { else led_set(blueLED, LOW); } - + + Serial1.println(" "); + Serial1.println(sensor_end_flag); + Serial.println(" "); + } if (Serial.available() > 0) { From 0f61656eaa3da6afb269e903cc0185d9f9728b75 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 04:45:01 -0500 Subject: [PATCH 38/81] testing squelch --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 04d57ab6..f6bb5cec 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -93,6 +93,12 @@ void setup() { pinMode(27, INPUT); pinMode(28, INPUT); pinMode(15, INPUT_PULLUP); // squelch + + pinMode(22, OUTPUT); + digitalWrite(22, 1); + pinMode(17, OUTPUT); + digitalWrite(17, 1); + #endif From a3fac03c972150a4b89a8c8df322f3d3c4d8cea0 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 04:53:43 -0500 Subject: [PATCH 39/81] comment out squelch test --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index f6bb5cec..a0641a7b 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -94,11 +94,13 @@ void setup() { pinMode(28, INPUT); pinMode(15, INPUT_PULLUP); // squelch +/* + Serial.println("Testing squelch"); pinMode(22, OUTPUT); digitalWrite(22, 1); pinMode(17, OUTPUT); digitalWrite(17, 1); - +*/ #endif From ccc629c8bc200301f20d806c9f54070cca05d7cb Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 04:56:49 -0500 Subject: [PATCH 40/81] more gps --- .../Payload_BME280_MPU6050_XS.ino | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index a0641a7b..aa1d00ab 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -6,13 +6,13 @@ #include #include #include -//#include +#include #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; MPU6050 mpu6050(Wire); -//TinyGPSPlus gps; +TinyGPSPlus gps; long timer = 0; int bmePresent; @@ -241,7 +241,7 @@ void loop() { // Serial.println(sensorValue); Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); -// Serial1.print(" GPS 0 0 0 AN "); +// Serial1.print(" GPS 0 0 0 TMP "); Serial1.print(" GPS "); Serial1.print(flat,4); @@ -263,7 +263,7 @@ void loop() { Serial.print(" "); Serial.print(flalt,2); -// Serial.print(" GPS 0 0 0 AN "); +// Serial.print(" GPS 0 0 0 TMP "); Serial.print(" TMP "); Serial.print(Temp); // Serial.print(" "); From ed09065b7f1cca3b32505fa9c5fc803e3359939c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 04:59:38 -0500 Subject: [PATCH 41/81] more gps --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index aa1d00ab..b5218ec8 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -79,7 +79,7 @@ void setup() { #ifdef ARDUINO_ARCH_RP2040 Serial.println("This code is for the Raspberry Pi Pico hardware."); - Serial.println("Starting Serial2 for "); + Serial.println("Starting Serial2 for optional GPS on JP12"); // Serial2.begin(9600); // serial from - some modules need 115200 // pinMode(0, INPUT); From 60dcfc9b1a216953d000a9c79bc18576914b592c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 05:14:17 -0500 Subject: [PATCH 42/81] gps parsing --- .../Payload_BME280_MPU6050_XS.ino | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index b5218ec8..59425e65 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -57,6 +57,7 @@ char sensor_end_flag[] = "_END_FLAG_"; char sensor_start_flag[] = "_START_FLAG_"; bool show_ = true; // set to false to not see all messages float flon = 0.0, flat = 0.0, flalt = 0.0; +void get_gps(); void setup() { @@ -240,6 +241,8 @@ void loop() { // Serial.println(sensorValue); Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); + + get_gps(); // Serial1.print(" GPS 0 0 0 TMP "); @@ -538,3 +541,48 @@ bool check_for_wifi() { } } +void get_gps() { + + newData = false; + unsigned long starting = millis(); + + for (unsigned long start = millis(); millis() - start < 1000;) // 5000;) + { + while (Serial2.available()) + { + char c = Serial2.read(); + if (show_gps) + Serial.write(c); // uncomment this line if you want to see the GPS data flowing + if (gps.encode(c)) // Did a new valid sentence come in? + newData = true; + } + } + if (newData) { + Serial.printf("GPS read new data in ms: %d\n", millis() - start); +// float flon = 0.0, flat = 0.0, flalt = 0.0; +// unsigned long age; + starting = millis(); +// gps.f_get_position(&flat, &flon, &age); + + Serial.print(F("Location: ")); + if (gps.location.isValid()) + { + Serial.print(gps.location.lat(), 6); + Serial.print(F(",")); + Serial.print(gps.location.lng(), 6); + + flat = gps.location.lat(); + flon = gps.location.lng(); + flalt = gps.altitude.meters(); + } + else + { + Serial.print(F("INVALID")); + } + Serial.print("\r\n"); + + } else +// Serial.printf("GPS read no new data: %d\n", millis() - start); + ; + +} From d768868f0260eb50a21f77a517a0fe6a4cfa373e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 05:15:10 -0500 Subject: [PATCH 43/81] add newData declaration --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 59425e65..ae8f6fc2 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -543,7 +543,7 @@ bool check_for_wifi() { void get_gps() { - newData = false; + bool newData = false; unsigned long starting = millis(); for (unsigned long start = millis(); millis() - start < 1000;) // 5000;) From 8a8247c5ceb098ba745f0c4186adfebe9b297cfc Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 05:16:07 -0500 Subject: [PATCH 44/81] fixed show_gps --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index ae8f6fc2..52efddd8 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -55,7 +55,7 @@ float rest; char sensor_end_flag[] = "_END_FLAG_"; char sensor_start_flag[] = "_START_FLAG_"; -bool show_ = true; // set to false to not see all messages +bool show_gps = true; // set to false to not see all messages float flon = 0.0, flat = 0.0, flalt = 0.0; void get_gps(); From f4a42cfcb3038b816e3044767d1d42b17764d610 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 05:20:05 -0500 Subject: [PATCH 45/81] fixed start in gps --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 52efddd8..68c7a3c0 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -544,9 +544,10 @@ bool check_for_wifi() { void get_gps() { bool newData = false; - unsigned long starting = millis(); + unsigned long start = millis(); - for (unsigned long start = millis(); millis() - start < 1000;) // 5000;) +// for (unsigned long start = millis(); millis() - start < 1000;) // 5000;) + while ((millis() - start) < 1000) // 5000;) { while (Serial2.available()) { From c44c4b72f14d42966a478b7a2ec88c6c7395609f Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 05:21:42 -0500 Subject: [PATCH 46/81] removed starting --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 68c7a3c0..cf32fd56 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -562,7 +562,7 @@ void get_gps() { Serial.printf("GPS read new data in ms: %d\n", millis() - start); // float flon = 0.0, flat = 0.0, flalt = 0.0; // unsigned long age; - starting = millis(); +// starting = millis(); // gps.f_get_position(&flat, &flon, &age); Serial.print(F("Location: ")); From 104c319bc9ea05f0461542cb8aa354e980092240 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 05:23:13 -0500 Subject: [PATCH 47/81] removed 1 s delay --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index cf32fd56..cd9e65a4 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -395,7 +395,7 @@ void loop() { Serial.println(digitalRead(15)); #endif - delay(1000); +// delay(1000); not needed due to gps 1 second polling delay } void eeprom_word_write(int addr, int val) From 2d5b5eb733ce90ab648965acfee0b9e356ae5308 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 05:25:55 -0500 Subject: [PATCH 48/81] moved get_gps to end of loop --- .../Payload_BME280_MPU6050_XS.ino | 78 ++----------------- 1 file changed, 5 insertions(+), 73 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index cd9e65a4..44f160db 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -1,5 +1,5 @@ -// code for Pro Micro or STM32 on the CubeSat Simulator STEM Payload board -// answers "OK" on the serial port Serial1 when queried by the Pi +// code for Pico or Pro Micro or STM32 on the CubeSat Simulator STEM Payload board +// works wih CubeSatSim software v1.3.2 or later #include #include @@ -241,8 +241,6 @@ void loop() { // Serial.println(sensorValue); Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); - - get_gps(); // Serial1.print(" GPS 0 0 0 TMP "); @@ -319,75 +317,7 @@ void loop() { first_time = true; setup(); } -#endif - -/* - if ((result == '?') || first_time == true) - { - first_time = false; - if (bmePresent) { - Serial.print("OK BME280 "); - Serial.print(bme.readTemperature()); - Serial.print(" "); - Serial.print(bme.readPressure() / 100.0F); - Serial.print(" "); - Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); - Serial.print(" "); - Serial.print(bme.readHumidity()); - } else - { - Serial.print("OK BME280 0.0 0.0 0.0 0.0"); - } - mpu6050.update(); - - Serial.print(" MPU6050 "); - Serial.print(mpu6050.getGyroX()); - Serial.print(" "); - Serial.print(mpu6050.getGyroY()); - Serial.print(" "); - Serial.print(mpu6050.getGyroZ()); - - Serial.print(" "); - Serial.print(mpu6050.getAccX()); - Serial.print(" "); - Serial.print(mpu6050.getAccY()); - Serial.print(" "); - Serial.print(mpu6050.getAccZ()); - - sensorValue = read_analog(); - - Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); - - Serial.print(" XS "); - Serial.print(Temp); - Serial.print(" "); - Serial.print(Sensor2); - Serial.print(" ("); - Serial.print(sensorValue); - Serial.println(")"); - - float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); - float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); -// Serial.print(rotation); -// Serial.print(" "); -// Serial.println(acceleration); - - if (first_read == true) { - first_read = false; - rest = acceleration; - } - - if (acceleration > 1.2 * rest) - led_set(greenLED, HIGH); - else - led_set(greenLED, LOW); - - if (rotation > 5) - led_set(blueLED, HIGH); - else - led_set(blueLED, LOW); - } -*/ +#endif } #ifdef ARDUINO_ARCH_RP2040 @@ -396,6 +326,8 @@ void loop() { #endif // delay(1000); not needed due to gps 1 second polling delay + get_gps(); + } void eeprom_word_write(int addr, int val) From 287489fd93f7dbe9ab2137897064de65b2adbeff Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 05:36:59 -0500 Subject: [PATCH 49/81] fixed extra line feeds --- .../Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 44f160db..c50e9257 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -252,7 +252,7 @@ void loop() { Serial1.print(flalt,2); Serial1.print(" TMP "); - Serial1.println(Temp); + Serial1.print(Temp); // Serial1.print(" "); // Serial1.println(Sensor2); @@ -292,7 +292,7 @@ void loop() { led_set(blueLED, LOW); } - Serial1.println(" "); +// Serial1.println(" "); Serial1.println(sensor_end_flag); Serial.println(" "); From f9920c4462e9064b2b5bc27bea463b8fb6551871 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 07:40:39 -0500 Subject: [PATCH 50/81] added -v and -p config options --- config | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/config b/config index 1973426a..2026b98d 100755 --- a/config +++ b/config @@ -180,6 +180,8 @@ elif [ "$1" = "-h" ]; then echo " -q Change the Squelch setting for command receiver" echo " -F Change the rx and tx frequency" echo " -H Chnage the Balloon mode" + echo " -p Display payload sensor data" + echo " -v Display voltage and current data" echo exit @@ -665,7 +667,19 @@ elif [ "$1" = "-H" ]; then echo sudo systemctl restart cubesatsim - + +elif [ "$1" = "-p" ]; then + + echo "Real-time output from the serial port from the Pico:" + echo + sleep 2 + + timeout 3 cat /dev/serial0 + +elif [ "$1" = "-v" ]; then + + /home/pi/CubeSatSim/telem + fi # sudo systemctl restart cubesatsim From 0476ebc2bfcbdcf991c4ac6362b74524e6525e99 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 07:42:59 -0500 Subject: [PATCH 51/81] clear serial with -p in config --- config | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/config b/config index 2026b98d..9b3a372d 100755 --- a/config +++ b/config @@ -672,12 +672,15 @@ elif [ "$1" = "-p" ]; then echo "Real-time output from the serial port from the Pico:" echo - sleep 2 +# sleep 2 + timeout 2 cat /dev/serial0 > /dev/null timeout 3 cat /dev/serial0 elif [ "$1" = "-v" ]; then + echo "Real-time output from the INA219 voltage and current sensors:" + echo /home/pi/CubeSatSim/telem fi From 5d8608bb9343e7fbb07a45a4a7402167c6914b55 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 07:57:06 -0500 Subject: [PATCH 52/81] copied with no changes before adding extensions --- .../Payload_BME280_MPU6050_XS_Extended.ino | 560 +++++++++++------- 1 file changed, 361 insertions(+), 199 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index f7b391b4..c50e9257 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -1,49 +1,112 @@ +// code for Pico or Pro Micro or STM32 on the CubeSat Simulator STEM Payload board +// works wih CubeSatSim software v1.3.2 or later + #include #include #include #include #include -#include "Adafruit_SI1145.h" -#include +#include #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; MPU6050 mpu6050(Wire); -Adafruit_SI1145 uv = Adafruit_SI1145(); -Adafruit_LIS3MDL lis3mdl; +TinyGPSPlus gps; long timer = 0; int bmePresent; -int uvPresent; -int magPresent; int RXLED = 17; // The RX LED has a defined Arduino pin int greenLED = 9; int blueLED = 8; -void eeprom_word_write(int addr, int val); -short eeprom_word_read(int addr); +int Sensor1 = 0; +float Sensor2 = 0; +void prom_word_write(int addr, int val); +short prom_word_read(int addr); int first_time = true; int first_read = true; +bool check_for_wifi(); +bool wifi = false; +int led_builtin_pin; +#define PICO_W // define if Pico W board. Otherwise, compilation fail for Pico or runtime fail if compile as Pico W + +#if defined ARDUINO_ARCH_RP2040 +float T2 = 26.3; // Temperature data point 1 +float R2 = 167; // Reading data point 1 +float T1 = 2; // Temperature data point 2 +float R1 = 179; // Reading data point 2 +#endif +#if defined __AVR_ATmega32U4__ float T2 = 26.3; // Temperature data point 1 float R2 = 167; // Reading data point 1 float T1 = 2; // Temperature data point 2 float R1 = 179; // Reading data point 2 +#endif +#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) +float T2 = 25; // Temperature data point 1 +float R2 = 671; // Reading data point 1 +float T1 = 15.5; // Temperature data point 2 +float R1 = 695; // Reading data point 2 +#endif + int sensorValue; float Temp; float rest; -float magRaw = 0; -float magRawAbs = 0; + +char sensor_end_flag[] = "_END_FLAG_"; +char sensor_start_flag[] = "_START_FLAG_"; +bool show_gps = true; // set to false to not see all messages +float flon = 0.0, flat = 0.0, flalt = 0.0; +void get_gps(); void setup() { - Serial.begin(9600); // Serial Monitor for testing +#ifdef ARDUINO_ARCH_RP2040 + Serial1.setRX(1); + delay(100); + Serial1.setTX(0); + delay(100); +#endif + + Serial.begin(115200); // Serial Monitor for testing + + Serial1.begin(115200); // Pi UART faster spd +// Serial1.begin(9600); // Pi UART faster spd + + delay(10000); + + Serial.println("Starting!"); - Serial1.begin(115200); // Pi UART faster speed +#ifdef ARDUINO_ARCH_RP2040 + Serial.println("This code is for the Raspberry Pi Pico hardware."); - Serial.println("Starting!"); + Serial.println("Starting Serial2 for optional GPS on JP12"); +// Serial2.begin(9600); // serial from - some modules need 115200 + // pinMode(0, INPUT); + // pinMode(1, INPUT); + + // set all Pico GPIO connected pins to input + for (int i = 6; i < 22; i++) { + pinMode(i, INPUT); + } + pinMode(26, INPUT); + pinMode(27, INPUT); + pinMode(28, INPUT); + pinMode(15, INPUT_PULLUP); // squelch + +/* + Serial.println("Testing squelch"); + pinMode(22, OUTPUT); + digitalWrite(22, 1); + pinMode(17, OUTPUT); + digitalWrite(17, 1); +*/ + +#endif + blink_setup(); - + blink(500); delay(250); blink(500); @@ -58,82 +121,77 @@ void setup() { if (bme.begin(0x76)) { bmePresent = 1; } else { - Serial.println("BME280 sensor fault"); + Serial.println("Could not find a valid BME280 sensor, check wiring!"); bmePresent = 0; } - - if (! uv.begin()) { - Serial.println("Si1145 sensor fault"); - uvPresent = 0; - } else { - uvPresent = 1; - } - - if (! lis3mdl.begin_I2C()) { - Serial.println("LIS3MDL sensor fault"); - magPresent = 0; - } else { - magPresent = 1; - } - + mpu6050.begin(); - + if (eeprom_word_read(0) == 0xA07) { Serial.println("Reading gyro offsets from EEPROM\n"); - + float xOffset = ((float)eeprom_word_read(1)) / 100.0; float yOffset = ((float)eeprom_word_read(2)) / 100.0; float zOffset = ((float)eeprom_word_read(3)) / 100.0; - + Serial.println(xOffset, DEC); Serial.println(yOffset, DEC); Serial.println(zOffset, DEC); - + mpu6050.setGyroOffsets(xOffset, yOffset, zOffset); } else { +#ifdef ARDUINO_ARCH_RP2040 + Serial.println("Calculating gyro offsets\n"); + mpu6050.calcGyroOffsets(true); +#endif +#ifndef ARDUINO_ARCH_RP2040 Serial.println("Calculating gyro offsets and storing in EEPROM\n"); - mpu6050.calcGyroOffsets(true); - + eeprom_word_write(0, 0xA07); eeprom_word_write(1, (int)(mpu6050.getGyroXoffset() * 100.0) + 0.5); eeprom_word_write(2, (int)(mpu6050.getGyroYoffset() * 100.0) + 0.5); eeprom_word_write(3, (int)(mpu6050.getGyroZoffset() * 100.0) + 0.5); - + Serial.println(eeprom_word_read(0), HEX); Serial.println(((float)eeprom_word_read(1)) / 100.0, DEC); Serial.println(((float)eeprom_word_read(2)) / 100.0, DEC); Serial.println(((float)eeprom_word_read(3)) / 100.0, DEC); +#endif } - pinMode(greenLED, OUTPUT); - pinMode(blueLED, OUTPUT); +/**/ } - + void loop() { - if ((Serial.available() > 0) || first_time == true) { - blink(50); - char result = Serial.read(); - - if (result == 'R') { - Serial.println("OK"); - delay(100); - first_time = true; - setup(); - } - else if (result == 'C') { - Serial.println("Clearing stored gyro offsets in EEPROM\n"); - eeprom_word_write(0, 0x00); - first_time = true; - setup(); + blink(50); + + if (Serial1.available() > 0) { + Serial.print("Received serial data!!!\n"); + delay(10); + while (Serial1.available() > 0) { + char result = Serial1.read(); + Serial.print(result); } - if ((result == '?') || first_time == true) + Serial.println(" "); + } + { +// if (result == '?') { - first_time = false; if (bmePresent) { + Serial1.print(sensor_start_flag); + Serial1.print("OK BME280 "); + Serial1.print(bme.readTemperature()); + Serial1.print(" "); + Serial1.print(bme.readPressure() / 100.0F); + Serial1.print(" "); + Serial1.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); + Serial1.print(" "); + Serial1.print(bme.readHumidity()); + Serial.print("OK BME280 "); Serial.print(bme.readTemperature()); Serial.print(" "); @@ -144,9 +202,26 @@ void loop() { Serial.print(bme.readHumidity()); } else { + Serial1.print(sensor_start_flag); + Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); + Serial.print("OK BME280 0.0 0.0 0.0 0.0"); } mpu6050.update(); + + Serial1.print(" MPU6050 "); + Serial1.print(mpu6050.getGyroX()); + Serial1.print(" "); + Serial1.print(mpu6050.getGyroY()); + Serial1.print(" "); + Serial1.print(mpu6050.getGyroZ()); + + Serial1.print(" "); + Serial1.print(mpu6050.getAccX()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccY()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccZ()); Serial.print(" MPU6050 "); Serial.print(mpu6050.getGyroX()); @@ -154,206 +229,293 @@ void loop() { Serial.print(mpu6050.getGyroY()); Serial.print(" "); Serial.print(mpu6050.getGyroZ()); - - Serial.print(" "); - Serial.print(mpu6050.getAccX()); - Serial.print(" "); - Serial.print(mpu6050.getAccY()); - Serial.print(" "); - Serial.print(mpu6050.getAccZ()); - - sensorValue = analogRead(A3); - Temp = T1 + (sensorValue - R1) * ((T2 - T1) / (R2 - R1)); - - Serial.print(" XS "); - Serial.print(Temp); - Serial.print(" "); - if (uvPresent) { - Serial.print(uv.readVisible()); - Serial.print(" "); - Serial.print(uv.readIR()); - Serial.print(" "); - } else - { - Serial.print("0.0 0.0 "); - } - if (magPresent) { - lis3mdl.read(); - magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); - magAbs = abs(magRaw); - Serial.println(magAbs); - } else - { - Serial.println("0.0"); - } - - float rotation = sqrt(mpu6050.getGyroX() * mpu6050.getGyroX() + mpu6050.getGyroY() * mpu6050.getGyroY() + mpu6050.getGyroZ() * mpu6050.getGyroZ()); - float acceleration = sqrt(mpu6050.getAccX() * mpu6050.getAccX() + mpu6050.getAccY() * mpu6050.getAccY() + mpu6050.getAccZ() * mpu6050.getAccZ()); - - if (acceleration > 1.2) + + Serial.print(" "); + Serial.print(mpu6050.getAccX()); + Serial.print(" "); + Serial.print(mpu6050.getAccY()); + Serial.print(" "); + Serial.print(mpu6050.getAccZ()); + + sensorValue = read_analog(); + +// Serial.println(sensorValue); + Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); + +// Serial1.print(" GPS 0 0 0 TMP "); + + Serial1.print(" GPS "); + Serial1.print(flat,4); + Serial1.print(" "); + Serial1.print(flon,4); + Serial1.print(" "); + Serial1.print(flalt,2); + + Serial1.print(" TMP "); + Serial1.print(Temp); + +// Serial1.print(" "); +// Serial1.println(Sensor2); + + Serial.print(" GPS "); + Serial.print(flat,4); + Serial.print(" "); + Serial.print(flon,4); + Serial.print(" "); + Serial.print(flalt,2); + +// Serial.print(" GPS 0 0 0 TMP "); + Serial.print(" TMP "); + Serial.print(Temp); +// Serial.print(" "); +// Serial.println(Sensor2); + + float rotation = sqrt(mpu6050.getGyroX()*mpu6050.getGyroX() + mpu6050.getGyroY()*mpu6050.getGyroY() + mpu6050.getGyroZ()*mpu6050.getGyroZ()); + float acceleration = sqrt(mpu6050.getAccX()*mpu6050.getAccX() + mpu6050.getAccY()*mpu6050.getAccY() + mpu6050.getAccZ()*mpu6050.getAccZ()); +// Serial.print(rotation); +// Serial.print(" "); +// Serial.println(acceleration); + + if (first_read == true) { + first_read = false; + rest = acceleration; + } + + if (acceleration > 1.2 * rest) led_set(greenLED, HIGH); - else + else led_set(greenLED, LOW); - - if (rotation > 5) + + if (rotation > 5) led_set(blueLED, HIGH); - else + else led_set(blueLED, LOW); } - } - if (Serial1.available() > 0) { +// Serial1.println(" "); + Serial1.println(sensor_end_flag); + Serial.println(" "); + + } + if (Serial.available() > 0) { blink(50); - char result = Serial1.read(); - - if (result == 'R') { + char result = Serial.read(); +// Serial.println(result); +// Serial.println("OK"); +// Serial.println(counter++); +#ifndef ARDUINO_ARCH_RP2040 + if (result == 'R') { Serial1.println("OK"); delay(100); first_read = true; setup(); } - - if (result == '?') - { - if (bmePresent) { - Serial1.print("OK BME280 "); - Serial1.print(bme.readTemperature()); - Serial1.print(" "); - Serial1.print(bme.readPressure() / 100.0F); - Serial1.print(" "); - Serial1.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); - Serial1.print(" "); - Serial1.print(bme.readHumidity()); - } else - { - Serial1.print("OK BME280 0.0 0.0 0.0 0.0"); - } - mpu6050.update(); - - Serial1.print(" MPU6050 "); - Serial1.print(mpu6050.getGyroX()); - Serial1.print(" "); - Serial1.print(mpu6050.getGyroY()); - Serial1.print(" "); - Serial1.print(mpu6050.getGyroZ()); - - Serial1.print(" "); - Serial1.print(mpu6050.getAccX()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccY()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccZ()); - - sensorValue = analogRead(A3); - Temp = T1 + (sensorValue - R1) * ((T2 - T1) / (R2 - R1)); - - Serial1.print(" XS "); - Serial1.print(Temp); - Serial1.print(" "); - if (uvPresent) { - Serial1.print(uv.readVisible()); - Serial1.print(" "); - Serial1.print(uv.readIR()); - Serial1.print(" "); - } else - { - Serial1.print("0.0 0.0 "); - } - if (magPresent) { - lis3mdl.read(); - magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); - magAbs = abs(magRaw); - Serial1.println(magAbs); - } else - { - Serial1.println("0.0"); - } - - - float rotation = sqrt(mpu6050.getGyroX() * mpu6050.getGyroX() + mpu6050.getGyroY() * mpu6050.getGyroY() + mpu6050.getGyroZ() * mpu6050.getGyroZ()); - float acceleration = sqrt(mpu6050.getAccX() * mpu6050.getAccX() + mpu6050.getAccY() * mpu6050.getAccY() + mpu6050.getAccZ() * mpu6050.getAccZ()); - - if (first_read == true) { - first_read = false; - rest = acceleration; - } - - if (acceleration > 1.2 * rest) - led_set(greenLED, HIGH); - else - led_set(greenLED, LOW); - - if (rotation > 5) - led_set(blueLED, HIGH); - else - led_set(blueLED, LOW); - } - } - + else if (result == 'C') { + Serial.println("Clearing stored gyro offsets in EEPROM\n"); + eeprom_word_write(0, 0x00); + first_time = true; + setup(); + } +#endif + } + +#ifdef ARDUINO_ARCH_RP2040 + Serial.print("Squelch: "); + Serial.println(digitalRead(15)); +#endif + +// delay(1000); not needed due to gps 1 second polling delay + get_gps(); + } - + void eeprom_word_write(int addr, int val) { EEPROM.write(addr * 2, lowByte(val)); EEPROM.write(addr * 2 + 1, highByte(val)); } - + short eeprom_word_read(int addr) { return ((EEPROM.read(addr * 2 + 1) << 8) | EEPROM.read(addr * 2)); } - -void blink_setup() + +void blink_setup() { -#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) +#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) // initialize digital pin PB1 as an output. pinMode(PC13, OUTPUT); pinMode(PB9, OUTPUT); pinMode(PB8, OUTPUT); #endif - + #if defined __AVR_ATmega32U4__ pinMode(RXLED, OUTPUT); // Set RX LED as an output // TX LED is set as an output behind the scenes pinMode(greenLED, OUTPUT); - pinMode(blueLED, OUTPUT); + pinMode(blueLED,OUTPUT); +#endif + +#if defined ARDUINO_ARCH_RP2040 + if (check_for_wifi()) { + wifi = true; + led_builtin_pin = LED_BUILTIN; // use default GPIO for Pico W + pinMode(LED_BUILTIN, OUTPUT); +// configure_wifi(); + } else { + led_builtin_pin = 25; // manually set GPIO 25 for Pico board +// pinMode(25, OUTPUT); + pinMode(led_builtin_pin, OUTPUT); + + pinMode(18, OUTPUT); + pinMode(19, OUTPUT); + } #endif -} +} + void blink(int length) { #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) digitalWrite(PC13, LOW); // turn the LED on (HIGH is the voltage level) #endif - + #if defined __AVR_ATmega32U4__ digitalWrite(RXLED, LOW); // set the RX LED ON TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF -#endif - - delay(length); // wait for a lenth of time +#endif +#if defined ARDUINO_ARCH_RP2040 + if (wifi) + digitalWrite(LED_BUILTIN, HIGH); // set the built-in LED ON + else + digitalWrite(led_builtin_pin, HIGH); // set the built-in LED ON +#endif + #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) digitalWrite(PC13, HIGH); // turn the LED off by making the voltage LOW #endif - + #if defined __AVR_ATmega32U4__ digitalWrite(RXLED, HIGH); // set the RX LED OFF TXLED0; //TX LED macro to turn LED ON -#endif -} +#endif +#if defined ARDUINO_ARCH_RP2040 + if (wifi) + digitalWrite(LED_BUILTIN, LOW); // set the built-in LED OFF + else + digitalWrite(led_builtin_pin, LOW); // set the built-in LED OFF + +// delay(length); // wait for a lenth of time +#endif + +} + void led_set(int ledPin, bool state) { #if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) if (ledPin == greenLED) digitalWrite(PB9, state); else if (ledPin == blueLED) - digitalWrite(PB8, state); + digitalWrite(PB8, state); #endif - + #if defined __AVR_ATmega32U4__ - digitalWrite(ledPin, state); + digitalWrite(ledPin, state); +#endif + +#ifdef ARDUINO_ARCH_RP2040 + if (ledPin == greenLED) + digitalWrite(19, state); + else if (ledPin == blueLED) + digitalWrite(18, state); +#endif +} + +int read_analog() +{ + int sensorValue; + #if defined __AVR_ATmega32U4__ + sensorValue = analogRead(A3); +#endif +#if defined(ARDUINO_ARCH_STM32F0) || defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4) || defined(ARDUINO_ARCH_STM32L4) + sensorValue = analogRead(PA7); #endif +#if defined ARDUINO_ARCH_RP2040 + sensorValue = analogRead(28); +#endif + return(sensorValue); +} + +bool check_for_wifi() { + +#ifndef PICO_W + + Serial.println("WiFi disabled in software"); + return(false); // skip check if not Pico W board or compilation will fail + +#endif + + pinMode(29, INPUT); + const float conversion_factor = 3.3f / (1 << 12); + uint16_t result = analogRead(29); +// Serial.printf("ADC3 value: 0x%03x, voltage: %f V\n", result, result * conversion_factor); + + if (result < 0x10) { + Serial.println("\nPico W detected!\n"); + return(true); + } + else { + Serial.println("\nPico detected!\n"); + return(false); + } +} + +void get_gps() { + + bool newData = false; + unsigned long start = millis(); + +// for (unsigned long start = millis(); millis() - start < 1000;) // 5000;) + while ((millis() - start) < 1000) // 5000;) + { + while (Serial2.available()) + { + char c = Serial2.read(); + if (show_gps) + Serial.write(c); // uncomment this line if you want to see the GPS data flowing + if (gps.encode(c)) // Did a new valid sentence come in? + newData = true; + } + } + if (newData) { + Serial.printf("GPS read new data in ms: %d\n", millis() - start); +// float flon = 0.0, flat = 0.0, flalt = 0.0; +// unsigned long age; +// starting = millis(); +// gps.f_get_position(&flat, &flon, &age); + + Serial.print(F("Location: ")); + if (gps.location.isValid()) + { + Serial.print(gps.location.lat(), 6); + Serial.print(F(",")); + Serial.print(gps.location.lng(), 6); + + flat = gps.location.lat(); + flon = gps.location.lng(); + flalt = gps.altitude.meters(); + } + else + { + Serial.print(F("INVALID")); + } + Serial.print("\r\n"); + + } else +// Serial.printf("GPS read no new data: %d\n", millis() - start); + ; + } From 2e26df585f8531dca0b5d3dacfcdcb7ccd06abd1 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:06:14 -0500 Subject: [PATCH 53/81] Create payload_extension.c --- .../payload_extension.c | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c new file mode 100644 index 00000000..791daec5 --- /dev/null +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c @@ -0,0 +1,58 @@ +##include "Adafruit_SI1145.h" +#include + +Adafruit_SI1145 uv = Adafruit_SI1145(); +Adafruit_LIS3MDL lis3mdl; + +int uvPresent; +int magPresent; + +float magRaw = 0; +float magRawAbs = 0; + +void payload_setup() { + + if (! uv.begin()) { + Serial.println("Si1145 sensor fault"); + uvPresent = 0; + } else { + uvPresent = 1; + } + + if (! lis3mdl.begin_I2C()) { + Serial.println("LIS3MDL sensor fault"); + magPresent = 0; + } else { + magPresent = 1; + } +} + +void payload_loop() { + + if (uvPresent) { + Serial1.print(uv.readVisible()); + Serial1.print(" "); + Serial1.print(uv.readIR()); + Serial1.print(" "); + + Serial.print(uv.readVisible()); + Serial.print(" "); + Serial.print(uv.readIR()); + Serial.print(" "); + } else + { + Serial1.print("0.0 0.0 "); + Serial.print("0.0 0.0 "); + } + if (magPresent) { + lis3mdl.read(); + magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); + magAbs = abs(magRaw); + Serial1.print(magAbs); + Serial.print(magAbs); + } else + { + Serial1.print("0.0"); + Serial.print("0.0"); + } +} From d8b12c82614541af2469576c479759e2d652143d Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:07:58 -0500 Subject: [PATCH 54/81] add payload_setup and payload_loop --- .../Payload_BME280_MPU6050_XS_Extended.ino | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index c50e9257..4ae04760 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -59,6 +59,9 @@ bool show_gps = true; // set to false to not see all messages float flon = 0.0, flat = 0.0, flalt = 0.0; void get_gps(); +void payload_setup(); +void payload_loop() + void setup() { #ifdef ARDUINO_ARCH_RP2040 @@ -162,7 +165,7 @@ void setup() { Serial.println(((float)eeprom_word_read(3)) / 100.0, DEC); #endif } -/**/ + payload_setup(); } void loop() { @@ -292,6 +295,8 @@ void loop() { led_set(blueLED, LOW); } + payload_loop(); + // Serial1.println(" "); Serial1.println(sensor_end_flag); Serial.println(" "); From 771f4b527450ca5065f8e7c9143cfdcd655e453c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:09:34 -0500 Subject: [PATCH 55/81] typo --- .../Payload_BME280_MPU6050_XS_Extended/payload_extension.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c index 791daec5..e473dbf2 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c @@ -1,4 +1,4 @@ -##include "Adafruit_SI1145.h" +#include "Adafruit_SI1145.h" #include Adafruit_SI1145 uv = Adafruit_SI1145(); From 1a3584c9282deed1dda873a56f08945201291db9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:14:56 -0500 Subject: [PATCH 56/81] try adding includes here --- .../Payload_BME280_MPU6050_XS_Extended.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index 4ae04760..c6a35371 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -7,6 +7,8 @@ #include #include #include +#include "Adafruit_SI1145.h" +#include #define SEALEVELPRESSURE_HPA (1013.25) From 2a21f6feacb94b8fe12f0d70d46c994ea8e5fd97 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:16:17 -0500 Subject: [PATCH 57/81] move declarations here too --- .../Payload_BME280_MPU6050_XS_Extended.ino | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index c6a35371..4d873b33 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -9,6 +9,8 @@ #include #include "Adafruit_SI1145.h" #include +Adafruit_SI1145 uv = Adafruit_SI1145(); +Adafruit_LIS3MDL lis3mdl; #define SEALEVELPRESSURE_HPA (1013.25) From 261ad2f32a2c3f917ff8ca4395c6c0cad94e39ad Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:18:00 -0500 Subject: [PATCH 58/81] remove declarations --- .../Payload_BME280_MPU6050_XS_Extended/payload_extension.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c index e473dbf2..a2099a32 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c @@ -1,8 +1,8 @@ #include "Adafruit_SI1145.h" #include -Adafruit_SI1145 uv = Adafruit_SI1145(); -Adafruit_LIS3MDL lis3mdl; +// Adafruit_SI1145 uv = Adafruit_SI1145(); +//Adafruit_LIS3MDL lis3mdl; int uvPresent; int magPresent; From c059c35a5f949e41d3a10c443e9244bf4c7470f6 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:20:22 -0500 Subject: [PATCH 59/81] Rename payload_extension.c to payload_extension.cpp --- .../{payload_extension.c => payload_extension.cpp} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename stempayload/Payload_BME280_MPU6050_XS_Extended/{payload_extension.c => payload_extension.cpp} (100%) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp similarity index 100% rename from stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.c rename to stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp From dc0033419e3d2d124320d589b284cc4d44a29ee2 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:26:11 -0500 Subject: [PATCH 60/81] define as extern --- .../Payload_BME280_MPU6050_XS_Extended.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index 4d873b33..d686e08d 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -63,8 +63,8 @@ bool show_gps = true; // set to false to not see all messages float flon = 0.0, flat = 0.0, flalt = 0.0; void get_gps(); -void payload_setup(); -void payload_loop() +extern void payload_setup(); +extern void payload_loop() void setup() { From 0baec01676ce2a416e113cb11a3f56d2fc4a881e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:30:40 -0500 Subject: [PATCH 61/81] adding back declarations --- .../Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp index a2099a32..e473dbf2 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp @@ -1,8 +1,8 @@ #include "Adafruit_SI1145.h" #include -// Adafruit_SI1145 uv = Adafruit_SI1145(); -//Adafruit_LIS3MDL lis3mdl; +Adafruit_SI1145 uv = Adafruit_SI1145(); +Adafruit_LIS3MDL lis3mdl; int uvPresent; int magPresent; From d8d6b59d94edb55974aba7efce7933c1b98e82b5 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:30:54 -0500 Subject: [PATCH 62/81] removing declarations --- .../Payload_BME280_MPU6050_XS_Extended.ino | 2 -- 1 file changed, 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index d686e08d..05f8b26e 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -9,8 +9,6 @@ #include #include "Adafruit_SI1145.h" #include -Adafruit_SI1145 uv = Adafruit_SI1145(); -Adafruit_LIS3MDL lis3mdl; #define SEALEVELPRESSURE_HPA (1013.25) From ed99fc44a14f29766700c0f72e6d347a75e0b828 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:38:07 -0500 Subject: [PATCH 63/81] fixed variable name magRawAbs --- .../payload_extension.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp index e473dbf2..1dca9098 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp @@ -47,9 +47,9 @@ void payload_loop() { if (magPresent) { lis3mdl.read(); magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); - magAbs = abs(magRaw); - Serial1.print(magAbs); - Serial.print(magAbs); + magRawAbs = abs(magRaw); + Serial1.print(magRawAbs); + Serial.print(magRawAbs); } else { Serial1.print("0.0"); From de8285f3337aa17a2e5b1fbaa11f5ace8d934e7b Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:39:00 -0500 Subject: [PATCH 64/81] missing ; --- .../Payload_BME280_MPU6050_XS_Extended.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index 05f8b26e..5ab61183 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -62,7 +62,7 @@ float flon = 0.0, flat = 0.0, flalt = 0.0; void get_gps(); extern void payload_setup(); -extern void payload_loop() +extern void payload_loop(); void setup() { From 062cf1368cd9fddda8cdf38fbf1a51b568b51e88 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:39:58 -0500 Subject: [PATCH 65/81] remove extension includes --- .../Payload_BME280_MPU6050_XS_Extended.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index 5ab61183..ee7789b3 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -7,8 +7,8 @@ #include #include #include -#include "Adafruit_SI1145.h" -#include +//#include "Adafruit_SI1145.h" +//#include #define SEALEVELPRESSURE_HPA (1013.25) From 825d9d1777252c0cdc232051be49f3413ed99a20 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:41:17 -0500 Subject: [PATCH 66/81] cleanup --- .../Payload_BME280_MPU6050_XS_Extended.ino | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index ee7789b3..8ed20925 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -1,5 +1,6 @@ // code for Pico or Pro Micro or STM32 on the CubeSat Simulator STEM Payload board // works wih CubeSatSim software v1.3.2 or later +// extra sensors can be added in payload_extension.cpp #include #include @@ -7,8 +8,6 @@ #include #include #include -//#include "Adafruit_SI1145.h" -//#include #define SEALEVELPRESSURE_HPA (1013.25) From a8cfcb9bebf811129318b7e73d47059dca991758 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 08:48:21 -0500 Subject: [PATCH 67/81] cleanup --- .../payload_extension.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp index 1dca9098..9d0daf82 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp @@ -1,6 +1,11 @@ +// Use this template for adding additional sensors + + +// put your library includes here #include "Adafruit_SI1145.h" #include +// put your globals here Adafruit_SI1145 uv = Adafruit_SI1145(); Adafruit_LIS3MDL lis3mdl; @@ -10,6 +15,7 @@ int magPresent; float magRaw = 0; float magRawAbs = 0; +// put your setup code here void payload_setup() { if (! uv.begin()) { @@ -27,15 +33,17 @@ void payload_setup() { } } +// put your loop code here +// Very Important: only use print, not println!! void payload_loop() { if (uvPresent) { - Serial1.print(uv.readVisible()); + Serial1.print(uv.readVisible()); // Serial1 sends the sensor data to the Pi Zero for transmission Serial1.print(" "); Serial1.print(uv.readIR()); Serial1.print(" "); - Serial.print(uv.readVisible()); + Serial.print(uv.readVisible()); // Serial sends the sensor data to the Serial Monitor for debugging Serial.print(" "); Serial.print(uv.readIR()); Serial.print(" "); From 199a443bd37f344066031663465affbeb567b48c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 09:16:33 -0500 Subject: [PATCH 68/81] added sensor names --- .../payload_extension.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp index 9d0daf82..440b9cdb 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp @@ -38,25 +38,31 @@ void payload_setup() { void payload_loop() { if (uvPresent) { + Serial1.print(" SI "); // chose a 2-3 letter hint for your sensor Serial1.print(uv.readVisible()); // Serial1 sends the sensor data to the Pi Zero for transmission Serial1.print(" "); Serial1.print(uv.readIR()); Serial1.print(" "); + Serial.print(" SI "); Serial.print(uv.readVisible()); // Serial sends the sensor data to the Serial Monitor for debugging Serial.print(" "); Serial.print(uv.readIR()); Serial.print(" "); } else { - Serial1.print("0.0 0.0 "); - Serial.print("0.0 0.0 "); + Serial1.print("SI 0.0 0.0 "); + Serial.print("SI 0.0 0.0 "); } if (magPresent) { lis3mdl.read(); magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); magRawAbs = abs(magRaw); + + Serial1.print(" LI "); Serial1.print(magRawAbs); + + Serial1.print(" LI "); Serial.print(magRawAbs); } else { From 65bae01b1c52077d5bb51e97f78af63982a42b5e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 09:20:39 -0500 Subject: [PATCH 69/81] added prints in setup --- .../Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp index 440b9cdb..36f4deb8 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp @@ -18,6 +18,8 @@ float magRawAbs = 0; // put your setup code here void payload_setup() { + Serial.println("Starting Si1145 sensor!"); + if (! uv.begin()) { Serial.println("Si1145 sensor fault"); uvPresent = 0; @@ -25,6 +27,8 @@ void payload_setup() { uvPresent = 1; } + Serial.println("Starting LIS3MDL sensor!"); + if (! lis3mdl.begin_I2C()) { Serial.println("LIS3MDL sensor fault"); magPresent = 0; From 16d562e0b1b7b91d1118ed04fcc98f4d7839f356 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 09:27:35 -0500 Subject: [PATCH 70/81] fixed spacing --- .../payload_extension.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp index 36f4deb8..4509f192 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp @@ -46,17 +46,17 @@ void payload_loop() { Serial1.print(uv.readVisible()); // Serial1 sends the sensor data to the Pi Zero for transmission Serial1.print(" "); Serial1.print(uv.readIR()); - Serial1.print(" "); +// Serial1.print(" "); Serial.print(" SI "); Serial.print(uv.readVisible()); // Serial sends the sensor data to the Serial Monitor for debugging Serial.print(" "); Serial.print(uv.readIR()); - Serial.print(" "); +// Serial.print(" "); } else { - Serial1.print("SI 0.0 0.0 "); - Serial.print("SI 0.0 0.0 "); + Serial1.print(" SI 0.0 0.0 "); + Serial.print(" SI 0.0 0.0 "); } if (magPresent) { lis3mdl.read(); @@ -70,7 +70,7 @@ void payload_loop() { Serial.print(magRawAbs); } else { - Serial1.print("0.0"); + Serial1.print(" LI 0.0"); Serial.print("0.0"); } } From 46a8d4d981d8a5ac9d79c816ead729c93453e1ea Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 09:30:35 -0500 Subject: [PATCH 71/81] fixed label --- .../Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp index 4509f192..a89a3c62 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp @@ -71,6 +71,6 @@ void payload_loop() { } else { Serial1.print(" LI 0.0"); - Serial.print("0.0"); + Serial.print(" LI 0.0"); } } From 45fd6742d0da3d4865d4b3b420d3c6fa7f6ee1ef Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 09:33:16 -0500 Subject: [PATCH 72/81] removed extra spaces --- .../Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp index a89a3c62..c24f509b 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp @@ -55,8 +55,8 @@ void payload_loop() { // Serial.print(" "); } else { - Serial1.print(" SI 0.0 0.0 "); - Serial.print(" SI 0.0 0.0 "); + Serial1.print(" SI 0.0 0.0"); + Serial.print(" SI 0.0 0.0"); } if (magPresent) { lis3mdl.read(); From c0b5a017599626924b16806998dadd5fde8ffde8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Fri, 5 Jan 2024 09:51:57 -0500 Subject: [PATCH 73/81] cleanup --- .../payload_extension.cpp | 61 +++++++++---------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp index c24f509b..b88dd680 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/payload_extension.cpp @@ -1,6 +1,5 @@ // Use this template for adding additional sensors - // put your library includes here #include "Adafruit_SI1145.h" #include @@ -41,36 +40,32 @@ void payload_setup() { // Very Important: only use print, not println!! void payload_loop() { - if (uvPresent) { - Serial1.print(" SI "); // chose a 2-3 letter hint for your sensor - Serial1.print(uv.readVisible()); // Serial1 sends the sensor data to the Pi Zero for transmission - Serial1.print(" "); - Serial1.print(uv.readIR()); -// Serial1.print(" "); - - Serial.print(" SI "); - Serial.print(uv.readVisible()); // Serial sends the sensor data to the Serial Monitor for debugging - Serial.print(" "); - Serial.print(uv.readIR()); -// Serial.print(" "); - } else - { - Serial1.print(" SI 0.0 0.0"); - Serial.print(" SI 0.0 0.0"); - } - if (magPresent) { - lis3mdl.read(); - magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); - magRawAbs = abs(magRaw); - - Serial1.print(" LI "); - Serial1.print(magRawAbs); - - Serial1.print(" LI "); - Serial.print(magRawAbs); - } else - { - Serial1.print(" LI 0.0"); - Serial.print(" LI 0.0"); - } + if (uvPresent) { + Serial1.print(" SI "); // chose a 2-3 letter hint for your sensor + Serial1.print(uv.readVisible()); // Serial1 sends the sensor data to the Pi Zero for transmission + Serial1.print(" "); + Serial1.print(uv.readIR()); + + Serial.print(" SI "); + Serial.print(uv.readVisible()); // Serial sends the sensor data to the Serial Monitor for debugging + Serial.print(" "); + Serial.print(uv.readIR()); + } else { + Serial1.print(" SI 0.0 0.0"); + Serial.print(" SI 0.0 0.0"); + } + if (magPresent) { + lis3mdl.read(); + magRaw = (((lis3mdl.x + lis3mdl.y + lis3mdl.z) / 3)); + magRawAbs = abs(magRaw); + + Serial1.print(" LI "); + Serial1.print(magRawAbs); + + Serial1.print(" LI "); + Serial.print(magRawAbs); + } else { + Serial1.print(" LI 0.0"); + Serial.print(" LI 0.0"); + } } From a7a58b757ac61c8242ca5117be4b389e70f882a8 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 6 Jan 2024 03:06:00 -0500 Subject: [PATCH 74/81] Same as extended for comparison --- .../Payload_BME280_MPU6050_XS.ino | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index c50e9257..8ed20925 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -1,5 +1,6 @@ // code for Pico or Pro Micro or STM32 on the CubeSat Simulator STEM Payload board // works wih CubeSatSim software v1.3.2 or later +// extra sensors can be added in payload_extension.cpp #include #include @@ -59,6 +60,9 @@ bool show_gps = true; // set to false to not see all messages float flon = 0.0, flat = 0.0, flalt = 0.0; void get_gps(); +extern void payload_setup(); +extern void payload_loop(); + void setup() { #ifdef ARDUINO_ARCH_RP2040 @@ -162,7 +166,7 @@ void setup() { Serial.println(((float)eeprom_word_read(3)) / 100.0, DEC); #endif } -/**/ + payload_setup(); } void loop() { @@ -292,6 +296,8 @@ void loop() { led_set(blueLED, LOW); } + payload_loop(); + // Serial1.println(" "); Serial1.println(sensor_end_flag); Serial.println(" "); From 5e627339b582e84d78afd43aff4a3a69e5fd1bf9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 6 Jan 2024 03:06:54 -0500 Subject: [PATCH 75/81] comment out write to serial --- main.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/main.c b/main.c index b716d4d3..16af4218 100644 --- a/main.c +++ b/main.c @@ -612,8 +612,6 @@ int main(int argc, char * argv[]) { fprintf(stderr, "Python read Result: %s\n", cmdbuffer); // serialPuts(uart_fd, cmdbuffer); // write INA data to Pico over serial - char test[] = "Hello\n"; - serialPuts(uart_fd, test); // write data to Pico over serial const char space[2] = " "; token = strtok(cmdbuffer, space); From 190c60ca9931ba09617ec4f83347c8033d9f637c Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 6 Jan 2024 03:20:31 -0500 Subject: [PATCH 76/81] Create payload_extension.cpp with blank sensor info --- .../payload_extension.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 stempayload/Payload_BME280_MPU6050_XS/payload_extension.cpp diff --git a/stempayload/Payload_BME280_MPU6050_XS/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS/payload_extension.cpp new file mode 100644 index 00000000..61db228a --- /dev/null +++ b/stempayload/Payload_BME280_MPU6050_XS/payload_extension.cpp @@ -0,0 +1,19 @@ +// Use this template for adding additional sensors + +// put your library includes here +#include "Arduino.h" + +// put your globals here + +// put your setup code here +void payload_setup() { + + Serial.println("Starting new sensor!"); + +} + +// put your loop code here +// Very Important: only use print, not println!! +void payload_loop() { + +} From bad0b19503518620b5db4fa5045df87e5cce4215 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 6 Jan 2024 03:37:34 -0500 Subject: [PATCH 77/81] Update payload_extension.cpp cleanup --- stempayload/Payload_BME280_MPU6050_XS/payload_extension.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/stempayload/Payload_BME280_MPU6050_XS/payload_extension.cpp b/stempayload/Payload_BME280_MPU6050_XS/payload_extension.cpp index 61db228a..61725282 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/payload_extension.cpp +++ b/stempayload/Payload_BME280_MPU6050_XS/payload_extension.cpp @@ -1,4 +1,5 @@ // Use this template for adding additional sensors +// see Payload_BME280_MPU6050_XS_Extended for an example // put your library includes here #include "Arduino.h" From fa8cc6ed5400852be6489543723e6a9a46d12d2e Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 6 Jan 2024 03:54:05 -0500 Subject: [PATCH 78/81] Update Payload_BME280_MPU6050_XS.ino cleanup --- .../Payload_BME280_MPU6050_XS.ino | 48 ++++++++----------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino index 8ed20925..7b5ed4ae 100644 --- a/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino +++ b/stempayload/Payload_BME280_MPU6050_XS/Payload_BME280_MPU6050_XS.ino @@ -22,8 +22,8 @@ int greenLED = 9; int blueLED = 8; int Sensor1 = 0; float Sensor2 = 0; -void prom_word_write(int addr, int val); -short prom_word_read(int addr); +void ee_prom_word_write(int addr, int val); +short ee_prom_word_read(int addr); int first_time = true; int first_read = true; bool check_for_wifi(); @@ -60,8 +60,8 @@ bool show_gps = true; // set to false to not see all messages float flon = 0.0, flat = 0.0, flalt = 0.0; void get_gps(); -extern void payload_setup(); -extern void payload_loop(); +extern void payload_setup(); // sensor extension setup function defined in payload_extension.cpp +extern void payload_loop(); // sensor extension read function defined in payload_extension.cpp void setup() { @@ -97,15 +97,7 @@ void setup() { pinMode(26, INPUT); pinMode(27, INPUT); pinMode(28, INPUT); - pinMode(15, INPUT_PULLUP); // squelch - -/* - Serial.println("Testing squelch"); - pinMode(22, OUTPUT); - digitalWrite(22, 1); - pinMode(17, OUTPUT); - digitalWrite(17, 1); -*/ + pinMode(15, INPUT_PULLUP); // squelch #endif @@ -166,7 +158,7 @@ void setup() { Serial.println(((float)eeprom_word_read(3)) / 100.0, DEC); #endif } - payload_setup(); + payload_setup(); // sensor extension setup function defined in payload_extension.cpp } void loop() { @@ -220,12 +212,12 @@ void loop() { Serial1.print(" "); Serial1.print(mpu6050.getGyroZ()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccX()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccY()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccZ()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccX()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccY()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccZ()); Serial.print(" MPU6050 "); Serial.print(mpu6050.getGyroX()); @@ -234,14 +226,14 @@ void loop() { Serial.print(" "); Serial.print(mpu6050.getGyroZ()); - Serial.print(" "); - Serial.print(mpu6050.getAccX()); - Serial.print(" "); - Serial.print(mpu6050.getAccY()); - Serial.print(" "); - Serial.print(mpu6050.getAccZ()); + Serial.print(" "); + Serial.print(mpu6050.getAccX()); + Serial.print(" "); + Serial.print(mpu6050.getAccY()); + Serial.print(" "); + Serial.print(mpu6050.getAccZ()); - sensorValue = read_analog(); + sensorValue = read_analog(); // Serial.println(sensorValue); Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); @@ -296,7 +288,7 @@ void loop() { led_set(blueLED, LOW); } - payload_loop(); + payload_loop(); // sensor extension read function defined in payload_extension.cpp // Serial1.println(" "); Serial1.println(sensor_end_flag); From ca023dfacf87117b03b3426d24e7e387add0c5e9 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 6 Jan 2024 03:58:03 -0500 Subject: [PATCH 79/81] Update Payload_BME280_MPU6050_XS_Extended.ino cleanup --- .../Payload_BME280_MPU6050_XS_Extended.ino | 48 ++++++++----------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino index 8ed20925..7825f2d1 100644 --- a/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino +++ b/stempayload/Payload_BME280_MPU6050_XS_Extended/Payload_BME280_MPU6050_XS_Extended.ino @@ -22,8 +22,8 @@ int greenLED = 9; int blueLED = 8; int Sensor1 = 0; float Sensor2 = 0; -void prom_word_write(int addr, int val); -short prom_word_read(int addr); +void ee_prom_word_write(int addr, int val); +short ee_prom_word_read(int addr); int first_time = true; int first_read = true; bool check_for_wifi(); @@ -60,8 +60,8 @@ bool show_gps = true; // set to false to not see all messages float flon = 0.0, flat = 0.0, flalt = 0.0; void get_gps(); -extern void payload_setup(); -extern void payload_loop(); +extern void payload_setup(); // sensor extension setup function defined in payload_extension.cpp +extern void payload_loop(); // sensor extension read function defined in payload_extension.cpp void setup() { @@ -97,19 +97,11 @@ void setup() { pinMode(26, INPUT); pinMode(27, INPUT); pinMode(28, INPUT); - pinMode(15, INPUT_PULLUP); // squelch - -/* - Serial.println("Testing squelch"); - pinMode(22, OUTPUT); - digitalWrite(22, 1); - pinMode(17, OUTPUT); - digitalWrite(17, 1); -*/ + pinMode(15, INPUT_PULLUP); // squelch #endif - blink_setup(); + blink_setup(); // sensor extension setup function defined in payload_extension.cpp blink(500); delay(250); @@ -220,12 +212,12 @@ void loop() { Serial1.print(" "); Serial1.print(mpu6050.getGyroZ()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccX()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccY()); - Serial1.print(" "); - Serial1.print(mpu6050.getAccZ()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccX()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccY()); + Serial1.print(" "); + Serial1.print(mpu6050.getAccZ()); Serial.print(" MPU6050 "); Serial.print(mpu6050.getGyroX()); @@ -234,14 +226,14 @@ void loop() { Serial.print(" "); Serial.print(mpu6050.getGyroZ()); - Serial.print(" "); - Serial.print(mpu6050.getAccX()); - Serial.print(" "); - Serial.print(mpu6050.getAccY()); - Serial.print(" "); - Serial.print(mpu6050.getAccZ()); + Serial.print(" "); + Serial.print(mpu6050.getAccX()); + Serial.print(" "); + Serial.print(mpu6050.getAccY()); + Serial.print(" "); + Serial.print(mpu6050.getAccZ()); - sensorValue = read_analog(); + sensorValue = read_analog(); // Serial.println(sensorValue); Temp = T1 + (sensorValue - R1) *((T2 - T1)/(R2 - R1)); @@ -296,7 +288,7 @@ void loop() { led_set(blueLED, LOW); } - payload_loop(); + payload_loop(); // sensor extension read function defined in payload_extension.cpp // Serial1.println(" "); Serial1.println(sensor_end_flag); From d93c29b53a481fd6fa5bafed6126e9c6e8e3bb34 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 6 Jan 2024 04:09:49 -0500 Subject: [PATCH 80/81] Update rpitx.py always do CW ID in rpitx --- rpitx.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/rpitx.py b/rpitx.py index fd6d9795..6246033f 100644 --- a/rpitx.py +++ b/rpitx.py @@ -341,15 +341,16 @@ if __name__ == "__main__": if (command_tx == True): # battery_saver_mode output(txLed, txLedOn) - if (txc): - output(pd, 1) - output (ptt, 0) - sleep(0.1) - system("aplay -D hw:CARD=Headphones,DEV=0 /home/pi/CubeSatSim/morse.wav") - sleep(0.1) - output (ptt, 1) - output(pd, 0) - else: +# if (txc): +# output(pd, 1) +# output (ptt, 0) +# sleep(0.1) +# system("aplay -D hw:CARD=Headphones,DEV=0 /home/pi/CubeSatSim/morse.wav") +# sleep(0.1) +# output (ptt, 1) +# output(pd, 0) +# else: + if (True): if (debug_mode == 1): # system("echo 'hi hi de " + callsign + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f 434.9e3") system("echo 'hi hi de " + callsign + "' > id.txt && gen_packets -M 20 /home/pi/CubeSatSim/id.txt -o /home/pi/CubeSatSim/morse.wav -r 48000 > /dev/null 2>&1 && cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3") From 1c916bee0e2d2755ffe53269b3d65a8fc5da0987 Mon Sep 17 00:00:00 2001 From: Alan Johnston Date: Sat, 6 Jan 2024 04:13:37 -0500 Subject: [PATCH 81/81] Update main.c flush serial before reading payload data --- main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main.c b/main.c index 16af4218..dba9612c 100644 --- a/main.c +++ b/main.c @@ -2142,13 +2142,15 @@ void loop() { */ int get_payload_serial(int debug_camera) { - + index1 = 0; flag_count = 0; start_flag_detected = FALSE; start_flag_complete = FALSE; end_flag_detected = FALSE; jpeg_start = 0; + + serialFlush (uart_fd); // flush serial buffer so latest payload is read // #ifdef GET_IMAGE_DEBUG if (debug_camera)