This is the first part of a new series entitled "Things to do with a chipKIT™ Lenny and a QuickIO". In it, I'm going to be exploring some of the cool things you could do in just a matter of seconds using the two boards combined.
This first one is an Autoclicker.
In my spare time (of which I have plenty, obviously...) I find myself playing a number of web-based "clicker" games. Things like Cookie Clicker, etc. And after a while, I find I need to replace the microswitch in my mouse, or my finger decides to fall off and roll under the desk, which is a real pain.
So why not make something that will do the clicking for me? And do it a darn sight faster than my slow index finger can...?
By grabbing a Lenny and slapping a QuickIO on it you have all the controls you could need for configurable clicking. Add to that the new USB stack in chipKIT-core 2.x.x and in just a few lines of code, you will be clicking faster than anyone else.
To this end we will use the Mouse object to emulate a USB mouse. And we will simply ask it to click. It's as simple as that. One command is all it takes:
Mouse.click();
All the rest of the code is for turning it on and off and for setting the speed of clicking. I may as well make use of the LEDs on the QuickIO for some simple visual feedback as well, so I can see how fast it's clicking.
So here's what I came up with:
/*
* Simple Auto-Clicker for QuickIO
*
* Button A0 controls the clicking. Press it and clicking
* starts. Release it and clicking stops.
*
* Potentiometer A4 controls the delay between clicks in
* the range 0 to 255 milliseconds.
*
* The 8 LEDs count up one per click looping after 8 clicks
* to provide visual feedback.
*/
#include <Mouse.h>
void setup() {
pinMode(A0, INPUT_PULLUP);
for (uint8_t i = 2; i < 10; i++) {
pinMode(i, OUTPUT);
}
Mouse.begin();
}
void loop() {
static uint8_t clicks = 0;
if (digitalRead(A0) == LOW) {
Mouse.click();
clicks++;
if (clicks == 8) { clicks = 0; }
for (uint8_t i = 0; i < 8; i++) {
digitalWrite(2 + i, i <= clicks ? HIGH : LOW);
}
delay(analogRead(A4) >> 2);
}
}
That's pretty simple stuff, really. Start out by configuring one button as an input, and the LEDs as outputs. Then, if the button is pressed, click the mouse and delay for a while depending on the position of one of the potentiometers. Count the clicks and display them on the LEDs, looping after you get all the LEDs on.