Andy A / Mbed 2 deprecated buttonTest

Dependencies:   USBDevice mbed

Fork of randomSearch by Andy A

Committer:
AndyA
Date:
Thu Jan 14 17:00:53 2016 +0000
Revision:
2:15eab46e805b
Parent:
1:f2747e954f10
Child:
3:7fe4dd911b58
Added max volume command. Changed default to rickrolling when they turn capslock off.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndyA 0:499d030c3e22 1 #include "mbed.h"
AndyA 0:499d030c3e22 2 #include "USBMouseKeyboard.h"
AndyA 1:f2747e954f10 3 #include "searchText.h"
AndyA 0:499d030c3e22 4
AndyA 1:f2747e954f10 5
AndyA 1:f2747e954f10 6 /*
AndyA 1:f2747e954f10 7 Magic key combos
AndyA 0:499d030c3e22 8
AndyA 1:f2747e954f10 9 r + logo - open run box
AndyA 1:f2747e954f10 10 m + logo - minimise all
AndyA 1:f2747e954f10 11 m + logo + shift - maximise all
AndyA 1:f2747e954f10 12 right arrow + logo + shift - move current window right one monitor
AndyA 1:f2747e954f10 13 l + logo - lock screen
AndyA 1:f2747e954f10 14 */
AndyA 0:499d030c3e22 15
AndyA 1:f2747e954f10 16 #define KEY_ENTER 0x0a
AndyA 0:499d030c3e22 17
AndyA 0:499d030c3e22 18 // turn off all LEDs (some boards they glow a bit if you don't).
AndyA 0:499d030c3e22 19 // you may need to remove some depending on the board.
AndyA 1:f2747e954f10 20 //BusOut LEDs(LED1, LED2, LED3, LED4, LED5, LED6, LED7);
AndyA 1:f2747e954f10 21 int LEDs;
AndyA 1:f2747e954f10 22 USBMouseKeyboard keyboard;
AndyA 1:f2747e954f10 23
AndyA 1:f2747e954f10 24
AndyA 1:f2747e954f10 25 /// Run image searches at interval seconds for given number of repeats or -1 to run forever
AndyA 1:f2747e954f10 26 void startSearches(float interval, int number);
AndyA 1:f2747e954f10 27
AndyA 2:15eab46e805b 28 void runCommand(char *address);
AndyA 2:15eab46e805b 29
AndyA 1:f2747e954f10 30 // enter a keyboard string
AndyA 1:f2747e954f10 31 void sendString(const char *str);
AndyA 1:f2747e954f10 32
AndyA 1:f2747e954f10 33 // draw a mouse circle
AndyA 1:f2747e954f10 34 void drawCircle(float radius, float time, bool dir=true);
AndyA 1:f2747e954f10 35
AndyA 1:f2747e954f10 36 // draw a mouse line
AndyA 1:f2747e954f10 37 void drawLine(float length, float time, bool horizontal=true, bool direction=true);
AndyA 1:f2747e954f10 38
AndyA 1:f2747e954f10 39 // Turn caps lock on n seconds after they turn it off.
AndyA 1:f2747e954f10 40 void forceCaps(float delay, float checkPeriod=0.5);
AndyA 1:f2747e954f10 41
AndyA 2:15eab46e805b 42 void maxVolume();
AndyA 2:15eab46e805b 43 void capsOn();
AndyA 1:f2747e954f10 44
AndyA 1:f2747e954f10 45 main()
AndyA 1:f2747e954f10 46 {
AndyA 1:f2747e954f10 47 LEDs = 0;
AndyA 1:f2747e954f10 48 wait(10);
AndyA 1:f2747e954f10 49 while (true) {
AndyA 2:15eab46e805b 50 capsOn();
AndyA 2:15eab46e805b 51 while ((keyboard.lockStatus() & 0x02) == 0x02) {
AndyA 2:15eab46e805b 52 wait(1);
AndyA 2:15eab46e805b 53 }
AndyA 2:15eab46e805b 54 maxVolume();
AndyA 2:15eab46e805b 55 runCommand("https://www.youtube.com/watch?v=dQw4w9WgXcQ");
AndyA 2:15eab46e805b 56 drawCircle(80,15);
AndyA 2:15eab46e805b 57 drawCircle(100,15);
AndyA 2:15eab46e805b 58 drawCircle(120,15);
AndyA 2:15eab46e805b 59 wait(60*5);
AndyA 1:f2747e954f10 60 }
AndyA 1:f2747e954f10 61 }
AndyA 1:f2747e954f10 62
AndyA 1:f2747e954f10 63 int searchCount;
AndyA 1:f2747e954f10 64 int searchStop;
AndyA 1:f2747e954f10 65 Ticker searchTicker;
AndyA 1:f2747e954f10 66
AndyA 1:f2747e954f10 67 void doNextSearch()
AndyA 1:f2747e954f10 68 {
AndyA 1:f2747e954f10 69 static int searchIndex = 0;
AndyA 1:f2747e954f10 70 keyboard.keyCode('r',KEY_LOGO); // windows key an R
AndyA 1:f2747e954f10 71 wait(0.1); // delay to give the run box a chance to come up.
AndyA 1:f2747e954f10 72 sendString(searchPrefix);
AndyA 1:f2747e954f10 73 sendString( searches[searchIndex++] );
AndyA 1:f2747e954f10 74 sendString(searchSuffix);
AndyA 1:f2747e954f10 75 wait(0.05); // delay to give the run box a chance to come up.
AndyA 1:f2747e954f10 76 keyboard.putc(0x0a); // hit enter
AndyA 1:f2747e954f10 77 if (searchIndex == searchStringCount)
AndyA 1:f2747e954f10 78 searchIndex = 0;
AndyA 1:f2747e954f10 79
AndyA 1:f2747e954f10 80 searchCount++;
AndyA 1:f2747e954f10 81 if (searchCount == searchStop)
AndyA 1:f2747e954f10 82 searchTicker.attach(NULL,0);
AndyA 1:f2747e954f10 83 }
AndyA 1:f2747e954f10 84
AndyA 1:f2747e954f10 85 void startSearches(float interval, int number)
AndyA 1:f2747e954f10 86 {
AndyA 1:f2747e954f10 87 searchCount = 0;
AndyA 1:f2747e954f10 88 searchStop = number;
AndyA 1:f2747e954f10 89 searchTicker.attach(doNextSearch,interval);
AndyA 1:f2747e954f10 90 }
AndyA 0:499d030c3e22 91
AndyA 2:15eab46e805b 92 void runCommand(char *address)
AndyA 2:15eab46e805b 93 {
AndyA 2:15eab46e805b 94 keyboard.keyCode('r',KEY_LOGO); // windows key an R
AndyA 2:15eab46e805b 95 wait(0.1); // delay to give the run box a chance to come up.
AndyA 2:15eab46e805b 96 sendString(address);
AndyA 2:15eab46e805b 97 wait(0.05);
AndyA 2:15eab46e805b 98 keyboard.putc(0x0a); // hit enter
AndyA 2:15eab46e805b 99 }
AndyA 2:15eab46e805b 100
AndyA 0:499d030c3e22 101 void sendString(const char *str)
AndyA 0:499d030c3e22 102 {
AndyA 0:499d030c3e22 103 while (*str != 0) {
AndyA 0:499d030c3e22 104 keyboard.putc(*str);
AndyA 0:499d030c3e22 105 str++;
AndyA 0:499d030c3e22 106 }
AndyA 0:499d030c3e22 107 }
AndyA 0:499d030c3e22 108
AndyA 2:15eab46e805b 109 void maxVolume()
AndyA 2:15eab46e805b 110 {
AndyA 2:15eab46e805b 111 for (int i = 0; i<50; i++) {
AndyA 2:15eab46e805b 112 keyboard.mediaControl(KEY_VOLUME_UP);
AndyA 2:15eab46e805b 113 }
AndyA 2:15eab46e805b 114 }
AndyA 2:15eab46e805b 115
AndyA 1:f2747e954f10 116 void drawCircle(float radius, float time, bool dir)
AndyA 0:499d030c3e22 117 {
AndyA 0:499d030c3e22 118
AndyA 0:499d030c3e22 119 const float timeStep = 0.05;
AndyA 0:499d030c3e22 120 float currentx = 0;
AndyA 0:499d030c3e22 121 float currenty = radius;
AndyA 0:499d030c3e22 122 int steps = time/timeStep;
AndyA 0:499d030c3e22 123 float angleDelta = 2*3.14159265359 / steps;
AndyA 0:499d030c3e22 124 float xPos,yPos;
AndyA 0:499d030c3e22 125
AndyA 0:499d030c3e22 126 if (!dir)
AndyA 0:499d030c3e22 127 angleDelta = -angleDelta;
AndyA 0:499d030c3e22 128
AndyA 0:499d030c3e22 129
AndyA 0:499d030c3e22 130 for (int i = 0; i<steps; i++) {
AndyA 0:499d030c3e22 131 xPos = radius*sin(angleDelta*i);
AndyA 0:499d030c3e22 132 yPos = radius*cos(angleDelta*i);
AndyA 0:499d030c3e22 133 int xDelta = ((xPos - currentx) > 0)?(xPos - currentx) + 0.5 : (xPos - currentx) - 0.5 ;
AndyA 0:499d030c3e22 134 int yDelta = ((yPos - currenty) > 0)?(yPos - currenty) + 0.5 : (yPos - currenty) - 0.5 ;
AndyA 0:499d030c3e22 135 keyboard.move(xDelta,yDelta);
AndyA 0:499d030c3e22 136 currentx += xDelta;
AndyA 0:499d030c3e22 137 currenty += yDelta;
AndyA 0:499d030c3e22 138 wait(timeStep);
AndyA 0:499d030c3e22 139 }
AndyA 0:499d030c3e22 140 }
AndyA 0:499d030c3e22 141
AndyA 1:f2747e954f10 142 void drawLine(float length, float time, bool horizontal, bool direction)
AndyA 0:499d030c3e22 143 {
AndyA 0:499d030c3e22 144
AndyA 0:499d030c3e22 145 const float timeStep = 0.05;
AndyA 0:499d030c3e22 146 float currentPos = 0;
AndyA 0:499d030c3e22 147 int steps = time/timeStep;
AndyA 0:499d030c3e22 148 float stepSize = length / steps;
AndyA 0:499d030c3e22 149 float movement;
AndyA 0:499d030c3e22 150
AndyA 0:499d030c3e22 151 if (!direction)
AndyA 0:499d030c3e22 152 stepSize = -stepSize;
AndyA 0:499d030c3e22 153
AndyA 0:499d030c3e22 154 for (int i = 0; i<steps; i++) {
AndyA 0:499d030c3e22 155
AndyA 0:499d030c3e22 156 movement = stepSize*i - currentPos;
AndyA 0:499d030c3e22 157 int moveDelta;
AndyA 0:499d030c3e22 158 if (movement>0)
AndyA 0:499d030c3e22 159 moveDelta = movement+0.5;
AndyA 0:499d030c3e22 160 else
AndyA 0:499d030c3e22 161 moveDelta = movement-0.5;
AndyA 0:499d030c3e22 162
AndyA 0:499d030c3e22 163 if (horizontal)
AndyA 0:499d030c3e22 164 keyboard.move(moveDelta,0);
AndyA 0:499d030c3e22 165 else
AndyA 0:499d030c3e22 166 keyboard.move(0,moveDelta);
AndyA 0:499d030c3e22 167
AndyA 0:499d030c3e22 168 currentPos += moveDelta;
AndyA 0:499d030c3e22 169 wait(timeStep);
AndyA 0:499d030c3e22 170 }
AndyA 0:499d030c3e22 171 }
AndyA 0:499d030c3e22 172
AndyA 1:f2747e954f10 173 Ticker capLockTick;
AndyA 1:f2747e954f10 174 Timeout capLockTimer;
AndyA 1:f2747e954f10 175 bool capsTimerActive = false;
AndyA 1:f2747e954f10 176 float capsWaitPeriod = 60;
AndyA 1:f2747e954f10 177
AndyA 1:f2747e954f10 178 void capsOn(void)
AndyA 0:499d030c3e22 179 {
AndyA 1:f2747e954f10 180 capsTimerActive = false;
AndyA 1:f2747e954f10 181 if ((keyboard.lockStatus() & 0x02) == 0)
AndyA 1:f2747e954f10 182 keyboard.keyCode(KEY_CAPS_LOCK);
AndyA 0:499d030c3e22 183 }
AndyA 0:499d030c3e22 184
AndyA 1:f2747e954f10 185 void checkCapsLock(void)
AndyA 0:499d030c3e22 186 {
AndyA 1:f2747e954f10 187 LEDs = keyboard.lockStatus();
AndyA 1:f2747e954f10 188 if ((keyboard.lockStatus() & 0x02) == 0) {
AndyA 1:f2747e954f10 189 if (!capsTimerActive) {
AndyA 1:f2747e954f10 190 capLockTimer.attach(capsOn,capsWaitPeriod);
AndyA 1:f2747e954f10 191 capsTimerActive = true;
AndyA 1:f2747e954f10 192 }
AndyA 1:f2747e954f10 193 } else {
AndyA 1:f2747e954f10 194 if (capsTimerActive) {
AndyA 1:f2747e954f10 195 capLockTimer.detach();
AndyA 1:f2747e954f10 196 capsTimerActive = false;
AndyA 1:f2747e954f10 197 }
AndyA 0:499d030c3e22 198 }
AndyA 0:499d030c3e22 199 }
AndyA 1:f2747e954f10 200
AndyA 2:15eab46e805b 201 void forceCaps(float delay, float checkPeriod)
AndyA 2:15eab46e805b 202 {
AndyA 1:f2747e954f10 203 if (checkPeriod == 0)
AndyA 2:15eab46e805b 204 capLockTick.attach(NULL,0);
AndyA 2:15eab46e805b 205 else {
AndyA 2:15eab46e805b 206 capsWaitPeriod = delay;
AndyA 2:15eab46e805b 207 capLockTick.attach(checkCapsLock,checkPeriod);
AndyA 1:f2747e954f10 208 }
AndyA 2:15eab46e805b 209 }