Joshua Brown
/
TactileMouse
First revision of tactile mouse code
main.cpp@0:f254a3cfe0f6, 2019-04-08 (annotated)
- Committer:
- JPB515
- Date:
- Mon Apr 08 16:57:36 2019 +0000
- Revision:
- 0:f254a3cfe0f6
First publish of tactile mouse code;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JPB515 | 0:f254a3cfe0f6 | 1 | #include "mbed.h" |
JPB515 | 0:f254a3cfe0f6 | 2 | #include "tactile_mouse.hpp" |
JPB515 | 0:f254a3cfe0f6 | 3 | #include "braille_mouse.hpp" |
JPB515 | 0:f254a3cfe0f6 | 4 | #include "tactile_display.hpp" |
JPB515 | 0:f254a3cfe0f6 | 5 | #include "stepper.hpp" |
JPB515 | 0:f254a3cfe0f6 | 6 | #include <vector> |
JPB515 | 0:f254a3cfe0f6 | 7 | #include <ctime> |
JPB515 | 0:f254a3cfe0f6 | 8 | |
JPB515 | 0:f254a3cfe0f6 | 9 | // ***PINS FOR EMBEDDED PCB*** |
JPB515 | 0:f254a3cfe0f6 | 10 | DigitalOut MotorA1(PD_4); |
JPB515 | 0:f254a3cfe0f6 | 11 | DigitalOut MotorA2(PD_3); |
JPB515 | 0:f254a3cfe0f6 | 12 | DigitalOut MotorB1(PD_1); |
JPB515 | 0:f254a3cfe0f6 | 13 | DigitalOut MotorB2(PD_2); |
JPB515 | 0:f254a3cfe0f6 | 14 | DigitalOut MUXA(PD_0); |
JPB515 | 0:f254a3cfe0f6 | 15 | DigitalOut MUXB(PC_12); |
JPB515 | 0:f254a3cfe0f6 | 16 | DigitalOut MUXC(PC_11); |
JPB515 | 0:f254a3cfe0f6 | 17 | DigitalOut BOARD_MUXA(PE_6); |
JPB515 | 0:f254a3cfe0f6 | 18 | DigitalOut BOARD_MUXB(PE_5); |
JPB515 | 0:f254a3cfe0f6 | 19 | DigitalOut BOARD_MUXC(PE_4); |
JPB515 | 0:f254a3cfe0f6 | 20 | DigitalOut step(PD_5); |
JPB515 | 0:f254a3cfe0f6 | 21 | DigitalOut motorPower(PC_4); //Power enable pin 44 |
JPB515 | 0:f254a3cfe0f6 | 22 | DigitalIn reversePin(PG_0, PullDown); |
JPB515 | 0:f254a3cfe0f6 | 23 | |
JPB515 | 0:f254a3cfe0f6 | 24 | Thread displayThread; |
JPB515 | 0:f254a3cfe0f6 | 25 | bool running; |
JPB515 | 0:f254a3cfe0f6 | 26 | |
JPB515 | 0:f254a3cfe0f6 | 27 | void refreshDisplay(tactileDisplay *display){ |
JPB515 | 0:f254a3cfe0f6 | 28 | int count = 0; |
JPB515 | 0:f254a3cfe0f6 | 29 | while(running){ |
JPB515 | 0:f254a3cfe0f6 | 30 | (*display).stepDisplay(); |
JPB515 | 0:f254a3cfe0f6 | 31 | //if((count%50)==0){ |
JPB515 | 0:f254a3cfe0f6 | 32 | //removePin = !removePin; |
JPB515 | 0:f254a3cfe0f6 | 33 | //} |
JPB515 | 0:f254a3cfe0f6 | 34 | count++; |
JPB515 | 0:f254a3cfe0f6 | 35 | } |
JPB515 | 0:f254a3cfe0f6 | 36 | //Clear all latches |
JPB515 | 0:f254a3cfe0f6 | 37 | for(int m=0 ; m<8 ; m++){ |
JPB515 | 0:f254a3cfe0f6 | 38 | for(int n=0 ; n<8 ; n++){ |
JPB515 | 0:f254a3cfe0f6 | 39 | selectMotor(m,n); |
JPB515 | 0:f254a3cfe0f6 | 40 | M1stop(0.0005); |
JPB515 | 0:f254a3cfe0f6 | 41 | } |
JPB515 | 0:f254a3cfe0f6 | 42 | } |
JPB515 | 0:f254a3cfe0f6 | 43 | } |
JPB515 | 0:f254a3cfe0f6 | 44 | |
JPB515 | 0:f254a3cfe0f6 | 45 | |
JPB515 | 0:f254a3cfe0f6 | 46 | int main() { |
JPB515 | 0:f254a3cfe0f6 | 47 | |
JPB515 | 0:f254a3cfe0f6 | 48 | tactileDisplay display(8,8,3); |
JPB515 | 0:f254a3cfe0f6 | 49 | |
JPB515 | 0:f254a3cfe0f6 | 50 | step = 0; |
JPB515 | 0:f254a3cfe0f6 | 51 | motorPower = 0; |
JPB515 | 0:f254a3cfe0f6 | 52 | running = false; |
JPB515 | 0:f254a3cfe0f6 | 53 | |
JPB515 | 0:f254a3cfe0f6 | 54 | //Clear all latches |
JPB515 | 0:f254a3cfe0f6 | 55 | for(int m=0 ; m<8 ; m++){ |
JPB515 | 0:f254a3cfe0f6 | 56 | for(int n=0 ; n<8 ; n++){ |
JPB515 | 0:f254a3cfe0f6 | 57 | selectMotor(m,n); |
JPB515 | 0:f254a3cfe0f6 | 58 | M1stop(0.0005); |
JPB515 | 0:f254a3cfe0f6 | 59 | } |
JPB515 | 0:f254a3cfe0f6 | 60 | } |
JPB515 | 0:f254a3cfe0f6 | 61 | |
JPB515 | 0:f254a3cfe0f6 | 62 | motorPower = 1; |
JPB515 | 0:f254a3cfe0f6 | 63 | |
JPB515 | 0:f254a3cfe0f6 | 64 | //Establish serial connection |
JPB515 | 0:f254a3cfe0f6 | 65 | Serial pc(USBTX, USBRX); |
JPB515 | 0:f254a3cfe0f6 | 66 | |
JPB515 | 0:f254a3cfe0f6 | 67 | running = true; |
JPB515 | 0:f254a3cfe0f6 | 68 | displayThread.start(callback(refreshDisplay, &display)); |
JPB515 | 0:f254a3cfe0f6 | 69 | char xin,yin; |
JPB515 | 0:f254a3cfe0f6 | 70 | char zin[5]; |
JPB515 | 0:f254a3cfe0f6 | 71 | int x,y,z; |
JPB515 | 0:f254a3cfe0f6 | 72 | |
JPB515 | 0:f254a3cfe0f6 | 73 | while(1){ |
JPB515 | 0:f254a3cfe0f6 | 74 | if(pc.readable()){ |
JPB515 | 0:f254a3cfe0f6 | 75 | xin = pc.getc(); |
JPB515 | 0:f254a3cfe0f6 | 76 | pc.getc(); //Throw away separator |
JPB515 | 0:f254a3cfe0f6 | 77 | yin = pc.getc(); |
JPB515 | 0:f254a3cfe0f6 | 78 | pc.getc(); //Throw away separator |
JPB515 | 0:f254a3cfe0f6 | 79 | pc.scanf("%s",zin); |
JPB515 | 0:f254a3cfe0f6 | 80 | |
JPB515 | 0:f254a3cfe0f6 | 81 | //Make x integer |
JPB515 | 0:f254a3cfe0f6 | 82 | x = xin - '0'; |
JPB515 | 0:f254a3cfe0f6 | 83 | |
JPB515 | 0:f254a3cfe0f6 | 84 | //Make y integer |
JPB515 | 0:f254a3cfe0f6 | 85 | y = yin - '0'; |
JPB515 | 0:f254a3cfe0f6 | 86 | |
JPB515 | 0:f254a3cfe0f6 | 87 | //Make z integer |
JPB515 | 0:f254a3cfe0f6 | 88 | if(zin[0] == '-'){ //if negative |
JPB515 | 0:f254a3cfe0f6 | 89 | z = ((zin[1])+(zin[2]*10)+(zin[3]*100)+(zin[4]*1000))*(-1); |
JPB515 | 0:f254a3cfe0f6 | 90 | } |
JPB515 | 0:f254a3cfe0f6 | 91 | else{ //if positive |
JPB515 | 0:f254a3cfe0f6 | 92 | z = ((zin[0])+(zin[1]*10)+(zin[2]*100)+(zin[3]*1000)+(zin[4]*10000)) |
JPB515 | 0:f254a3cfe0f6 | 93 | } |
JPB515 | 0:f254a3cfe0f6 | 94 | |
JPB515 | 0:f254a3cfe0f6 | 95 | display.setTaxel(x,y,z); |
JPB515 | 0:f254a3cfe0f6 | 96 | } |
JPB515 | 0:f254a3cfe0f6 | 97 | } |
JPB515 | 0:f254a3cfe0f6 | 98 | |
JPB515 | 0:f254a3cfe0f6 | 99 | brailleCharacter(display, 0, 'e'); |
JPB515 | 0:f254a3cfe0f6 | 100 | brailleCharacter(display, 1, 'i'); |
JPB515 | 0:f254a3cfe0f6 | 101 | brailleCharacter(display, 2, 'e'); |
JPB515 | 0:f254a3cfe0f6 | 102 | |
JPB515 | 0:f254a3cfe0f6 | 103 | wait(15); |
JPB515 | 0:f254a3cfe0f6 | 104 | |
JPB515 | 0:f254a3cfe0f6 | 105 | brailleCharacter(display, 3, 'n'); |
JPB515 | 0:f254a3cfe0f6 | 106 | brailleCharacter(display, 4, 'i'); |
JPB515 | 0:f254a3cfe0f6 | 107 | brailleCharacter(display, 5, 'w'); |
JPB515 | 0:f254a3cfe0f6 | 108 | |
JPB515 | 0:f254a3cfe0f6 | 109 | wait(15); |
JPB515 | 0:f254a3cfe0f6 | 110 | |
JPB515 | 0:f254a3cfe0f6 | 111 | brailleCharacter(display, 0, 'g'); |
JPB515 | 0:f254a3cfe0f6 | 112 | brailleCharacter(display, 1, 'i'); |
JPB515 | 0:f254a3cfe0f6 | 113 | brailleCharacter(display, 2, 'b'); |
JPB515 | 0:f254a3cfe0f6 | 114 | |
JPB515 | 0:f254a3cfe0f6 | 115 | wait(15); |
JPB515 | 0:f254a3cfe0f6 | 116 | |
JPB515 | 0:f254a3cfe0f6 | 117 | brailleCharacter(display, 0, 'g'); |
JPB515 | 0:f254a3cfe0f6 | 118 | brailleCharacter(display, 1, 'o'); |
JPB515 | 0:f254a3cfe0f6 | 119 | brailleCharacter(display, 2, 'd'); |
JPB515 | 0:f254a3cfe0f6 | 120 | |
JPB515 | 0:f254a3cfe0f6 | 121 | wait(15); |
JPB515 | 0:f254a3cfe0f6 | 122 | |
JPB515 | 0:f254a3cfe0f6 | 123 | /* |
JPB515 | 0:f254a3cfe0f6 | 124 | //SQUARE |
JPB515 | 0:f254a3cfe0f6 | 125 | display.setTaxel(6,3,50); |
JPB515 | 0:f254a3cfe0f6 | 126 | display.setTaxel(3,3,50); |
JPB515 | 0:f254a3cfe0f6 | 127 | display.setTaxel(3,4,50); |
JPB515 | 0:f254a3cfe0f6 | 128 | display.setTaxel(3,5,50); |
JPB515 | 0:f254a3cfe0f6 | 129 | display.setTaxel(6,2,50); |
JPB515 | 0:f254a3cfe0f6 | 130 | display.setTaxel(6,3,50); |
JPB515 | 0:f254a3cfe0f6 | 131 | display.setTaxel(6,4,50); |
JPB515 | 0:f254a3cfe0f6 | 132 | display.setTaxel(6,5,50); |
JPB515 | 0:f254a3cfe0f6 | 133 | display.setTaxel(5,2,50); |
JPB515 | 0:f254a3cfe0f6 | 134 | display.setTaxel(5,5,50); |
JPB515 | 0:f254a3cfe0f6 | 135 | display.setTaxel(4,2,50); |
JPB515 | 0:f254a3cfe0f6 | 136 | display.setTaxel(4,5,50); |
JPB515 | 0:f254a3cfe0f6 | 137 | */ |
JPB515 | 0:f254a3cfe0f6 | 138 | /*int dist = -4000; |
JPB515 | 0:f254a3cfe0f6 | 139 | if(reversePin == 1){ dist = dist * (-1);} |
JPB515 | 0:f254a3cfe0f6 | 140 | |
JPB515 | 0:f254a3cfe0f6 | 141 | for(int i=0 ; i<7 ; ++i){ |
JPB515 | 0:f254a3cfe0f6 | 142 | for(int j=0 ; j<8 ; ++j){ |
JPB515 | 0:f254a3cfe0f6 | 143 | display.setTaxel(i,j,(rand()%50)); |
JPB515 | 0:f254a3cfe0f6 | 144 | } |
JPB515 | 0:f254a3cfe0f6 | 145 | } |
JPB515 | 0:f254a3cfe0f6 | 146 | */ |
JPB515 | 0:f254a3cfe0f6 | 147 | wait(30); |
JPB515 | 0:f254a3cfe0f6 | 148 | |
JPB515 | 0:f254a3cfe0f6 | 149 | for(int i=0 ; i<7 ; ++i){ |
JPB515 | 0:f254a3cfe0f6 | 150 | for(int j=0 ; j<8 ; ++j){ |
JPB515 | 0:f254a3cfe0f6 | 151 | display.setTaxel(i,j,0); |
JPB515 | 0:f254a3cfe0f6 | 152 | } |
JPB515 | 0:f254a3cfe0f6 | 153 | } |
JPB515 | 0:f254a3cfe0f6 | 154 | |
JPB515 | 0:f254a3cfe0f6 | 155 | wait(50); |
JPB515 | 0:f254a3cfe0f6 | 156 | |
JPB515 | 0:f254a3cfe0f6 | 157 | running = false; |
JPB515 | 0:f254a3cfe0f6 | 158 | wait(1); |
JPB515 | 0:f254a3cfe0f6 | 159 | displayThread.join(); |
JPB515 | 0:f254a3cfe0f6 | 160 | |
JPB515 | 0:f254a3cfe0f6 | 161 | //Clear all latches |
JPB515 | 0:f254a3cfe0f6 | 162 | for(int m=0 ; m<8 ; m++){ |
JPB515 | 0:f254a3cfe0f6 | 163 | for(int n=0 ; n<8 ; n++){ |
JPB515 | 0:f254a3cfe0f6 | 164 | selectMotor(m,n); |
JPB515 | 0:f254a3cfe0f6 | 165 | M1stop(0.0005); |
JPB515 | 0:f254a3cfe0f6 | 166 | } |
JPB515 | 0:f254a3cfe0f6 | 167 | } |
JPB515 | 0:f254a3cfe0f6 | 168 | } |
JPB515 | 0:f254a3cfe0f6 | 169 | |
JPB515 | 0:f254a3cfe0f6 | 170 |