First revision of tactile mouse code

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?

UserRevisionLine numberNew 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