real time control for wheelchair with interupt

Dependencies:   wheelchaircontrol

Committer:
ryanlin97
Date:
Wed Aug 15 17:13:55 2018 +0000
Revision:
6:e9b1684a9c00
Parent:
5:90bf5f0d86e9
added on and off

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryanlin97 0:7e6b349182bc 1 #include "wheelchair.h"
ryanlin97 0:7e6b349182bc 2
ryanlin97 0:7e6b349182bc 3 AnalogIn x(A0);
ryanlin97 0:7e6b349182bc 4 AnalogIn y(A1);
ryanlin97 0:7e6b349182bc 5
ryanlin97 0:7e6b349182bc 6 DigitalOut up(D2);
ryanlin97 0:7e6b349182bc 7 DigitalOut down(D3);
ryanlin97 6:e9b1684a9c00 8 DigitalOut on(D12);
ryanlin97 6:e9b1684a9c00 9 DigitalOut off(D11);
ryanlin97 6:e9b1684a9c00 10
ryanlin97 0:7e6b349182bc 11 bool manual = false;
ryanlin97 0:7e6b349182bc 12
ryanlin97 0:7e6b349182bc 13 Serial pc(USBTX, USBRX, 57600);
ryanlin97 5:90bf5f0d86e9 14
ryanlin97 0:7e6b349182bc 15 Timer t;
ryanlin97 0:7e6b349182bc 16 EventQueue queue;
ryanlin97 0:7e6b349182bc 17
ryanlin97 0:7e6b349182bc 18 //MPU9250 imu(D14, D15);
ryanlin97 0:7e6b349182bc 19 Wheelchair smart(xDir,yDir, &pc, &t);
ryanlin97 0:7e6b349182bc 20 Thread thread;
ryanlin97 0:7e6b349182bc 21
ryanlin97 5:90bf5f0d86e9 22
ryanlin97 0:7e6b349182bc 23 int main(void)
ryanlin97 0:7e6b349182bc 24 {
ryanlin97 0:7e6b349182bc 25 queue.call_every(SAMPLEFREQ, &smart, &Wheelchair::compass_thread);
ryanlin97 0:7e6b349182bc 26 t.reset();
ryanlin97 0:7e6b349182bc 27 thread.start(callback(&queue, &EventQueue::dispatch_forever));
ryanlin97 0:7e6b349182bc 28 while(1) {
ryanlin97 0:7e6b349182bc 29 if( pc.readable()) {
ryanlin97 0:7e6b349182bc 30 char c = pc.getc();
ryanlin97 0:7e6b349182bc 31
ryanlin97 0:7e6b349182bc 32 if( c == 'w') {
ryanlin97 0:7e6b349182bc 33 pc.printf("up \n");
ryanlin97 0:7e6b349182bc 34 smart.forward();
ryanlin97 0:7e6b349182bc 35 }
ryanlin97 0:7e6b349182bc 36
ryanlin97 0:7e6b349182bc 37 else if( c == 'a') {
ryanlin97 0:7e6b349182bc 38 //pc.printf("left \n");
ryanlin97 0:7e6b349182bc 39 smart.left();
ryanlin97 0:7e6b349182bc 40 }
ryanlin97 0:7e6b349182bc 41
ryanlin97 0:7e6b349182bc 42 else if( c == 'd') {
ryanlin97 0:7e6b349182bc 43 //pc.printf("right \n");
ryanlin97 0:7e6b349182bc 44 smart.right();
ryanlin97 0:7e6b349182bc 45 }
ryanlin97 0:7e6b349182bc 46
ryanlin97 0:7e6b349182bc 47 else if( c == 's') {
ryanlin97 0:7e6b349182bc 48 pc.printf("down \n");
ryanlin97 0:7e6b349182bc 49 smart.backward();
ryanlin97 0:7e6b349182bc 50 }
ryanlin97 0:7e6b349182bc 51
ryanlin97 0:7e6b349182bc 52 else if( c == 'r') {
ryanlin97 0:7e6b349182bc 53 smart.turn_right(90);
ryanlin97 0:7e6b349182bc 54 }
ryanlin97 0:7e6b349182bc 55
ryanlin97 0:7e6b349182bc 56 else if( c == 'l') {
ryanlin97 0:7e6b349182bc 57 smart.turn_left(90);
ryanlin97 0:7e6b349182bc 58 }
ryanlin97 0:7e6b349182bc 59
ryanlin97 0:7e6b349182bc 60 else if( c == 't') {
ryanlin97 0:7e6b349182bc 61 char buffer[256];
ryanlin97 0:7e6b349182bc 62 pc.printf ("Enter a long number: ");
ryanlin97 0:7e6b349182bc 63 fgets (buffer, 256, stdin);
ryanlin97 0:7e6b349182bc 64 int angle = atoi (buffer);
ryanlin97 0:7e6b349182bc 65
ryanlin97 0:7e6b349182bc 66 if(angle == 0) {
ryanlin97 0:7e6b349182bc 67 pc.printf("invalid input try again\n");
ryanlin97 0:7e6b349182bc 68 } else {
ryanlin97 0:7e6b349182bc 69 smart.pid_turn(angle);
ryanlin97 0:7e6b349182bc 70 }
ryanlin97 0:7e6b349182bc 71
ryanlin97 6:e9b1684a9c00 72 } else if(c == 'o') {
ryanlin97 6:e9b1684a9c00 73 pc.printf("turning on\n");
ryanlin97 6:e9b1684a9c00 74 on = 1;
ryanlin97 6:e9b1684a9c00 75 wait(1);
ryanlin97 6:e9b1684a9c00 76 on = 0;
ryanlin97 6:e9b1684a9c00 77 } else if(c == 'f') {
ryanlin97 6:e9b1684a9c00 78 pc.printf("turning off\n");
ryanlin97 6:e9b1684a9c00 79 off = 1;
ryanlin97 6:e9b1684a9c00 80 wait(1);
ryanlin97 6:e9b1684a9c00 81 off = 0;
ryanlin97 6:e9b1684a9c00 82 } else if( c == 'm' || manual) {
ryanlin97 0:7e6b349182bc 83 pc.printf("turning on joystick\n");
ryanlin97 0:7e6b349182bc 84 manual = true;
ryanlin97 0:7e6b349182bc 85 t.reset();
ryanlin97 0:7e6b349182bc 86 while(manual) {
ryanlin97 0:7e6b349182bc 87 smart.move(x,y);
ryanlin97 0:7e6b349182bc 88 if( pc.readable()) {
ryanlin97 0:7e6b349182bc 89 char d = pc.getc();
ryanlin97 0:7e6b349182bc 90 if( d == 'm') {
ryanlin97 0:7e6b349182bc 91 pc.printf("turning off joystick\n");
ryanlin97 0:7e6b349182bc 92 manual = false;
ryanlin97 0:7e6b349182bc 93 }
ryanlin97 0:7e6b349182bc 94 }
ryanlin97 0:7e6b349182bc 95 }
ryanlin97 0:7e6b349182bc 96 }
ryanlin97 0:7e6b349182bc 97
ryanlin97 0:7e6b349182bc 98 else {
ryanlin97 0:7e6b349182bc 99 pc.printf("none \n");
ryanlin97 0:7e6b349182bc 100 smart.stop();
ryanlin97 0:7e6b349182bc 101 }
ryanlin97 0:7e6b349182bc 102 }
ryanlin97 0:7e6b349182bc 103
ryanlin97 0:7e6b349182bc 104 else {
ryanlin97 0:7e6b349182bc 105 // pc.printf("Nothing pressed \n");
ryanlin97 0:7e6b349182bc 106 smart.stop();
ryanlin97 0:7e6b349182bc 107 }
ryanlin97 0:7e6b349182bc 108 wait(process);
ryanlin97 0:7e6b349182bc 109 }
ryanlin97 0:7e6b349182bc 110
ryanlin97 0:7e6b349182bc 111 }
ryanlin97 0:7e6b349182bc 112
ryanlin97 5:90bf5f0d86e9 113
ryanlin97 5:90bf5f0d86e9 114
ryanlin97 5:90bf5f0d86e9 115
ryanlin97 5:90bf5f0d86e9 116