Satellite tracking for the mbed platform(s). Note: This software is beerware.
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