Satellite tracking for the mbed platform(s). Note: This software is beerware.

Dependencies:   GPS mbed

Satellite Tracking with mbed!

This is a quick example of tracking satellites with the mbed platform. Ensure you have the latest TLE information and map it correctly. I have commented in the original TLEs used for the example to help you do this.

This code is not restricted to geostationary/geosynchronous satellites, you can track any satellite for which you can get a TLE. (Which is almost all non military satellites).

See http://www.celestrak.com/NORAD/elements/ http://en.wikipedia.org/wiki/Two-line_element_set

If you use this code, please send me a beer (see main.cpp header). Enjoy!

Plan13.h

Committer:
SamClarke
Date:
2014-01-20
Revision:
5:8af1b8452986
Parent:
0:78d4704bd4e7

File content as of revision 5:8af1b8452986:

#ifndef plan13_h
#define plan13_h
#include "mbed.h"

#ifndef M_PI
#define M_PI           3.14159265358979323846
#endif

class Plan13 {

public:
double rad(double deg);
double deg(double rad);
double FNatn(double y, double x);
double FNday(int year, int month, int day);
double myFNday(int year, int month, int day, int uh, int um, int us);
double getElement(char *gstr, int gstart, int gstop);
void readElements(char *satellite);
void initSat(void);
void satvec();
void rangevec(void);
void sunvec(void);
void calculate(void);
float *footprintOctagon(float slat, float slon);
void printdata(void);
void setFrequency(unsigned long rx_frequency, unsigned long tx_frequency);
void setLocation(double lon, double lat, int height);
void setTime(int yearIn, int monthIn, int mDayIn, int hourIn, int minIn, int secIn);
void setElements(double YE_in, double TE_in, double IN_in, double
         RA_in, double EC_in, double WP_in, double MA_in, double MM_in,
        double M2_in, double RV_in, double ALON_in );
    int getDoppler(unsigned long freq);
    int getDoppler64(unsigned long freq);

double rx;
double tx;
double observer_lon;
double observer_lat;
int observer_height;
unsigned long rxOutLong;
unsigned long txOutLong;
unsigned long rxFrequencyLong;
unsigned long txFrequencyLong;
float dopplerFactor;
const static double   YM = 365.25;                           /* Days in a year                     */
double   EL;                           /* Elevation                          */
double   TN;                           /*                                    */

double   E;
double   N;
double   AZ;
double   SLON;
double   SLAT;
double   RR;

double   CL;
double   CS;
double   SL;
double   CO;
double   SO;
double   RE;
double   FL;
double   RP;
double   XX;
double   ZZ;
double   D;
double   R;
double   Rx;
double   Ry;
double   Rz;
double   Ex;
double   Ey;
double   Ez;
double   Ny;
double   Nx;
double   Nz;
double   Ox;
double   Oy;
double   Oz;
double   U;
double   Ux;
double   Uy;
double   Uz;
const static double   YT = 365.2421970;
double   WW;
double   WE;
double   W0;
double   VOx;
double   VOy;
double   VOz;
double   DE;
double   GM;
double   J2;
double   N0;
double   AU;
double   b0;
double   SI;
double   CI;
double   PC;
double   QD;
double   WD;
double   DC;
double   YG;
double   G0;
double   MAS0;
double   MASD;
double   INS;
double   CNS;
double   SNS;
double   EQC1;
double   EQC2;
double   TEG;
double   GHAE;
double   MRSE;
double   MASE;
double   ax;
double   ay;
double   az;
int      OLDRN;
double   T;
double   DT;
double   KD;
double   KDP;
double   M;
int      DR;
long     RN;
double   EA;
double   C;
double   S;
double   DNOM;
double   A;
double   B;
double   RS;
double   Sx;
double   Sy;
//double   Sz;
double   Vx;
double   Vy;
double   Vz;
double   AP;
double   CW;
double   SW;
double   RAAN;
double   CQ;
double   SQ;
double   CXx;
double   CXy;
double   CXz;
double   CYx;
double   CYy;
double   CYz;
double   CZx;
double   CZy;
double   CZz;
double   SATx;
double   SATy;
double   SATz;
double   ANTx;
double   ANTy;
double   ANTz;
double   VELx;
double   VELy;
double   VELz;
double   Ax;
double   Ay;
double   Az;
double   Sz;
//double   Vz;
double   GHAA;

double   DS;
double   DF;

/* keplerians */

char     SAT[20];
long     SATNO;
double   YE;
double   TE;
double   IN;
double   RA;
double   EC;
double   WP;
double   MA;
double   MM;
double   M2;
long     RV;
double   ALON;
double   ALAT;
double   rxOut;
double   txOut;

/* location */
char     LOC[20];
double   LA;
double   LO;
double   HT;

double      HR;                        /* Hours */
double      DN;
private:
void    foo();
};
#endif