cansat program (version 1)

Dependencies:   ADXL345_I2C BME280 Cansat2016 MBed_Adafruit-GPS-Library VNH5019 mbed

Files at this revision

API Documentation at this revision

Comitter:
s1210160
Date:
Sat Jul 23 11:11:04 2016 +0000
Commit message:
pressure

Changed in this revision

ADXL345_I2C.lib Show annotated file Show diff for this revision Revisions of this file
BME280.lib Show annotated file Show diff for this revision Revisions of this file
Cansat2016.lib Show annotated file Show diff for this revision Revisions of this file
MBed_Adafruit-GPS-Library.lib Show annotated file Show diff for this revision Revisions of this file
VNH5019.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r c867a0a05fe8 ADXL345_I2C.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ADXL345_I2C.lib	Sat Jul 23 11:11:04 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/aigamozu/code/ADXL345_I2C/#475c5366629a
diff -r 000000000000 -r c867a0a05fe8 BME280.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BME280.lib	Sat Jul 23 11:11:04 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/CanSat2015aizu/code/BME280/#d8876e3a80b7
diff -r 000000000000 -r c867a0a05fe8 Cansat2016.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cansat2016.lib	Sat Jul 23 11:11:04 2016 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/CanSat2016aizu/code/Cansat2016/#b42b5cb8b646
diff -r 000000000000 -r c867a0a05fe8 MBed_Adafruit-GPS-Library.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MBed_Adafruit-GPS-Library.lib	Sat Jul 23 11:11:04 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/aigamozu/code/MBed_Adafruit-GPS-Library/#7ef0dd12940c
diff -r 000000000000 -r c867a0a05fe8 VNH5019.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/VNH5019.lib	Sat Jul 23 11:11:04 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/aigamozu/code/VNH5019/#1bcdb655df71
diff -r 000000000000 -r c867a0a05fe8 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Jul 23 11:11:04 2016 +0000
@@ -0,0 +1,220 @@
+#include "mbed.h"
+#include "Cansat2016.h"
+#include "BME280.h"
+#include "VNH5019.h"
+#include "MBed_Adafruit_GPS.h"
+
+// target GPS
+const double target_x = 139.939017, target_y = 37.522390;
+
+//******************************************
+//
+//  pin setting
+//
+//******************************************
+
+// Serial communication
+Serial pc(USBTX, USBRX);
+Serial xbee(p13,p14);
+
+// Compass
+DigitalIn compass[4] = {p12, p11, p8, p7};
+// Pressure
+BME280 pressure(p9, p10);
+// MOtor
+VNH5019 motor(p23,p22,p25,p21,p24,p26);
+
+DigitalIn short_in(p19);
+DigitalOut short_out(p20);
+DigitalInOut nic(p5);
+
+
+//******************************************
+//
+//  Member variable
+//
+//******************************************
+
+// Constructor
+Cansat2016 cansat(motor);
+
+// now mode
+int mode = -1;
+
+int short_flag = 0;
+
+// time interval
+Timer GPS_Timer;
+const int GPS_time = 1000;
+Timer fall_Timer;
+const int fall_time = 30000;
+Timer action_Timer;
+const int action_time = 500;
+Timer stack_Timer;
+const int stack_time = 5000;
+
+
+//*******************************************
+//
+//  standby mode
+//
+//*******************************************
+void standby()
+{
+    cansat.set_action('s');
+
+    if(!short_in) {
+        short_flag ++;
+    }
+
+    if(short_flag >= 5) {
+        mode = 1;
+        fall_Timer.start();
+        xbee.printf("-----------FALLING MODE-----------\n");
+    }
+}
+
+//*******************************************
+//
+//  falling mode
+//
+//*******************************************
+void falling(void)
+{
+    if(fall_Timer.read_ms() >= fall_time) {
+        // nichrome wire is high
+        nic = 1;
+        xbee.printf("remove the parachute\n");
+        wait_ms(3000);
+        nic = 0;
+        mode = 2;
+        action_Timer.start();
+        xbee.printf("forward running\n");
+
+        // running on parachute (10 seconds)
+        while(action_Timer.read_ms() <= 10000) {
+            cansat.set_action('f');
+            cansat.motor_control();
+        }
+        action_Timer.reset();
+        xbee.printf("-----------RUNNING MODE-----------\n");
+    }
+}
+
+//*******************************************
+//
+//  running mode
+//
+//*******************************************
+void running(void)
+{
+
+    cansat.motor_control();
+
+    // decide speed and action of robot
+    if(action_Timer.read_ms() >= action_time) {
+        cansat.calc_distance();
+        cansat.robot_compass(compass);
+        cansat.target_compass();
+        cansat.robot_action();
+        xbee.printf("(%f, %f) distance:%f, target:%d, robot:%d, action:%c\n",
+                    cansat.get_x(), cansat.get_y(), cansat.get_distance(), cansat.get_compass('t'), cansat.get_compass('r'), cansat.get_action());
+        action_Timer.reset();
+    }
+
+    // around the target
+    if(cansat.get_distance() < 0.5) {
+        mode = 100;
+        xbee.printf("-----------STOP MODE-----------\n");
+    }
+
+}
+
+//*******************************************
+//
+//  stop mode
+//
+//*******************************************
+void stop(void)
+{
+
+    cansat.set_action('s');
+
+}
+
+
+//*******************************************
+//
+//  main processing
+//
+//*******************************************
+
+int main()
+{
+
+    wait(3);
+
+    pc.baud(57600);
+    xbee.baud(57600);
+
+    //GPS setting
+    Serial* gps_Serial = new Serial(p28,p27);
+    Adafruit_GPS myGPS(gps_Serial);
+    myGPS.begin(9600);
+
+    myGPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);
+    myGPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
+    myGPS.sendCommand(PGCMD_ANTENNA);
+
+    GPS_Timer.start();
+
+    // target GPS
+    cansat.set_targetGPS(target_x, target_y);
+    // robot GPS
+    double robot_x=0.0, robot_y=0.0;
+
+    short_out = 1;
+    nic = 0;
+
+    xbee.printf("start\n");
+    xbee.printf("-----------STANDBY MODE-----------\n");
+    wait_ms(1000);
+
+    while(true) {
+
+        myGPS.read();
+        if ( myGPS.newNMEAreceived() ) {
+            if ( !myGPS.parse(myGPS.lastNMEA()) ) {
+                continue;
+            }
+        }
+
+        // get robot GPS
+        if (GPS_Timer.read_ms() >= GPS_time) {
+            if(myGPS.fix) {
+                robot_x = (double)myGPS.longitudeH +(double)(myGPS.longitudeL / 10000.0 / 60.0);
+                robot_y = (double)myGPS.latitudeH + (double)(myGPS.latitudeL / 10000.0 / 60.0);
+
+                cansat.set_robotGPS(robot_x, robot_y);
+                
+            }
+            GPS_Timer.reset();
+        }
+
+
+        switch(mode) {
+            case -1:    // stanby mode
+                standby();
+                break;
+            case 1:     // falling mode
+                falling();
+                break;
+            case 2:     // running mode
+                running();
+                break;
+            case 100:   // stop mode
+                stop();
+                break;
+        }
+    }
+}
diff -r 000000000000 -r c867a0a05fe8 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sat Jul 23 11:11:04 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/8a40adfe8776
\ No newline at end of file