GHI Electronics
/
Official_USBPrank
The preloaded firmware shipped on the USB Prank.
main.cpp@0:01e3d602e31f, 2014-09-13 (annotated)
- Committer:
- Experiment626
- Date:
- Sat Sep 13 03:28:16 2014 +0000
- Revision:
- 0:01e3d602e31f
- Child:
- 1:2449ac218b24
Official USB Prank Firmware 1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Experiment626 | 0:01e3d602e31f | 1 | #include "mbed.h" |
Experiment626 | 0:01e3d602e31f | 2 | #include "USBMouse.h" |
Experiment626 | 0:01e3d602e31f | 3 | #include <stdlib.h> |
Experiment626 | 0:01e3d602e31f | 4 | #include <math.h> |
Experiment626 | 0:01e3d602e31f | 5 | |
Experiment626 | 0:01e3d602e31f | 6 | #define DELAY_TO_NEXT_RADIUS (rand() % 5 + 1) |
Experiment626 | 0:01e3d602e31f | 7 | #define DELAY_TO_RESTART (rand() % 30 + 1) |
Experiment626 | 0:01e3d602e31f | 8 | |
Experiment626 | 0:01e3d602e31f | 9 | USBMouse mouse; |
Experiment626 | 0:01e3d602e31f | 10 | |
Experiment626 | 0:01e3d602e31f | 11 | main() |
Experiment626 | 0:01e3d602e31f | 12 | { |
Experiment626 | 0:01e3d602e31f | 13 | static const float DELAY_TO_START = 25.0; |
Experiment626 | 0:01e3d602e31f | 14 | float DELAY_TO_NEXT_POINT = 0.001; |
Experiment626 | 0:01e3d602e31f | 15 | static const int16_t RADIUS_INC = 2; |
Experiment626 | 0:01e3d602e31f | 16 | static const int16_t ANGLE_INC = 2; |
Experiment626 | 0:01e3d602e31f | 17 | static const int8_t NUM_CIRCLE_SIZES = 4; |
Experiment626 | 0:01e3d602e31f | 18 | |
Experiment626 | 0:01e3d602e31f | 19 | int16_t x = 0; |
Experiment626 | 0:01e3d602e31f | 20 | int16_t y = 0; |
Experiment626 | 0:01e3d602e31f | 21 | int16_t angle = 0; |
Experiment626 | 0:01e3d602e31f | 22 | int16_t radius = 5; // if radius is too large, OS dependent, Windows 8 it isn't visible |
Experiment626 | 0:01e3d602e31f | 23 | int16_t recenter_radius_correction = 0; |
Experiment626 | 0:01e3d602e31f | 24 | |
Experiment626 | 0:01e3d602e31f | 25 | |
Experiment626 | 0:01e3d602e31f | 26 | int8_t circle_count; |
Experiment626 | 0:01e3d602e31f | 27 | |
Experiment626 | 0:01e3d602e31f | 28 | int nextPointFrequency; |
Experiment626 | 0:01e3d602e31f | 29 | |
Experiment626 | 0:01e3d602e31f | 30 | // Start-up Code |
Experiment626 | 0:01e3d602e31f | 31 | for (circle_count = 1; circle_count <= 5; circle_count++) |
Experiment626 | 0:01e3d602e31f | 32 | { |
Experiment626 | 0:01e3d602e31f | 33 | while (angle <= 360) |
Experiment626 | 0:01e3d602e31f | 34 | { |
Experiment626 | 0:01e3d602e31f | 35 | x = cos((double)angle*3.14/180.0)*5; |
Experiment626 | 0:01e3d602e31f | 36 | y = sin((double)angle*3.14/180.0)*5; |
Experiment626 | 0:01e3d602e31f | 37 | mouse.move(x, y); |
Experiment626 | 0:01e3d602e31f | 38 | angle += ANGLE_INC; |
Experiment626 | 0:01e3d602e31f | 39 | wait(.001); |
Experiment626 | 0:01e3d602e31f | 40 | } // draw circle |
Experiment626 | 0:01e3d602e31f | 41 | |
Experiment626 | 0:01e3d602e31f | 42 | wait(.25); |
Experiment626 | 0:01e3d602e31f | 43 | x = y = angle = 0; |
Experiment626 | 0:01e3d602e31f | 44 | } // end circle_count |
Experiment626 | 0:01e3d602e31f | 45 | |
Experiment626 | 0:01e3d602e31f | 46 | wait(DELAY_TO_START); |
Experiment626 | 0:01e3d602e31f | 47 | |
Experiment626 | 0:01e3d602e31f | 48 | while (true) |
Experiment626 | 0:01e3d602e31f | 49 | { |
Experiment626 | 0:01e3d602e31f | 50 | for (circle_count = 1; circle_count <= NUM_CIRCLE_SIZES; circle_count++) |
Experiment626 | 0:01e3d602e31f | 51 | { |
Experiment626 | 0:01e3d602e31f | 52 | while (angle <= 360) |
Experiment626 | 0:01e3d602e31f | 53 | { |
Experiment626 | 0:01e3d602e31f | 54 | x = cos((double)angle*3.14/180.0)*radius; |
Experiment626 | 0:01e3d602e31f | 55 | y = sin((double)angle*3.14/180.0)*radius; |
Experiment626 | 0:01e3d602e31f | 56 | mouse.move(x, y); |
Experiment626 | 0:01e3d602e31f | 57 | recenter_radius_correction -= x; |
Experiment626 | 0:01e3d602e31f | 58 | angle += ANGLE_INC; |
Experiment626 | 0:01e3d602e31f | 59 | wait(DELAY_TO_NEXT_POINT); |
Experiment626 | 0:01e3d602e31f | 60 | } // draw circle |
Experiment626 | 0:01e3d602e31f | 61 | |
Experiment626 | 0:01e3d602e31f | 62 | nextPointFrequency = rand() % 1000 + 1; |
Experiment626 | 0:01e3d602e31f | 63 | |
Experiment626 | 0:01e3d602e31f | 64 | if(nextPointFrequency < 100) |
Experiment626 | 0:01e3d602e31f | 65 | nextPointFrequency = 100; |
Experiment626 | 0:01e3d602e31f | 66 | |
Experiment626 | 0:01e3d602e31f | 67 | DELAY_TO_NEXT_POINT = 1/(float)nextPointFrequency; |
Experiment626 | 0:01e3d602e31f | 68 | |
Experiment626 | 0:01e3d602e31f | 69 | wait(DELAY_TO_NEXT_RADIUS); |
Experiment626 | 0:01e3d602e31f | 70 | x = y = angle = 0; |
Experiment626 | 0:01e3d602e31f | 71 | radius += RADIUS_INC; |
Experiment626 | 0:01e3d602e31f | 72 | // FIX: Change ANGLE_INCREMENT and DELAY_TO_NEXT_POINT so circle drawn relative resolution and time |
Experiment626 | 0:01e3d602e31f | 73 | mouse.move(recenter_radius_correction,0); |
Experiment626 | 0:01e3d602e31f | 74 | recenter_radius_correction = 0; |
Experiment626 | 0:01e3d602e31f | 75 | } // end circle_count |
Experiment626 | 0:01e3d602e31f | 76 | |
Experiment626 | 0:01e3d602e31f | 77 | radius = 5; |
Experiment626 | 0:01e3d602e31f | 78 | |
Experiment626 | 0:01e3d602e31f | 79 | wait(DELAY_TO_RESTART); |
Experiment626 | 0:01e3d602e31f | 80 | } |
Experiment626 | 0:01e3d602e31f | 81 | } |