Trying out a new commit

Dependencies:   LSM303DLH mbed

Committer:
hiarora
Date:
Fri Oct 30 04:12:06 2015 +0000
Revision:
0:683dbfe46abe
sex

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hiarora 0:683dbfe46abe 1 #include "mbed.h"
hiarora 0:683dbfe46abe 2 #include "LSM303DLH.h"
hiarora 0:683dbfe46abe 3
hiarora 0:683dbfe46abe 4 DigitalOut led1(LED1);
hiarora 0:683dbfe46abe 5 DigitalOut led2(LED2);
hiarora 0:683dbfe46abe 6
hiarora 0:683dbfe46abe 7
hiarora 0:683dbfe46abe 8 /*
hiarora 0:683dbfe46abe 9 Misc decl.
hiarora 0:683dbfe46abe 10 */
hiarora 0:683dbfe46abe 11 Serial debug(USBTX,USBRX);
hiarora 0:683dbfe46abe 12
hiarora 0:683dbfe46abe 13
hiarora 0:683dbfe46abe 14 /*
hiarora 0:683dbfe46abe 15 Motor Declarations and functions
hiarora 0:683dbfe46abe 16 @param on : decidedes which bits to set from the forward and backward array
hiarora 0:683dbfe46abe 17 */
hiarora 0:683dbfe46abe 18
hiarora 0:683dbfe46abe 19 unsigned int on = 0;
hiarora 0:683dbfe46abe 20
hiarora 0:683dbfe46abe 21 DigitalOut m1(p21);
hiarora 0:683dbfe46abe 22 DigitalOut m2(p22);
hiarora 0:683dbfe46abe 23 DigitalOut m3(p23);
hiarora 0:683dbfe46abe 24 DigitalOut m4(p24);
hiarora 0:683dbfe46abe 25
hiarora 0:683dbfe46abe 26 enum control{
hiarora 0:683dbfe46abe 27 forward,
hiarora 0:683dbfe46abe 28 backward
hiarora 0:683dbfe46abe 29 }stepper_direction = forward;
hiarora 0:683dbfe46abe 30
hiarora 0:683dbfe46abe 31 float motorTimeLapsed = 0.0, degrees = 0, motorTimerFrequency = 0.007, oneRotationTime = 15.0;
hiarora 0:683dbfe46abe 32
hiarora 0:683dbfe46abe 33 char* forwardArr[] = {"1000", "1100", "0100", "0110","0010", "0011","0001", "1001"};
hiarora 0:683dbfe46abe 34 char* backwardArr[] = {"1000", "1001", "0001", "0011", "0010", "0110", "0100", "1100"};
hiarora 0:683dbfe46abe 35
hiarora 0:683dbfe46abe 36
hiarora 0:683dbfe46abe 37 void SetPortValues(char *myValues){
hiarora 0:683dbfe46abe 38 m1 = myValues[0] - 48;
hiarora 0:683dbfe46abe 39 m2 = myValues[1] - 48;
hiarora 0:683dbfe46abe 40 m3 = myValues[2] - 48;
hiarora 0:683dbfe46abe 41 m4 = myValues[3] - 48;
hiarora 0:683dbfe46abe 42 }
hiarora 0:683dbfe46abe 43
hiarora 0:683dbfe46abe 44
hiarora 0:683dbfe46abe 45 void attime() {
hiarora 0:683dbfe46abe 46 motorTimeLapsed += motorTimerFrequency;
hiarora 0:683dbfe46abe 47 if(motorTimeLapsed > oneRotationTime){
hiarora 0:683dbfe46abe 48 motorTimeLapsed = 0;
hiarora 0:683dbfe46abe 49 stepper_direction = stepper_direction == forward?backward:forward;
hiarora 0:683dbfe46abe 50 }
hiarora 0:683dbfe46abe 51 stepper_direction?SetPortValues(backwardArr[++on%8]):SetPortValues(forwardArr[++on%8]);
hiarora 0:683dbfe46abe 52 degrees = (stepper_direction == forward)?(motorTimeLapsed/oneRotationTime*180.0):(180.0-(motorTimeLapsed/oneRotationTime*180.0));
hiarora 0:683dbfe46abe 53 }
hiarora 0:683dbfe46abe 54
hiarora 0:683dbfe46abe 55 /*
hiarora 0:683dbfe46abe 56 Sonar - decl and functions
hiarora 0:683dbfe46abe 57 */
hiarora 0:683dbfe46abe 58
hiarora 0:683dbfe46abe 59 long duration, distance_cm;
hiarora 0:683dbfe46abe 60 Timer timerSonar;
hiarora 0:683dbfe46abe 61 DigitalOut trig(p6); // To generate trigger for Sonar
hiarora 0:683dbfe46abe 62 InterruptIn echo(p5); // To capture echo edge on I/O interrupt
hiarora 0:683dbfe46abe 63
hiarora 0:683dbfe46abe 64 void begin_timer(){
hiarora 0:683dbfe46abe 65 timerSonar.reset(); //reset timer
hiarora 0:683dbfe46abe 66 timerSonar.start();
hiarora 0:683dbfe46abe 67 }
hiarora 0:683dbfe46abe 68
hiarora 0:683dbfe46abe 69 void end_timer()
hiarora 0:683dbfe46abe 70 {
hiarora 0:683dbfe46abe 71 timerSonar.stop();
hiarora 0:683dbfe46abe 72 duration = timerSonar.read_us(); // Pulse width measured
hiarora 0:683dbfe46abe 73 distance_cm = (double)(duration/2)*0.034 ;
hiarora 0:683dbfe46abe 74 }
hiarora 0:683dbfe46abe 75
hiarora 0:683dbfe46abe 76 void echo_duration() {
hiarora 0:683dbfe46abe 77 trig=0; // trigger low
hiarora 0:683dbfe46abe 78 wait_us(2); // wait
hiarora 0:683dbfe46abe 79 trig=1; // trigger high
hiarora 0:683dbfe46abe 80 wait_us(10);
hiarora 0:683dbfe46abe 81 trig=0; // trigger low
hiarora 0:683dbfe46abe 82 }
hiarora 0:683dbfe46abe 83
hiarora 0:683dbfe46abe 84 /*
hiarora 0:683dbfe46abe 85 Magnetometer decl and functions
hiarora 0:683dbfe46abe 86 */
hiarora 0:683dbfe46abe 87
hiarora 0:683dbfe46abe 88 LSM303DLH compass(p9, p10);
hiarora 0:683dbfe46abe 89
hiarora 0:683dbfe46abe 90
hiarora 0:683dbfe46abe 91 int main() {
hiarora 0:683dbfe46abe 92 //configure motor
hiarora 0:683dbfe46abe 93 Ticker motorTimer;
hiarora 0:683dbfe46abe 94 motorTimer.attach(&attime, motorTimerFrequency);
hiarora 0:683dbfe46abe 95 //configure sonar
hiarora 0:683dbfe46abe 96 echo.rise(&begin_timer);
hiarora 0:683dbfe46abe 97 echo.fall(&end_timer);
hiarora 0:683dbfe46abe 98 //configure compass
hiarora 0:683dbfe46abe 99 float hdg;
hiarora 0:683dbfe46abe 100 compass.setOffset(29.50, -0.50, 4.00);
hiarora 0:683dbfe46abe 101 compass.setScale(1.00, 1.03, 1.21);
hiarora 0:683dbfe46abe 102 while(1) {
hiarora 0:683dbfe46abe 103 echo_duration();
hiarora 0:683dbfe46abe 104 hdg = compass.heading((vector){0,-1,0});
hiarora 0:683dbfe46abe 105 debug.printf("Degree = %f Distance = %d Heading: %.2f \n\r", degrees, distance_cm, hdg);
hiarora 0:683dbfe46abe 106 }
hiarora 0:683dbfe46abe 107 }