LCD implementation of our project.
Dependencies: mbed mbed-rtos MLX90614
Diff: Compass.cpp
- Revision:
- 3:688b62ff6474
- Child:
- 4:024e6a9c2ebf
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Compass.cpp Sun Apr 26 16:29:53 2015 +0000 @@ -0,0 +1,74 @@ +#include "Compass.h" + +void Compass::display(void){ + //create a new thread to get and update compass - do later + draw_compass(0); +} + +void Compass::update(char c){ + //kill thread and go back + if(c == 'y') + this->setSelectedScreen(back); +} + +//get direction +char * get_direction(double degrees){ + if(degrees >= 330 || degrees < 30) + return "East"; + else if(degrees >= 30 && degrees <= 60) + return "North-East"; + else if(degrees >= 60 && degrees < 120) + return "North"; + else if(degrees >= 120 && degrees < 150) + return "North-West"; + else if(degrees >= 150 && degrees < 210) + return "West"; + else if(degrees >= 210 && degrees < 240) + return "South-West"; + else if(degrees >= 240 && degrees < 300) + return "South"; + else + return "South-East"; +} + +//function that draws the compass on the screen +void Compass::draw_compass(double degrees){ + //variables + int x_temp, y_temp; + double rad = degrees * M_PI / 180; + + //calculate coordinates to point + x_temp = X_CENTER + (int) (POINTER_LENGTH * cos(rad)); + y_temp = Y_CENTER + (int) (POINTER_LENGTH * (-sin(rad))); + + //draw the main circle and small one + st7565->drawcircle(X_CENTER, Y_CENTER, RADIUS, 20); + st7565->drawcircle(X_CENTER, Y_CENTER, 2, 20); + + //draw the lines + st7565->drawline(X_CENTER, Y_CENTER, x_temp, y_temp, 20); //draw line from center to coordinates + st7565->drawline(X_CENTER, Y_CENTER - RADIUS, X_CENTER, Y_CENTER - 15, 20); //north line + st7565->drawline(X_CENTER, Y_CENTER + RADIUS, X_CENTER, Y_CENTER + 15, 20); //south line + st7565->drawline(X_CENTER + RADIUS, Y_CENTER, X_CENTER + 15, Y_CENTER, 20); //east line + st7565->drawline(X_CENTER - RADIUS, Y_CENTER, X_CENTER - 15, Y_CENTER, 20); //west line + + //draw the initials + st7565->drawstring(X_CENTER - 2, 1, "N"); + st7565->drawstring(X_CENTER - 2, 7, "S"); + st7565->drawstring(X_CENTER + 21, 4, "E"); + st7565->drawstring(X_CENTER - 25, 4, "W"); + + //display pointing direction + st7565->drawstring(0, 2, "Pointing:"); + char * pointer = get_direction(degrees); + st7565->drawstring(0, 4, pointer); + + //display degrees and radians in bottom left corner + char s_deg[10], s_rad[10]; + sprintf(s_deg, "DEG:%g", degrees); + sprintf(s_rad, "RAD:%.2g", rad); + st7565->drawstring(1, 6, s_deg); + st7565->drawstring(1, 7, s_rad); + + st7565->display(); +} \ No newline at end of file