3rd instalment of car automation

Dependencies:   mbed

Committer:
Kaikestu
Date:
Fri Feb 12 12:57:20 2010 +0000
Revision:
0:c6cbcb90e098

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kaikestu 0:c6cbcb90e098 1 #include "mbed.h"
Kaikestu 0:c6cbcb90e098 2 #include "Servo.h"
Kaikestu 0:c6cbcb90e098 3 #include "SRF05.h"
Kaikestu 0:c6cbcb90e098 4
Kaikestu 0:c6cbcb90e098 5 Servo motor (p21);
Kaikestu 0:c6cbcb90e098 6 Servo turn (p22);
Kaikestu 0:c6cbcb90e098 7
Kaikestu 0:c6cbcb90e098 8 SRF05 front (p24,p23);
Kaikestu 0:c6cbcb90e098 9 SRF05 back (p26,p25);
Kaikestu 0:c6cbcb90e098 10
Kaikestu 0:c6cbcb90e098 11 DigitalOut b (p20);
Kaikestu 0:c6cbcb90e098 12 DigitalOut led1 (LED1);
Kaikestu 0:c6cbcb90e098 13 DigitalOut led2 (LED2);
Kaikestu 0:c6cbcb90e098 14
Kaikestu 0:c6cbcb90e098 15 LocalFileSystem local("local");
Kaikestu 0:c6cbcb90e098 16 InterruptIn w(p16);
Kaikestu 0:c6cbcb90e098 17 Timer timer;
Kaikestu 0:c6cbcb90e098 18
Kaikestu 0:c6cbcb90e098 19 void backward (float);
Kaikestu 0:c6cbcb90e098 20 void forward (float);
Kaikestu 0:c6cbcb90e098 21 void right (void);
Kaikestu 0:c6cbcb90e098 22 void left (void);
Kaikestu 0:c6cbcb90e098 23 void reset (void);
Kaikestu 0:c6cbcb90e098 24 void stop (void);
Kaikestu 0:c6cbcb90e098 25
Kaikestu 0:c6cbcb90e098 26
Kaikestu 0:c6cbcb90e098 27 //servo vars
Kaikestu 0:c6cbcb90e098 28 int i = 0;
Kaikestu 0:c6cbcb90e098 29 int j = 0;
Kaikestu 0:c6cbcb90e098 30
Kaikestu 0:c6cbcb90e098 31 //timer/sensor vars
Kaikestu 0:c6cbcb90e098 32 int count;
Kaikestu 0:c6cbcb90e098 33 int begin;
Kaikestu 0:c6cbcb90e098 34 int end;
Kaikestu 0:c6cbcb90e098 35 int writeBegin;
Kaikestu 0:c6cbcb90e098 36 int writeEnd;
Kaikestu 0:c6cbcb90e098 37 int single_spin;
Kaikestu 0:c6cbcb90e098 38 int ws;
Kaikestu 0:c6cbcb90e098 39 //const int wheel = 257; //in mm
Kaikestu 0:c6cbcb90e098 40 //int Tdist = 0;
Kaikestu 0:c6cbcb90e098 41
Kaikestu 0:c6cbcb90e098 42 //intrupt program exicuted
Kaikestu 0:c6cbcb90e098 43 void trigger() {
Kaikestu 0:c6cbcb90e098 44
Kaikestu 0:c6cbcb90e098 45 begin = timer.read_ms();
Kaikestu 0:c6cbcb90e098 46 single_spin = begin - end;
Kaikestu 0:c6cbcb90e098 47 end = timer.read_ms();
Kaikestu 0:c6cbcb90e098 48
Kaikestu 0:c6cbcb90e098 49
Kaikestu 0:c6cbcb90e098 50 writeBegin = timer.read_ms();
Kaikestu 0:c6cbcb90e098 51 FILE *fp = fopen("/local/out.csv", "a");
Kaikestu 0:c6cbcb90e098 52 count = count + 1;
Kaikestu 0:c6cbcb90e098 53 //myled2 = !myled2;
Kaikestu 0:c6cbcb90e098 54 fprintf(fp, "%d, %d,%d\n", count, single_spin, ws);
Kaikestu 0:c6cbcb90e098 55 fclose(fp);
Kaikestu 0:c6cbcb90e098 56
Kaikestu 0:c6cbcb90e098 57 writeEnd = timer.read_ms();
Kaikestu 0:c6cbcb90e098 58 ws = writeEnd - writeBegin;
Kaikestu 0:c6cbcb90e098 59 end = end - ws;
Kaikestu 0:c6cbcb90e098 60
Kaikestu 0:c6cbcb90e098 61 }
Kaikestu 0:c6cbcb90e098 62
Kaikestu 0:c6cbcb90e098 63
Kaikestu 0:c6cbcb90e098 64 int main() {
Kaikestu 0:c6cbcb90e098 65
Kaikestu 0:c6cbcb90e098 66 timer.start(); //start timer
Kaikestu 0:c6cbcb90e098 67 w.rise(&trigger); //set trigger
Kaikestu 0:c6cbcb90e098 68
Kaikestu 0:c6cbcb90e098 69 b = 0;
Kaikestu 0:c6cbcb90e098 70 reset();
Kaikestu 0:c6cbcb90e098 71
Kaikestu 0:c6cbcb90e098 72 //main loop
Kaikestu 0:c6cbcb90e098 73 while (1) {
Kaikestu 0:c6cbcb90e098 74
Kaikestu 0:c6cbcb90e098 75 //init
Kaikestu 0:c6cbcb90e098 76 i = front.read();
Kaikestu 0:c6cbcb90e098 77 j = back.read();
Kaikestu 0:c6cbcb90e098 78
Kaikestu 0:c6cbcb90e098 79
Kaikestu 0:c6cbcb90e098 80 //can go forward?
Kaikestu 0:c6cbcb90e098 81 if (i > 100) {
Kaikestu 0:c6cbcb90e098 82 while (i > 100) {
Kaikestu 0:c6cbcb90e098 83
Kaikestu 0:c6cbcb90e098 84 forward(20);
Kaikestu 0:c6cbcb90e098 85 i = front.read();
Kaikestu 0:c6cbcb90e098 86 j = back.read();
Kaikestu 0:c6cbcb90e098 87 }
Kaikestu 0:c6cbcb90e098 88
Kaikestu 0:c6cbcb90e098 89 stop();
Kaikestu 0:c6cbcb90e098 90 }
Kaikestu 0:c6cbcb90e098 91
Kaikestu 0:c6cbcb90e098 92 //can it turn to avoid?
Kaikestu 0:c6cbcb90e098 93 if (i > 10 && i < 100) {
Kaikestu 0:c6cbcb90e098 94 led1 = 1;
Kaikestu 0:c6cbcb90e098 95 while (i > 10 && i < 100) {
Kaikestu 0:c6cbcb90e098 96
Kaikestu 0:c6cbcb90e098 97 forward(20);
Kaikestu 0:c6cbcb90e098 98 turn.write(0);
Kaikestu 0:c6cbcb90e098 99
Kaikestu 0:c6cbcb90e098 100 i = front.read();
Kaikestu 0:c6cbcb90e098 101 j = back.read();
Kaikestu 0:c6cbcb90e098 102 }
Kaikestu 0:c6cbcb90e098 103 led1 = 0;
Kaikestu 0:c6cbcb90e098 104 stop();
Kaikestu 0:c6cbcb90e098 105 }
Kaikestu 0:c6cbcb90e098 106
Kaikestu 0:c6cbcb90e098 107 //is there room to ververse and turn?
Kaikestu 0:c6cbcb90e098 108 if (i < 20 && j > 10) {
Kaikestu 0:c6cbcb90e098 109 led2 = 1;
Kaikestu 0:c6cbcb90e098 110 while (i < 20 && j > 10) {
Kaikestu 0:c6cbcb90e098 111
Kaikestu 0:c6cbcb90e098 112 backward(20);
Kaikestu 0:c6cbcb90e098 113 turn.write(1);
Kaikestu 0:c6cbcb90e098 114
Kaikestu 0:c6cbcb90e098 115 i = front.read();
Kaikestu 0:c6cbcb90e098 116 j = back.read();
Kaikestu 0:c6cbcb90e098 117 }
Kaikestu 0:c6cbcb90e098 118 led2 = 0;
Kaikestu 0:c6cbcb90e098 119 stop();
Kaikestu 0:c6cbcb90e098 120 }
Kaikestu 0:c6cbcb90e098 121 }
Kaikestu 0:c6cbcb90e098 122 }
Kaikestu 0:c6cbcb90e098 123
Kaikestu 0:c6cbcb90e098 124 void reset (void) {
Kaikestu 0:c6cbcb90e098 125 turn.write(0.5);
Kaikestu 0:c6cbcb90e098 126 motor.write(0.48);
Kaikestu 0:c6cbcb90e098 127 }
Kaikestu 0:c6cbcb90e098 128
Kaikestu 0:c6cbcb90e098 129 // 0.5 = 0 speed & 0 = full speed
Kaikestu 0:c6cbcb90e098 130 void forward (float speed) {
Kaikestu 0:c6cbcb90e098 131 float y = speed / 100;
Kaikestu 0:c6cbcb90e098 132 float x = y * 0.5;
Kaikestu 0:c6cbcb90e098 133 float z = 0.5 - x;
Kaikestu 0:c6cbcb90e098 134
Kaikestu 0:c6cbcb90e098 135 motor.write(z);
Kaikestu 0:c6cbcb90e098 136 }
Kaikestu 0:c6cbcb90e098 137
Kaikestu 0:c6cbcb90e098 138 // 0.5 = 0 speed & 1 = full speed
Kaikestu 0:c6cbcb90e098 139
Kaikestu 0:c6cbcb90e098 140 void backward (float speed) {
Kaikestu 0:c6cbcb90e098 141 float y = speed / 100;
Kaikestu 0:c6cbcb90e098 142 float x = y * 0.5;
Kaikestu 0:c6cbcb90e098 143 float z = 0.5 + x;
Kaikestu 0:c6cbcb90e098 144
Kaikestu 0:c6cbcb90e098 145 motor.write(z);
Kaikestu 0:c6cbcb90e098 146 }
Kaikestu 0:c6cbcb90e098 147
Kaikestu 0:c6cbcb90e098 148 // 0 = right 0.5 = straight 1 = left
Kaikestu 0:c6cbcb90e098 149 void left (void) {
Kaikestu 0:c6cbcb90e098 150 turn.write(1);
Kaikestu 0:c6cbcb90e098 151 }
Kaikestu 0:c6cbcb90e098 152 void right (void) {
Kaikestu 0:c6cbcb90e098 153 turn.write(0);
Kaikestu 0:c6cbcb90e098 154 }
Kaikestu 0:c6cbcb90e098 155
Kaikestu 0:c6cbcb90e098 156 void stop (void) {
Kaikestu 0:c6cbcb90e098 157 b = 1;
Kaikestu 0:c6cbcb90e098 158 wait(0.3);
Kaikestu 0:c6cbcb90e098 159 reset();
Kaikestu 0:c6cbcb90e098 160 wait(0.1);
Kaikestu 0:c6cbcb90e098 161 b = 0;
Kaikestu 0:c6cbcb90e098 162 wait(1);
Kaikestu 0:c6cbcb90e098 163 }