Things to do with a chipKIT™ Lenny and a QuickIO. No. 1: Autoclicker

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.

Things to do with a chipKIT™ Lenny and a QuickIO. No. 2: Virtual Mouse