LCD implementation of our project.

Dependencies:   mbed mbed-rtos MLX90614

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