mirror of
https://github.com/caperren/project_archives.git
synced 2025-11-08 13:31:14 +00:00
Added Mary's Mouse Mover
This commit is contained in:
3
marys_mouse_mover/README.md
Normal file
3
marys_mouse_mover/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Mary's Mouse Mover
|
||||||
|
This is a very simple project running on a Teensy LC that emulates a mouse moving whenver activated.
|
||||||
|
The activation method is the metal project box the teensy is housed within. A tap and hold will toggle movement, and the blue led on top shows the state of movement.
|
||||||
95
marys_mouse_mover/marys_mouse_mover.ino
Normal file
95
marys_mouse_mover/marys_mouse_mover.ino
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
const int touch_pin = 15;
|
||||||
|
const int led_pin = 13;
|
||||||
|
|
||||||
|
const float num_starting_senses = 100;
|
||||||
|
const float threshold_multiplier = 1.5;
|
||||||
|
|
||||||
|
int touch_threshold = 0;
|
||||||
|
|
||||||
|
bool touch_activated = false;
|
||||||
|
bool movement_enabled = false;
|
||||||
|
|
||||||
|
const int mouse_move_delay = 1;
|
||||||
|
|
||||||
|
const int movement_max = 300;
|
||||||
|
|
||||||
|
int current_x = 0;
|
||||||
|
int current_y = 0;
|
||||||
|
|
||||||
|
int desired_x = movement_max;
|
||||||
|
int desired_y = 0;
|
||||||
|
|
||||||
|
const int millis_before_reactivation = 500;
|
||||||
|
unsigned long millis_allowed_time = millis_before_reactivation;
|
||||||
|
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
pinMode(touch_pin, INPUT);
|
||||||
|
pinMode(led_pin, OUTPUT);
|
||||||
|
digitalWrite(led_pin, LOW);
|
||||||
|
|
||||||
|
int sum = 0;
|
||||||
|
|
||||||
|
for (int i = 0 ; i < num_starting_senses ; i++) {
|
||||||
|
sum += touchRead(touch_pin);
|
||||||
|
}
|
||||||
|
|
||||||
|
float untouched_baseline = (sum / num_starting_senses);
|
||||||
|
touch_threshold = int(untouched_baseline * threshold_multiplier);
|
||||||
|
|
||||||
|
Serial.print("Baseline: ");
|
||||||
|
Serial.print(int(untouched_baseline));
|
||||||
|
Serial.print("\tThreshold: ");
|
||||||
|
Serial.println(touch_threshold);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// Movement enable/disable
|
||||||
|
if (long(millis() - millis_allowed_time) >= 0) {
|
||||||
|
int touch_val = touchRead(touch_pin);
|
||||||
|
Serial.print("Current Value: ");
|
||||||
|
Serial.println(touch_val);
|
||||||
|
|
||||||
|
if ((touch_val > touch_threshold) and !touch_activated) {
|
||||||
|
touch_activated = true;
|
||||||
|
movement_enabled = !movement_enabled;
|
||||||
|
digitalWrite(led_pin, movement_enabled);
|
||||||
|
} else if ((touch_val < touch_threshold) and touch_activated) {
|
||||||
|
touch_activated = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
millis_allowed_time = millis() + millis_before_reactivation;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Move mouse if needed and enabled
|
||||||
|
if (movement_enabled) {
|
||||||
|
if (current_x != desired_x) {
|
||||||
|
int movement = (desired_x > current_x) ? 1 : -1;
|
||||||
|
Mouse.move(movement, 0);
|
||||||
|
current_x += movement;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current_y != desired_y) {
|
||||||
|
int movement = (desired_y > current_y) ? 1 : -1;
|
||||||
|
Mouse.move(0, movement);
|
||||||
|
current_y += movement;
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(mouse_move_delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Change mouse destination when ends reached
|
||||||
|
if (current_x == movement_max and current_y == 0) {
|
||||||
|
desired_y = movement_max;
|
||||||
|
} else if (current_x == movement_max and current_y == movement_max) {
|
||||||
|
desired_x = 0;
|
||||||
|
} else if (current_x == 0 and current_y == movement_max) {
|
||||||
|
desired_y = 0;
|
||||||
|
} else if (current_x == 0 and current_y == 0) {
|
||||||
|
desired_x = movement_max;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user