Robot that currently does nothing

Dependencies:   4DGL-uLCD-SE SDFileSystem ShiftBrite mbed-rtos mbed wave_player Motor

Committer:
jplager3
Date:
Thu Mar 16 01:28:27 2017 +0000
Revision:
8:cde09ae38be7
Parent:
7:df218a6a1a01
Child:
9:37bb5f0e2975
Successful independent control of both motors.; Issue: Left motor runs at max speed for ~1s on startup and idk why.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jplager3 0:ada50658d850 1 #include "mbed.h"
jplager3 0:ada50658d850 2 #include "rtos.h"
jplager3 0:ada50658d850 3 #include "uLCD_4DGL.h"
jplager3 0:ada50658d850 4 //#include "ShiftBrite.h"
jplager3 0:ada50658d850 5 #include "SDFileSystem.h"
jplager3 0:ada50658d850 6 #include "wave_player.h"
jplager3 8:cde09ae38be7 7 #include "Motor.h"
jplager3 0:ada50658d850 8
jplager3 0:ada50658d850 9 Mutex mutex; //
jplager3 0:ada50658d850 10 Mutex mutex2; //
jplager3 0:ada50658d850 11 DigitalOut led1(LED1);
jplager3 0:ada50658d850 12 DigitalOut led2(LED2);
jplager3 0:ada50658d850 13 DigitalOut led3(LED3);
jplager3 0:ada50658d850 14 DigitalOut led4(LED4);
jplager3 0:ada50658d850 15 Thread thread1;
jplager3 0:ada50658d850 16 Thread thread2;
jplager3 0:ada50658d850 17 Thread thread3;
jplager3 0:ada50658d850 18 Thread thread4;
jplager3 0:ada50658d850 19 SPI spi(p11, p12, p13);
jplager3 0:ada50658d850 20 uLCD_4DGL uLCD(p28, p27, p30);
jplager3 0:ada50658d850 21 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card
jplager3 0:ada50658d850 22 AnalogOut DACout(p18); //must be p18
CRaslawski 5:6ca141fc6c4e 23 AnalogIn IR(p20);
jplager3 0:ada50658d850 24 FILE *wave_file = NULL; //global bc its gotta be changed by Main while running in child thread
CRaslawski 6:21c5a7cf63de 25 FILE *wave_file2 = NULL;
jplager3 0:ada50658d850 26 wave_player waver(&DACout); //create wave_player object for speaker
jplager3 8:cde09ae38be7 27 //create objects for Motor Control
jplager3 8:cde09ae38be7 28 //PwmOut motorL(p21); // doesnt seem to work
jplager3 8:cde09ae38be7 29 //Motor Left(p21, p12, p11); //, p6, p5, 1); // pwm, fwd, rev, can brake
jplager3 8:cde09ae38be7 30 Motor Left(p21, p14, p13); // green wires. pwm, fwd, rev, add ", 1" for braking
jplager3 8:cde09ae38be7 31 Motor Right(p22, p12, p11); // red wires
jplager3 0:ada50658d850 32 void LCD_thread1() {
jplager3 0:ada50658d850 33 while(1){
jplager3 0:ada50658d850 34 mutex.lock();
jplager3 0:ada50658d850 35 uLCD.filled_circle(64, 64, 12, 0xFF0000);
jplager3 0:ada50658d850 36 mutex.unlock();
jplager3 0:ada50658d850 37 wait(.5);
jplager3 0:ada50658d850 38 mutex.lock();
jplager3 0:ada50658d850 39 uLCD.filled_circle(64, 64, 12, 0x0000FF);
jplager3 0:ada50658d850 40 mutex.unlock();
jplager3 0:ada50658d850 41 wait(.5);
jplager3 0:ada50658d850 42 }
jplager3 0:ada50658d850 43 }
jplager3 0:ada50658d850 44 void sound_thread(){
CRaslawski 4:589e4a2028a7 45 while(1) {
CRaslawski 4:589e4a2028a7 46 //FILE *wave_file;
CRaslawski 4:589e4a2028a7 47 wave_file=fopen("/sd/vacuum.wav","r");
CRaslawski 4:589e4a2028a7 48 if (wave_file == NULL){
CRaslawski 6:21c5a7cf63de 49 led1=led4 = 1; // if file read error, outside LEDs are on
CRaslawski 6:21c5a7cf63de 50 led2=led3 = 0;
CRaslawski 4:589e4a2028a7 51 }
CRaslawski 4:589e4a2028a7 52 waver.play(wave_file);
CRaslawski 4:589e4a2028a7 53 fclose(wave_file);
jplager3 0:ada50658d850 54 }
jplager3 0:ada50658d850 55 }
CRaslawski 5:6ca141fc6c4e 56
CRaslawski 6:21c5a7cf63de 57 void beep(){
CRaslawski 6:21c5a7cf63de 58 wave_file2=fopen("/sd/beep.wav","r");
CRaslawski 6:21c5a7cf63de 59 if(wave_file2 == NULL) {
CRaslawski 6:21c5a7cf63de 60 led1=led4 = 0; // if file read error, inside LEDs are on
CRaslawski 6:21c5a7cf63de 61 led2=led3 = 0;
CRaslawski 6:21c5a7cf63de 62 }
CRaslawski 6:21c5a7cf63de 63 waver.play(wave_file2);
CRaslawski 6:21c5a7cf63de 64 fclose(wave_file2);
CRaslawski 6:21c5a7cf63de 65 }
CRaslawski 6:21c5a7cf63de 66
jplager3 0:ada50658d850 67 int main() {
jplager3 8:cde09ae38be7 68 Left.speed(0.0);
jplager3 8:cde09ae38be7 69 Right.speed(0.0);
jplager3 0:ada50658d850 70 //thread1.start(IR_thread); // read in IR data
jplager3 0:ada50658d850 71 thread2.start(LCD_thread1);
jplager3 0:ada50658d850 72 //thread3.start(Motor_thread);
jplager3 0:ada50658d850 73 thread4.start(sound_thread);
jplager3 0:ada50658d850 74
CRaslawski 5:6ca141fc6c4e 75 while(1){
jplager3 8:cde09ae38be7 76 //motor testing
jplager3 8:cde09ae38be7 77 //motorL.write(.8);
jplager3 8:cde09ae38be7 78
jplager3 8:cde09ae38be7 79 for(float i=0.5;i>0.0;i-=0.1){
jplager3 8:cde09ae38be7 80 Left.speed(i);
jplager3 8:cde09ae38be7 81 Right.speed(-i);
jplager3 8:cde09ae38be7 82 wait(0.75);
jplager3 8:cde09ae38be7 83 }
jplager3 8:cde09ae38be7 84
CRaslawski 5:6ca141fc6c4e 85 //IR testing
CRaslawski 5:6ca141fc6c4e 86 if(IR>0.3 && IR<0.5) {
CRaslawski 5:6ca141fc6c4e 87 led1=1;
CRaslawski 5:6ca141fc6c4e 88 led2=led3=led4=0;
CRaslawski 5:6ca141fc6c4e 89 } else if (IR>0.5 && IR< 0.7) {
CRaslawski 5:6ca141fc6c4e 90 led1=led2=1;
CRaslawski 5:6ca141fc6c4e 91 led3=led4=0;
CRaslawski 5:6ca141fc6c4e 92 } else if (IR>0.7 && IR<0.9) {
CRaslawski 5:6ca141fc6c4e 93 led1=led2=led3=1;
CRaslawski 5:6ca141fc6c4e 94 led4=0;
CRaslawski 6:21c5a7cf63de 95 } else if(IR>0.9){ //collision threshold seems to be the same from IR=0.8 to IR=0.95
CRaslawski 6:21c5a7cf63de 96 led1=led2=led3=led4=1;
CRaslawski 6:21c5a7cf63de 97 fclose(wave_file);
CRaslawski 6:21c5a7cf63de 98 thread4.terminate();
CRaslawski 6:21c5a7cf63de 99 thread4.start(beep);
CRaslawski 6:21c5a7cf63de 100 /* reverse motors and turn Roomba here
CRaslawski 6:21c5a7cf63de 101 *
CRaslawski 6:21c5a7cf63de 102 *
CRaslawski 6:21c5a7cf63de 103 *
CRaslawski 6:21c5a7cf63de 104 *
CRaslawski 6:21c5a7cf63de 105 */
jplager3 8:cde09ae38be7 106 //motorL.write(.5);
jplager3 7:df218a6a1a01 107 // write reverse values to the motors for N rotations
jplager3 7:df218a6a1a01 108 // execute turn by stopping one wheel, and turning the other (trial and error to find exact rotation?)
jplager3 7:df218a6a1a01 109 // jump back to normal behavior
CRaslawski 6:21c5a7cf63de 110 wait(5); //wait for beeping to finish
CRaslawski 6:21c5a7cf63de 111 fclose(wave_file2);
CRaslawski 6:21c5a7cf63de 112 thread4.terminate();
CRaslawski 6:21c5a7cf63de 113 thread4.start(sound_thread);
CRaslawski 5:6ca141fc6c4e 114 } else led1=led2=led3=led4=0;
jplager3 0:ada50658d850 115 }
jplager3 0:ada50658d850 116 // use mutex to lock getc(), printf(), scanf()
jplager3 0:ada50658d850 117 // don't unlock until you've checked that it's readable()
jplager3 0:ada50658d850 118 }