Dependencies:   mbed

Committer:
Kaikestu
Date:
Wed Dec 09 13:34:55 2009 +0000
Revision:
0:ffae044d3949

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kaikestu 0:ffae044d3949 1 #include "mbed.h"
Kaikestu 0:ffae044d3949 2 #include "LIS302.h"
Kaikestu 0:ffae044d3949 3 #include "MobileLCD.h"
Kaikestu 0:ffae044d3949 4 #define pi 3.141592653589793238462643383279502884197
Kaikestu 0:ffae044d3949 5
Kaikestu 0:ffae044d3949 6 DigitalIn din (20);
Kaikestu 0:ffae044d3949 7 MobileLCD lcd (5,6,7,8,9);
Kaikestu 0:ffae044d3949 8 LIS302 acc (11,12,13,14);
Kaikestu 0:ffae044d3949 9
Kaikestu 0:ffae044d3949 10 //gloable Var's
Kaikestu 0:ffae044d3949 11 float x;
Kaikestu 0:ffae044d3949 12 float y;
Kaikestu 0:ffae044d3949 13 float numx;
Kaikestu 0:ffae044d3949 14 float numy;
Kaikestu 0:ffae044d3949 15 float numxmid;
Kaikestu 0:ffae044d3949 16 float numymid;
Kaikestu 0:ffae044d3949 17 float xi;
Kaikestu 0:ffae044d3949 18 float yi;
Kaikestu 0:ffae044d3949 19 //float d;
Kaikestu 0:ffae044d3949 20
Kaikestu 0:ffae044d3949 21 //Functions
Kaikestu 0:ffae044d3949 22 float calculateangle(float, float);
Kaikestu 0:ffae044d3949 23 float turnpos(float);
Kaikestu 0:ffae044d3949 24 void display(void);
Kaikestu 0:ffae044d3949 25 float average(float);
Kaikestu 0:ffae044d3949 26
Kaikestu 0:ffae044d3949 27 //Main Prog
Kaikestu 0:ffae044d3949 28 int main() {
Kaikestu 0:ffae044d3949 29
Kaikestu 0:ffae044d3949 30 while (1) {
Kaikestu 0:ffae044d3949 31
Kaikestu 0:ffae044d3949 32 //read in from accelaromitor and filter the result
Kaikestu 0:ffae044d3949 33 x = acc.x();
Kaikestu 0:ffae044d3949 34 x= average(x);
Kaikestu 0:ffae044d3949 35 y = acc.y();
Kaikestu 0:ffae044d3949 36 y= average(y);
Kaikestu 0:ffae044d3949 37
Kaikestu 0:ffae044d3949 38 //Call calculate angle
Kaikestu 0:ffae044d3949 39 numx = calculateangle(x,y);
Kaikestu 0:ffae044d3949 40 numy = calculateangle(y,x);
Kaikestu 0:ffae044d3949 41
Kaikestu 0:ffae044d3949 42 //inverse direction of bubbles
Kaikestu 0:ffae044d3949 43 numx *= -1;
Kaikestu 0:ffae044d3949 44 numy *= -1;
Kaikestu 0:ffae044d3949 45
Kaikestu 0:ffae044d3949 46 //Button Press
Kaikestu 0:ffae044d3949 47 if (din == 1)
Kaikestu 0:ffae044d3949 48 {
Kaikestu 0:ffae044d3949 49 xi = numx ;
Kaikestu 0:ffae044d3949 50 yi = numy - 99;
Kaikestu 0:ffae044d3949 51 }
Kaikestu 0:ffae044d3949 52
Kaikestu 0:ffae044d3949 53 numx -= xi;
Kaikestu 0:ffae044d3949 54 numy -= yi;
Kaikestu 0:ffae044d3949 55
Kaikestu 0:ffae044d3949 56 //set bubble to middle
Kaikestu 0:ffae044d3949 57 numxmid = ((numx/90)*130) + 64;
Kaikestu 0:ffae044d3949 58 numymid = ((numy/90)*130) + 64;
Kaikestu 0:ffae044d3949 59
Kaikestu 0:ffae044d3949 60 //Turn negative numbers positive
Kaikestu 0:ffae044d3949 61 numx = turnpos(numx);
Kaikestu 0:ffae044d3949 62 numy = turnpos(numy);
Kaikestu 0:ffae044d3949 63
Kaikestu 0:ffae044d3949 64 //setup display
Kaikestu 0:ffae044d3949 65 display();
Kaikestu 0:ffae044d3949 66
Kaikestu 0:ffae044d3949 67 }
Kaikestu 0:ffae044d3949 68 }//End of main program
Kaikestu 0:ffae044d3949 69
Kaikestu 0:ffae044d3949 70
Kaikestu 0:ffae044d3949 71 //angle calculations
Kaikestu 0:ffae044d3949 72 float calculateangle(float i, float j)
Kaikestu 0:ffae044d3949 73 {
Kaikestu 0:ffae044d3949 74 float num;
Kaikestu 0:ffae044d3949 75
Kaikestu 0:ffae044d3949 76 num = pi * 20 *(atan((i/j)));
Kaikestu 0:ffae044d3949 77
Kaikestu 0:ffae044d3949 78 return num;
Kaikestu 0:ffae044d3949 79 }
Kaikestu 0:ffae044d3949 80
Kaikestu 0:ffae044d3949 81 //Turn Number Positive
Kaikestu 0:ffae044d3949 82 float turnpos(float l)
Kaikestu 0:ffae044d3949 83 {
Kaikestu 0:ffae044d3949 84 if (l < 0)
Kaikestu 0:ffae044d3949 85 {
Kaikestu 0:ffae044d3949 86 l *= -1;
Kaikestu 0:ffae044d3949 87 }
Kaikestu 0:ffae044d3949 88
Kaikestu 0:ffae044d3949 89 return l;
Kaikestu 0:ffae044d3949 90 }
Kaikestu 0:ffae044d3949 91
Kaikestu 0:ffae044d3949 92 //Set up Display
Kaikestu 0:ffae044d3949 93 void display (void)
Kaikestu 0:ffae044d3949 94 {
Kaikestu 0:ffae044d3949 95 lcd.background(0x000000);
Kaikestu 0:ffae044d3949 96
Kaikestu 0:ffae044d3949 97 if (numy < 50)
Kaikestu 0:ffae044d3949 98 {
Kaikestu 0:ffae044d3949 99 //black tollarence lines
Kaikestu 0:ffae044d3949 100 //xline
Kaikestu 0:ffae044d3949 101 lcd.fill (0, 8, 130, 1, 0xffffff);
Kaikestu 0:ffae044d3949 102 lcd.fill (60 , 0, 1, 8, 0xffffff);
Kaikestu 0:ffae044d3949 103 lcd.fill (70 , 0, 1, 8, 0xffffff);
Kaikestu 0:ffae044d3949 104
Kaikestu 0:ffae044d3949 105 //x bubble
Kaikestu 0:ffae044d3949 106 lcd.fill (numymid , 2, 4, 4, 0x00ffbb);
Kaikestu 0:ffae044d3949 107 }
Kaikestu 0:ffae044d3949 108 else
Kaikestu 0:ffae044d3949 109 {
Kaikestu 0:ffae044d3949 110 //black tollarence lines
Kaikestu 0:ffae044d3949 111 //yline
Kaikestu 0:ffae044d3949 112 lcd.fill (8, 0, 1, 130, 0xffffff);
Kaikestu 0:ffae044d3949 113 lcd.fill (0, 60 , 8, 1, 0xffffff);
Kaikestu 0:ffae044d3949 114 lcd.fill (0, 70 , 8, 1, 0xffffff);
Kaikestu 0:ffae044d3949 115
Kaikestu 0:ffae044d3949 116 //y bubble
Kaikestu 0:ffae044d3949 117 lcd.fill (2 , numxmid, 4, 4, 0xffbb00);
Kaikestu 0:ffae044d3949 118 }
Kaikestu 0:ffae044d3949 119
Kaikestu 0:ffae044d3949 120 //Display angle in middle of the screen
Kaikestu 0:ffae044d3949 121 lcd.locate(3,7);
Kaikestu 0:ffae044d3949 122 lcd.printf("Top = %.0f ", numy);
Kaikestu 0:ffae044d3949 123
Kaikestu 0:ffae044d3949 124 lcd.locate(3,9);
Kaikestu 0:ffae044d3949 125 lcd.printf("Left = %.0f ", numx);
Kaikestu 0:ffae044d3949 126
Kaikestu 0:ffae044d3949 127 //set refresh rate
Kaikestu 0:ffae044d3949 128 wait(0.3);
Kaikestu 0:ffae044d3949 129 lcd.cls();
Kaikestu 0:ffae044d3949 130 }
Kaikestu 0:ffae044d3949 131
Kaikestu 0:ffae044d3949 132 //Digital Filter
Kaikestu 0:ffae044d3949 133 float average(float i)
Kaikestu 0:ffae044d3949 134 {
Kaikestu 0:ffae044d3949 135 float av = 0;
Kaikestu 0:ffae044d3949 136 for (int j=0; j < 50; j++)
Kaikestu 0:ffae044d3949 137 {
Kaikestu 0:ffae044d3949 138 av += i;
Kaikestu 0:ffae044d3949 139 av /=50;
Kaikestu 0:ffae044d3949 140 }
Kaikestu 0:ffae044d3949 141 return av;
Kaikestu 0:ffae044d3949 142 }