Merge pull request #117 from alanbjohnston/master-payload-cleanup
Master payload cleanuppull/121/head
commit
36fd433620
@ -1,45 +0,0 @@
|
||||
/* Pro Micro Test Code
|
||||
by: Nathan Seidle
|
||||
modified by: Jim Lindblom
|
||||
SparkFun Electronics
|
||||
date: September 16, 2013
|
||||
license: Public Domain - please use this code however you'd like.
|
||||
It's provided as a learning tool.
|
||||
|
||||
This code is provided to show how to control the SparkFun
|
||||
ProMicro's TX and RX LEDs within a sketch. It also serves
|
||||
to explain the difference between Serial.print() and
|
||||
Serial1.print().
|
||||
*/
|
||||
|
||||
int RXLED = 17; // The RX LED has a defined Arduino pin
|
||||
// Note: The TX LED was not so lucky, we'll need to use pre-defined
|
||||
// macros (TXLED1, TXLED0) to control that.
|
||||
// (We could use the same macros for the RX LED too -- RXLED1,
|
||||
// and RXLED0.)
|
||||
|
||||
void setup()
|
||||
{
|
||||
pinMode(RXLED, OUTPUT); // Set RX LED as an output
|
||||
// TX LED is set as an output behind the scenes
|
||||
|
||||
Serial.begin(9600); //This pipes to the serial monitor
|
||||
Serial.println("Initialize Serial Monitor");
|
||||
|
||||
Serial1.begin(9600); //This is the UART, pipes to sensors attached to board
|
||||
Serial1.println("Initialize Serial Hardware UART Pins");
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
Serial.println("Hello world!"); // Print "Hello World" to the Serial Monitor
|
||||
Serial1.println("Hello! Can anybody hear me?"); // Print "Hello!" over hardware UART
|
||||
|
||||
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
|
||||
delay(1000); // wait for a second
|
||||
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED OFF
|
||||
TXLED1; //TX LED macro to turn LED ON
|
||||
delay(1000); // wait for a second
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
/*
|
||||
Blink
|
||||
Turns on an LED on for one second, then off for one second, repeatedly.
|
||||
|
||||
Most Arduinos have an on-board LED you can control. On the Uno and
|
||||
Leonardo, it is attached to digital pin 13. If you're unsure what
|
||||
pin the on-board LED is connected to on your Arduino model, check
|
||||
the documentation at http://arduino.cc
|
||||
|
||||
This example code is in the public domain.
|
||||
|
||||
modified 8 May 2014
|
||||
by Scott Fitzgerald
|
||||
|
||||
Modified by Roger Clark. www.rogerclark.net for Maple mini 25th April 2015 , where the LED is on PC13
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// the setup function runs once when you press reset or power the board
|
||||
void setup() {
|
||||
// initialize digital pin PB1 as an output.
|
||||
pinMode(PC13, OUTPUT);
|
||||
}
|
||||
|
||||
// the loop function runs over and over again forever
|
||||
void loop() {
|
||||
digitalWrite(PC13, HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
delay(1000); // wait for a second
|
||||
digitalWrite(PC13, LOW); // turn the LED off by making the voltage LOW
|
||||
delay(1000); // wait for a second
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
//#define TESTING // Uncomment to test code on Serial Monitor
|
||||
|
||||
int counter = 0;
|
||||
int RXLED = 17; // The RX LED has a defined Arduino pin
|
||||
|
||||
void setup() {
|
||||
|
||||
#ifdef TESTING
|
||||
Serial.begin(9600);
|
||||
#endif
|
||||
|
||||
Serial1.begin(9600);
|
||||
|
||||
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
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED ON
|
||||
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
#ifdef TESTING // ? is sent over Serial Monitor for testing
|
||||
if (Serial.available() > 0) {
|
||||
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
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED ON
|
||||
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
char result = Serial.read();
|
||||
// Serial1.println(result);
|
||||
Serial.println("OK");
|
||||
// Serial1.println(counter++);
|
||||
}
|
||||
#else // ? is sent by Pi UART
|
||||
if (Serial1.available() > 0) {
|
||||
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
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED ON
|
||||
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
char result = Serial1.read();
|
||||
// Serial1.println(result);
|
||||
Serial1.println("OK");
|
||||
// Serial1.println(counter++);
|
||||
}
|
||||
#endif
|
||||
|
||||
delay(100);
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
// code for STM32F104C on the CubeSat Simulator STEM Payload board
|
||||
// answers "OK" on the serial port when queried by the Pi
|
||||
|
||||
int counter = 0;
|
||||
|
||||
void setup() {
|
||||
Serial1.begin(9600);
|
||||
pinMode(PC13, OUTPUT);
|
||||
digitalWrite(PC13, LOW); // turn the LED on
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(PC13, HIGH); // turn the LED off
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
if (Serial1.available() > 0) {
|
||||
digitalWrite(PC13, LOW); // turn the LED on
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(PC13, HIGH); // turn the LED off
|
||||
char result = Serial1.read();
|
||||
// Serial1.println(result);
|
||||
Serial1.println("OK");
|
||||
// Serial1.println(counter++);
|
||||
}
|
||||
|
||||
delay(100);
|
||||
}
|
||||
@ -1,256 +0,0 @@
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_Sensor.h>
|
||||
#include <Adafruit_BME280.h>
|
||||
#include <MPU6050_tockn.h>
|
||||
#include <EEPROM.h>
|
||||
|
||||
#define SEALEVELPRESSURE_HPA (1013.25)
|
||||
|
||||
//#define TESTING // Define to test on Serial Monitor
|
||||
|
||||
Adafruit_BME280 bme;
|
||||
MPU6050 mpu6050(Wire);
|
||||
|
||||
int counter = 0;
|
||||
int RXLED = 17; // The RX LED has a defined Arduino pin
|
||||
long timer = 0;
|
||||
int bmePresent;
|
||||
int greenLED = 9;
|
||||
int blueLED = 8;
|
||||
int Sensor1 = 0;
|
||||
int Sensor2 = 0;
|
||||
float Sensor3 = 0;
|
||||
void eeprom_word_write(int addr, int val);
|
||||
short eeprom_word_read(int addr);
|
||||
|
||||
void setup() {
|
||||
|
||||
Serial.begin(9600); // Serial Monitor for testing
|
||||
|
||||
Serial1.begin(9600); // Pi UART
|
||||
|
||||
Serial.println("Starting!");
|
||||
|
||||
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
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED ON
|
||||
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
|
||||
if (bme.begin(0x76)) {
|
||||
bmePresent = 1;
|
||||
} else {
|
||||
Serial.println("Could not find a valid BME280 sensor, check wiring!");
|
||||
bmePresent = 0;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
digitalWrite(greenLED, HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
digitalWrite(blueLED, HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
delay(100); // wait for a second
|
||||
digitalWrite(greenLED, LOW); // turn the LED off by making the voltage LOW
|
||||
digitalWrite(blueLED, LOW); // turn the LED on (HIGH is the voltage level)
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
#ifdef TESTING
|
||||
if (Serial.available() > 0) {
|
||||
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
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED ON
|
||||
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
char result = Serial.read();
|
||||
// Serial.println(result);
|
||||
|
||||
if (result == 'R') {
|
||||
Serial.println("OK");
|
||||
delay(500);
|
||||
setup();
|
||||
}
|
||||
if (result == '?')
|
||||
{
|
||||
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());
|
||||
|
||||
Serial.print(" XS ");
|
||||
Serial.print(Sensor1);
|
||||
Serial.print(" ");
|
||||
Serial.print(Sensor2);
|
||||
Serial.print(" ");
|
||||
Serial.println(Sensor3);
|
||||
|
||||
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)
|
||||
digitalWrite(greenLED, HIGH);
|
||||
else
|
||||
digitalWrite(greenLED, LOW);
|
||||
|
||||
if (rotation > 5)
|
||||
digitalWrite(blueLED, HIGH);
|
||||
else
|
||||
digitalWrite(blueLED, LOW);
|
||||
|
||||
// Serial1.println(counter++);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (Serial1.available() > 0) {
|
||||
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
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED ON
|
||||
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
char result = Serial1.read();
|
||||
// Serial1.println(result);
|
||||
|
||||
if (result == 'R') {
|
||||
Serial1.println("OK");
|
||||
delay(500);
|
||||
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());
|
||||
|
||||
Serial1.print(" XS ");
|
||||
Serial1.print(Sensor1);
|
||||
Serial1.print(" ");
|
||||
Serial1.print(Sensor2);
|
||||
Serial1.print(" ");
|
||||
Serial1.println(Sensor3);
|
||||
|
||||
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)
|
||||
digitalWrite(greenLED, HIGH);
|
||||
else
|
||||
digitalWrite(greenLED, LOW);
|
||||
|
||||
if (rotation > 5)
|
||||
digitalWrite(blueLED, HIGH);
|
||||
else
|
||||
digitalWrite(blueLED, LOW);
|
||||
|
||||
// Serial1.println(counter++);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
@ -1,246 +0,0 @@
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_Sensor.h>
|
||||
#include <Adafruit_BME280.h>
|
||||
#include <MPU6050_tockn.h>
|
||||
#include <EEPROM.h>
|
||||
|
||||
#define SEALEVELPRESSURE_HPA (1013.25)
|
||||
|
||||
//#define TESTING // Define to test on Serial Monitor
|
||||
|
||||
Adafruit_BME280 bme;
|
||||
MPU6050 mpu6050(Wire);
|
||||
|
||||
int counter = 0;
|
||||
long timer = 0;
|
||||
int bmePresent;
|
||||
int greenLED = 9;
|
||||
int blueLED = 8;
|
||||
int Sensor1 = 0;
|
||||
int Sensor2 = 0;
|
||||
float Sensor3 = 0;
|
||||
void eeprom_word_write(int addr, int val);
|
||||
short eeprom_word_read(int addr);
|
||||
|
||||
void setup() {
|
||||
|
||||
Serial.begin(9600); // Serial Monitor for testing
|
||||
|
||||
Serial1.begin(9600); // Pi UART
|
||||
|
||||
Serial.println("Starting!");
|
||||
|
||||
pinMode(PC13, OUTPUT);
|
||||
digitalWrite(PC13, LOW); // turn the LED on
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(PC13, HIGH); // turn the LED off
|
||||
|
||||
if (bme.begin(0x76)) {
|
||||
bmePresent = 1;
|
||||
} else {
|
||||
Serial.println("Could not find a valid BME280 sensor, check wiring!");
|
||||
bmePresent = 0;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
#ifdef TESTING
|
||||
if (Serial.available() > 0) {
|
||||
digitalWrite(PC13, LOW); // turn the LED on
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(PC13, HIGH); // turn the LED off
|
||||
char result = Serial.read();
|
||||
// Serial.println(result);
|
||||
|
||||
if (result == 'R') {
|
||||
Serial.println("OK");
|
||||
delay(500);
|
||||
setup();
|
||||
}
|
||||
|
||||
if (result == '?')
|
||||
{
|
||||
|
||||
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());
|
||||
|
||||
Serial.print(" XS ");
|
||||
Serial.print(Sensor1);
|
||||
Serial.print(" ");
|
||||
Serial.print(Sensor2);
|
||||
Serial.print(" ");
|
||||
Serial.println(Sensor3);
|
||||
|
||||
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)
|
||||
digitalWrite(greenLED, HIGH);
|
||||
else
|
||||
digitalWrite(greenLED, LOW);
|
||||
|
||||
if (rotation > 5)
|
||||
digitalWrite(blueLED, HIGH);
|
||||
else
|
||||
digitalWrite(blueLED, LOW);
|
||||
|
||||
// Serial1.println(counter++);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (Serial1.available() > 0) {
|
||||
digitalWrite(PC13, LOW); // turn the LED on
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(PC13, HIGH); // turn the LED off
|
||||
char result = Serial1.read();
|
||||
// Serial1.println(result);
|
||||
|
||||
if (result == 'R') {
|
||||
Serial1.println("OK");
|
||||
delay(500);
|
||||
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());
|
||||
|
||||
Serial1.print(" XS ");
|
||||
Serial1.print(Sensor1);
|
||||
Serial1.print(" ");
|
||||
Serial1.print(Sensor2);
|
||||
Serial1.print(" ");
|
||||
Serial1.println(Sensor3);
|
||||
|
||||
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)
|
||||
digitalWrite(greenLED, HIGH);
|
||||
else
|
||||
digitalWrite(greenLED, LOW);
|
||||
|
||||
if (rotation > 5)
|
||||
digitalWrite(blueLED, HIGH);
|
||||
else
|
||||
digitalWrite(blueLED, LOW);
|
||||
|
||||
// Serial1.println(counter++);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
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));
|
||||
}
|
||||
@ -1,313 +0,0 @@
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_Sensor.h>
|
||||
#include <Adafruit_BME280.h>
|
||||
#include <MPU6050_tockn.h>
|
||||
#include <EEPROM.h>
|
||||
#include <TinyGPS.h>
|
||||
|
||||
#define SEALEVELPRESSURE_HPA (1013.25)
|
||||
|
||||
Adafruit_BME280 bme;
|
||||
MPU6050 mpu6050(Wire);
|
||||
TinyGPS gps;
|
||||
|
||||
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;
|
||||
int Sensor2 = 0;
|
||||
float Sensor3 = 0;
|
||||
void eeprom_word_write(int addr, int val);
|
||||
short eeprom_word_read(int addr);
|
||||
|
||||
void setup() {
|
||||
|
||||
Serial.begin(9600); // Serial Monitor for testing
|
||||
|
||||
Serial1.begin(9600); // Pi UART
|
||||
Serial2.begin(9600); // GPS on STM32 pins PA2, PA3
|
||||
Serial.println("Starting!");
|
||||
|
||||
blink_setup();
|
||||
|
||||
blink(500);
|
||||
delay(250);
|
||||
blink(500);
|
||||
delay(250);
|
||||
led_set(greenLED, HIGH);
|
||||
delay(250);
|
||||
led_set(greenLED, LOW);
|
||||
led_set(blueLED, HIGH);
|
||||
delay(250);
|
||||
led_set(blueLED, LOW);
|
||||
|
||||
if (bme.begin(0x76)) {
|
||||
bmePresent = 1;
|
||||
} else {
|
||||
Serial.println("Could not find a valid BME280 sensor, check wiring!");
|
||||
bmePresent = 0;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
if (Serial.available() > 0) {
|
||||
blink(50);
|
||||
char result = Serial.read();
|
||||
// Serial.println(result);
|
||||
|
||||
if (result == 'R') {
|
||||
Serial.println("OK");
|
||||
delay(500);
|
||||
setup();
|
||||
}
|
||||
|
||||
if (result == '?')
|
||||
{
|
||||
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());
|
||||
|
||||
Serial.print(" XS ");
|
||||
Serial.print(Sensor1);
|
||||
Serial.print(" ");
|
||||
Serial.print(Sensor2);
|
||||
Serial.print(" ");
|
||||
Serial.println(Sensor3);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
if (Serial1.available() > 0) {
|
||||
|
||||
blink(50);
|
||||
char result = Serial1.read();
|
||||
// Serial1.println(result);
|
||||
|
||||
if (result == 'R') {
|
||||
Serial1.println("OK");
|
||||
delay(500);
|
||||
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());
|
||||
|
||||
Serial1.print(" XS ");
|
||||
Serial1.print(Sensor1);
|
||||
Serial1.print(" ");
|
||||
Serial1.print(Sensor2);
|
||||
Serial1.print(" ");
|
||||
Serial1.println(Sensor3);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
bool newData = false;
|
||||
unsigned long chars;
|
||||
unsigned short sentences, failed;
|
||||
|
||||
// For one second we parse GPS data and report some key values
|
||||
for (unsigned long start = millis(); millis() - start < 100;) // 1000;)
|
||||
{
|
||||
while (Serial2.available())
|
||||
{
|
||||
char c = Serial2.read();
|
||||
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)
|
||||
{
|
||||
float flon, flat;
|
||||
unsigned long age;
|
||||
gps.f_get_position(&flat, &flon, &age);
|
||||
Sensor1 = flat * 100;
|
||||
Sensor2 = flon * 100;
|
||||
Sensor3 = (float) gps.altitude()/100.0;
|
||||
}
|
||||
// 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)
|
||||
// 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);
|
||||
#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 is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
#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);
|
||||
#endif
|
||||
|
||||
#if defined __AVR_ATmega32U4__
|
||||
digitalWrite(ledPin, state);
|
||||
#endif
|
||||
}
|
||||
@ -1,80 +0,0 @@
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_Sensor.h>
|
||||
#include <Adafruit_BME280.h>
|
||||
#define SEALEVELPRESSURE_HPA (1013.25)
|
||||
|
||||
//#define TESTING // Define to test on Serial Monitor
|
||||
|
||||
Adafruit_BME280 bme;
|
||||
int counter = 0;
|
||||
int RXLED = 17; // The RX LED has a defined Arduino pin
|
||||
|
||||
void setup() {
|
||||
|
||||
Serial.begin(9600); // Serial Monitor for testing
|
||||
|
||||
Serial1.begin(9600); // Pi UART
|
||||
|
||||
Serial.println("Starting!");
|
||||
|
||||
|
||||
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
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED ON
|
||||
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
|
||||
if (!bme.begin(0x76)) {
|
||||
Serial.println("Could not find a valid BME280 sensor, check wiring!");
|
||||
while (1);
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
#ifdef TESTING
|
||||
if (Serial.available() > 0) {
|
||||
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
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED ON
|
||||
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
char result = Serial.read();
|
||||
// Serial1.println(result);
|
||||
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.println(bme.readHumidity());
|
||||
|
||||
// Serial1.println(counter++);
|
||||
}
|
||||
#else
|
||||
if (Serial1.available() > 0) {
|
||||
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
|
||||
delay(50); // wait for a second
|
||||
digitalWrite(RXLED, HIGH); // set the RX LED ON
|
||||
TXLED0; //TX LED is not tied to a normally controlled pin so a macro is needed, turn LED OFF
|
||||
char result = Serial1.read();
|
||||
// Serial1.println(result);
|
||||
// Serial1.println("OK ");
|
||||
/**/
|
||||
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.println(bme.readHumidity());
|
||||
/**/
|
||||
// Serial1.println(counter++);
|
||||
}
|
||||
#endif
|
||||
|
||||
delay(100);
|
||||
}
|
||||
@ -1,28 +1,26 @@
|
||||
This code is for the STM32 or Pro Micro acting as a payload to the CubeSatSim.
|
||||
Full instructions are in the Wiki: https://github.com/alanbjohnston/CubeSatSim/wiki/8.-STEM-Payload-Board
|
||||
|
||||
Code includes (in rough order of testing):
|
||||
|
||||
Blink_STM32_PC13.ino and Blink_Pro_Micro.ino The usual Arduino "Hello World" application that blinks the LED for each board.
|
||||
This code is for the Sparkfun Pro Micro or STM32 acting as a payload to the CubeSatSim in the STEM Payload board. Using the Pro Micro is stongly recommended, as driver and board installation for the STM32 can be problematic, and fake STM32 boards may not work.
|
||||
|
||||
i2c_scanner.ino A handy utility for scanning the I2C bus that displays the results in the Serial Monitor at 9600 baud. If the sensors are installed and the jumpers set to the correct position, the two sensors should be displayed.
|
||||
Code includes (in rough order of testing):
|
||||
|
||||
STEM_Payload_Test_STM32.ino and STEM_Payload_Test_Pro_Micro.ino Blinks the Blue and Green LEDs on the STEM Payload Board and also reads the Temperature and Voltage sensors.
|
||||
Blink The usual Arduino "Hello World" application that blinks the LED for each board.
|
||||
|
||||
bme280test.ino Displays the results of reading the BME280 sensor: Temperature, Pressure, Altitude, and Humidity and displays on Serial Monitor 9600 baud. Requires the following libraries: Adadruit Unified Sensor (specify version 1.0.3), Adafruit_BME280 (specify version 1.1.0)
|
||||
i2c_scanner A handy utility for scanning the I2C bus that displays the results in the Serial Monitor at 9600 baud. If the sensors are installed, the two sensors should be displayed.
|
||||
|
||||
GetAllData.ino Displays the results of reading the MPU6050 sensor: Temperature, X, Y, and Z Axes: Acceleration, Gyor (Rotation Rate), and Angle. Requires the following libraries: MPU6050_tockn.
|
||||
STEM_Payload_Test Blinks the Blue and Green LEDs on the STEM Payload Board and also reads the Temperature and Voltage sensors.
|
||||
|
||||
PayloadOK_STM32_PC13.ino and PayloadOK_Pro_Micro.ino This code answers the query from the Raspberry Pi CubeSatSim software over the UART so that the STEM Payload is marked "OK" in the FoxTelem CubeSatSim-FSK Health tab.
|
||||
bme280test Displays the results of reading the BME280 sensor: Temperature, Pressure, Altitude, and Humidity and displays on Serial Monitor 9600 baud. Requires the following libraries: Adadruit Unified Sensor (specify version 1.0.3), Adafruit_BME280 (specify version 1.1.0)
|
||||
|
||||
Payload_BME280_MPU6050_Pro_Micro.ino and Payload_BME280_MPU6050_STM32.ino This code answers the query from the Raspberry Pi CubeSatSim software over the UART so that the STEM Payload is marked "OK" in the FoxTelem CubeSatSim-FSK Health tab and also replies withe BME280 and MPU6050 sensor data. In FoxTelem, this is displayed as the X, Y, and Z Gyro (dps) and in AFSK mode, it is appended to the telemetry string.
|
||||
GetAllData Displays the results of reading the MPU6050 sensor: Temperature, X, Y, and Z Axes: Acceleration, Gyor (Rotation Rate), and Angle. Requires the following libraries: MPU6050_tockn.
|
||||
|
||||
The STM32 can be programmed using the Arduino IDE with the Generic STM32F103C series board and STM32duino bootloader, Maple Mini port.
|
||||
Payload_BME280_MPU6050_XS This code answers the query from the Raspberry Pi CubeSatSim software over the UART so that the STEM Payload is marked "OK" in the FoxTelem CubeSatSim-FSK or CubeSatSim-BPSK Health tab and also replies with BME280 and MPU6050 sensor data. In FoxTelem, this is displayed as the X, Y, and Z Gyro (dps) and in AFSK mode, it is appended to the telemetry string.
|
||||
|
||||
The Sparkfun Pro Micro can also be programed using the Arduino IDE with the Sparkfun Pro Micro board and AVRISP mkII Programmer.
|
||||
|
||||
See the Wiki page for more information:
|
||||
|
||||
See https://github.com/alanbjohnston/CubeSatSim/wiki/Arduino-Payload
|
||||
https://github.com/alanbjohnston/CubeSatSim/wiki/8.-STEM-Payload-Board
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,56 +0,0 @@
|
||||
/*
|
||||
Blink
|
||||
Turns on an LED on for one second, then off for one second, repeatedly.
|
||||
Most Arduinos have an on-board LED you can control. On the Uno and
|
||||
Leonardo, it is attached to digital pin 13. If you're unsure what
|
||||
pin the on-board LED is connected to on your Arduino model, check
|
||||
the documentation at http://arduino.cc
|
||||
This example code is in the public domain.
|
||||
modified 8 May 2014
|
||||
by Scott Fitzgerald
|
||||
|
||||
Modified by Roger Clark. www.rogerclark.net for Maple mini 25th April 2015 , where the LED is on PC13
|
||||
|
||||
Added CubeSatSim Payload tests by Alan Johnston, KU2Y
|
||||
|
||||
*/
|
||||
|
||||
int sensorValue = 0;
|
||||
int D9 = 9;
|
||||
int D8 = 8;
|
||||
// Calibration data for diode temperature sensor
|
||||
float T1 = 25; // Temperature data point 1
|
||||
float R1 = 373; // Reading data point 1
|
||||
float T2 = 17; // Temperature data point 2
|
||||
float R2 = 405; // Reading data point 2
|
||||
|
||||
// the setup function runs once when you press reset or power the board
|
||||
void setup() {
|
||||
// initialize digital pin PB1 as an output.
|
||||
pinMode(D9, OUTPUT);
|
||||
pinMode(D8, OUTPUT);
|
||||
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
// the loop function runs over and over again forever
|
||||
void loop() {
|
||||
digitalWrite(D9, HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
digitalWrite(D8, LOW); // turn the LED on (HIGH is the voltage level)
|
||||
delay(1000); // wait for a second
|
||||
digitalWrite(D9, LOW); // turn the LED off by making the voltage LOW
|
||||
digitalWrite(D8, HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
delay(1000); // wait for a second
|
||||
|
||||
sensorValue = analogRead(A0);
|
||||
// Serial.println(sensorValue);
|
||||
sensorValue = analogRead(A1);
|
||||
|
||||
float temp = T1 + (sensorValue - R1) *(T2 - T1)/(R2 - R1);
|
||||
Serial.print("Temperature: ");
|
||||
Serial.print(temp);
|
||||
Serial.println(" C");
|
||||
|
||||
sensorValue = analogRead(A2);
|
||||
// Serial.println(sensorValue);
|
||||
}
|
||||
@ -1,50 +0,0 @@
|
||||
/*
|
||||
Blink
|
||||
Turns on an LED on for one second, then off for one second, repeatedly.
|
||||
|
||||
Most Arduinos have an on-board LED you can control. On the Uno and
|
||||
Leonardo, it is attached to digital pin 13. If you're unsure what
|
||||
pin the on-board LED is connected to on your Arduino model, check
|
||||
the documentation at http://arduino.cc
|
||||
|
||||
This example code is in the public domain.
|
||||
|
||||
modified 8 May 2014
|
||||
by Scott Fitzgerald
|
||||
|
||||
Modified by Roger Clark. www.rogerclark.net for Maple mini 25th April 2015 , where the LED is on PC13
|
||||
|
||||
Added CubeSatSim Payload tests by Alan Johnston, KU2Y
|
||||
|
||||
*/
|
||||
|
||||
int sensorValue = 0;
|
||||
|
||||
// the setup function runs once when you press reset or power the board
|
||||
void setup() {
|
||||
// initialize digital pin PB1 as an output.
|
||||
pinMode(PB9, OUTPUT);
|
||||
pinMode(PB8, OUTPUT);
|
||||
pinMode(PA0, INPUT_ANALOG);
|
||||
pinMode(PA1, INPUT_ANALOG);
|
||||
pinMode(PA2, INPUT_ANALOG);
|
||||
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
// the loop function runs over and over again forever
|
||||
void loop() {
|
||||
digitalWrite(PB9, HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
digitalWrite(PB8, LOW); // turn the LED on (HIGH is the voltage level)
|
||||
delay(1000); // wait for a second
|
||||
digitalWrite(PB9, LOW); // turn the LED off by making the voltage LOW
|
||||
digitalWrite(PB8, HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
delay(1000); // wait for a second
|
||||
|
||||
sensorValue = analogRead(PA0);
|
||||
Serial.println(sensorValue);
|
||||
sensorValue = analogRead(PA1);
|
||||
Serial.println(sensorValue);
|
||||
sensorValue = analogRead(PA2);
|
||||
Serial.println(sensorValue);
|
||||
}
|
||||
@ -1,70 +0,0 @@
|
||||
/*
|
||||
* EEPROM Write
|
||||
*
|
||||
* Stores values into the EEPROM.
|
||||
* These values will stay in the EEPROM when the board is
|
||||
* turned off and may be retrieved later by another sketch.
|
||||
*
|
||||
* Writes 8 values.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <EEPROM.h>
|
||||
|
||||
/** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
|
||||
int addr = 0;
|
||||
|
||||
void setup() {
|
||||
// initialize serial
|
||||
Serial.begin(9600);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
/***
|
||||
Need to divide by 4 because analog inputs range from
|
||||
0 to 1023 and each byte of the EEPROM can only hold a
|
||||
value from 0 to 255.
|
||||
***/
|
||||
|
||||
// int val = analogRead(0) / 4;
|
||||
|
||||
/***
|
||||
Write the value to the appropriate byte of the EEPROM.
|
||||
these values will remain there when the board is
|
||||
turned off.
|
||||
***/
|
||||
|
||||
Serial.println("\nEEPROM Write/Read test and Reset\n\n");
|
||||
for (int i=0; i < 9; i++)
|
||||
{
|
||||
EEPROM.write(i,i);
|
||||
delay(500);
|
||||
Serial.println(EEPROM.read(i));
|
||||
}
|
||||
|
||||
/***
|
||||
Advance to the next address, when at the end restart at the beginning.
|
||||
|
||||
Larger AVR processors have larger EEPROM sizes, E.g:
|
||||
- Arduno Duemilanove: 512b EEPROM storage.
|
||||
- Arduino Uno: 1kb EEPROM storage.
|
||||
- Arduino Mega: 4kb EEPROM storage.
|
||||
|
||||
Rather than hard-coding the length, you should use the pre-provided length function.
|
||||
This will make your code portable to all AVR processors.
|
||||
***/
|
||||
// addr = addr + 1;
|
||||
// if (addr == EEPROM.length()) {
|
||||
// addr = 0;
|
||||
// }
|
||||
|
||||
/***
|
||||
As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an
|
||||
EEPROM address is also doable by a bitwise and of the length - 1.
|
||||
|
||||
++addr &= EEPROM.length() - 1;
|
||||
***/
|
||||
|
||||
|
||||
// delay(100);
|
||||
}
|
||||
Loading…
Reference in new issue