diff --git a/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardLogout/KeyboardLogout.ino b/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardLogout/KeyboardLogout.ino new file mode 100644 index 000000000..adb502a34 --- /dev/null +++ b/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardLogout/KeyboardLogout.ino @@ -0,0 +1,95 @@ +/* + Keyboard logout + + This sketch demonstrates the Keyboard library. + + When you connect pin 2 to ground, it performs a logout. + It uses keyboard combinations to do this, as follows: + + On Windows, CTRL-ALT-DEL followed by ALT-l + On Ubuntu, CTRL-ALT-DEL, and ENTER + On OSX, CMD-SHIFT-q + + To wake: Spacebar. + + Circuit: + * Arduino Leonardo + * wire to connect D2 to ground. + + created 6 Mar 2012 + modified 27 Mar 2012 + by Tom Igoe + + This example is in the public domain + + http://www.arduino.cc/en/Tutorial/KeyboardLogout + */ + +#define OSX 0 +#define WINDOWS 1 +#define UBUNTU 2 + +// change this to match your platform: +int platform = OSX; + +void setup() { + // make pin 2 an input and turn on the + // pullup resistor so it goes high unless + // connected to ground: + pinMode(2, INPUT_PULLUP); + Keyboard.begin(); +} + +void loop() { + while (digitalRead(2) == HIGH) { + // do nothing until pin 2 goes low + delay(500); + } + delay(1000); + + switch (platform) { + case OSX: + Keyboard.press(KEY_LEFT_GUI); + // Shift-Q logs out: + Keyboard.press(KEY_LEFT_SHIFT); + Keyboard.press('Q'); + delay(100); + Keyboard.releaseAll(); + // enter: + Keyboard.write(KEY_RETURN); + break; + case WINDOWS: + // CTRL-ALT-DEL: + Keyboard.press(KEY_LEFT_CTRL); + Keyboard.press(KEY_LEFT_ALT); + Keyboard.press(KEY_DELETE); + delay(100); + Keyboard.releaseAll(); + //ALT-s: + delay(2000); + Keyboard.press(KEY_LEFT_ALT); + Keyboard.press('l'); + Keyboard.releaseAll(); + break; + case UBUNTU: + // CTRL-ALT-DEL: + Keyboard.press(KEY_LEFT_CTRL); + Keyboard.press(KEY_LEFT_ALT); + Keyboard.press(KEY_DELETE); + delay(1000); + Keyboard.releaseAll(); + // Enter to confirm logout: + Keyboard.write(KEY_RETURN); + break; + } +// do nothing: + while(true); +} + + + + + + + + diff --git a/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardMessage/KeyboardMessage.ino b/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardMessage/KeyboardMessage.ino new file mode 100644 index 000000000..6b226b558 --- /dev/null +++ b/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardMessage/KeyboardMessage.ino @@ -0,0 +1,47 @@ +/* + Keyboard Button test + + Sends a text string when a button is pressed. + + The circuit: + * pushbutton attached from pin 2 to +5V + * 10-kilohm resistor attached from pin 4 to ground + + created 24 Oct 2011 + modified 27 Mar 2012 + by Tom Igoe + + This example code is in the public domain. + + http://www.arduino.cc/en/Tutorial/KeyboardButton + */ + +const int buttonPin = 2; // input pin for pushbutton +int previousButtonState = HIGH; // for checking the state of a pushButton +int counter = 0; // button push counter + +void setup() { + // make the pushButton pin an input: + pinMode(buttonPin, INPUT); + // initialize control over the keyboard: + Keyboard.begin(); +} + +void loop() { + // read the pushbutton: + int buttonState = digitalRead(buttonPin); + // if the button state has changed, + if ((buttonState != previousButtonState) + // and it's currently pressed: + && (buttonState == HIGH)) { + // increment the button counter + counter++; + // type out a message + Keyboard.print("You pressed the button "); + Keyboard.print(counter); + Keyboard.println(" times."); + } + // save the current button state for comparison next time: + previousButtonState = buttonState; +} + diff --git a/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardReprogram/KeyboardReprogram.ino b/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardReprogram/KeyboardReprogram.ino new file mode 100644 index 000000000..07529bf90 --- /dev/null +++ b/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardReprogram/KeyboardReprogram.ino @@ -0,0 +1,95 @@ +/* + Arduino Programs Blink + + This sketch demonstrates the Keyboard library. + + When you connect pin 2 to ground, it creates a new + window with a key combination (CTRL-N), + then types in the Blink sketch, then auto-formats the text + using another key combination (CTRL-T), then + uploads the sketch to the currently selected Arduino using + a final key combination (CTRL-U). + + Circuit: + * Arduino Leonardo + * wire to connect D2 to ground. + + created 5 Mar 2012 + modified 29 Mar 2012 + by Tom Igoe + + This example is in the public domain + + http://www.arduino.cc/en/Tutorial/KeyboardReprogram + */ + +// use this option for OSX. +// Comment it out if using Windows or Linux: +char ctrlKey = KEY_LEFT_GUI; +// use this option for Windows and Linux. +// leave commented out if using OSX: +// char ctrlKey = KEY_LEFT_CTRL; + + +void setup() { + // make pin 2 an input and turn on the + // pullup resistor so it goes high unless + // connected to ground: + pinMode(2, INPUT_PULLUP); + // initialize control over the keyboard: + Keyboard.begin(); +} + +void loop() { + while (digitalRead(2) == HIGH) { + // do nothing until pin 2 goes low + delay(500); + } + delay(1000); + // new document: + Keyboard.press(ctrlKey); + Keyboard.press('n'); + delay(100); + Keyboard.releaseAll(); + // wait for new window to open: + delay(1000); + + // Type out "blink": + Keyboard.println("void setup() {"); + Keyboard.println("pinMode(13, OUTPUT);"); + Keyboard.println("}"); + Keyboard.println(); + Keyboard.println("void loop() {"); + Keyboard.println("digitalWrite(13, HIGH);"); + Keyboard.print("delay(3000);"); + // 3000 ms is too long. Delete it: + for (int keystrokes=0; keystrokes < 6; keystrokes++) { + delay(500); + Keyboard.write(KEY_BACKSPACE); + } + // make it 1000 instead: + Keyboard.println("1000);"); + Keyboard.println("digitalWrite(13, LOW);"); + Keyboard.println("delay(1000);"); + Keyboard.println("}"); + // tidy up: + Keyboard.press(ctrlKey); + Keyboard.press('t'); + delay(100); + Keyboard.releaseAll(); + delay(3000); + // upload code: + Keyboard.press(ctrlKey); + Keyboard.press('u'); + delay(100); + Keyboard.releaseAll(); + + // wait for the sweet oblivion of reprogramming: + while(true); +} + + + + + + diff --git a/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardSerial/KeyboardSerial.ino b/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardSerial/KeyboardSerial.ino new file mode 100644 index 000000000..7ee7f7ad7 --- /dev/null +++ b/build/shared/examples/09. USB (Leonardo only)/Keyboard/KeyboardSerial/KeyboardSerial.ino @@ -0,0 +1,36 @@ +/* + Keyboard test + + Reads a byte from the serial port, sends a keystroke back. + The sent keystroke is one higher than what's received, e.g. + if you send a, you get b, send A you get B, and so forth. + + The circuit: + * none + + created 21 Oct 2011 + modified 27 Mar 2012 + by Tom Igoe + +This example code is in the public domain. + + http://www.arduino.cc/en/Tutorial/KeyboardSerial + */ + +void setup() { + // open the serial port: +Serial.begin(9600); + // initialize control over the keyboard: + Keyboard.begin(); +} + +void loop() { + // check for incoming serial data: + if (Serial.available() > 0) { + // read incoming serial data: + char inChar = Serial.read(); + // Type the next ASCII value from what you received: + Keyboard.write(inChar+1); + } +} + diff --git a/build/shared/examples/09. USB (Leonardo only)/KeyboardAndMouseControl/KeyboardAndMouseControl.ino b/build/shared/examples/09. USB (Leonardo only)/KeyboardAndMouseControl/KeyboardAndMouseControl.ino new file mode 100644 index 000000000..bdd722ca2 --- /dev/null +++ b/build/shared/examples/09. USB (Leonardo only)/KeyboardAndMouseControl/KeyboardAndMouseControl.ino @@ -0,0 +1,94 @@ + +/* + KeyboardAndMouseControl + + Controls the mouse from five pushbuttons on an Arduino Leonardo. + + Hardware: + * 5 pushbuttons attached to D2, D3, D4, D5, D6 + + + The mouse movement is always relative. This sketch reads + four pushbuttons, and uses them to set the movement of the mouse. + + WARNING: When you use the Mouse.move() command, the Arduino takes + over your mouse! Make sure you have control before you use the mouse commands. + + created 15 Mar 2012 + modified 27 Mar 2012 + by Tom Igoe + + this code is in the public domain + + */ + +// set pin numbers for the five buttons: + +// set pin numbers for the five buttons: +const int upButton = 2; +const int downButton = 3; +const int leftButton = 4; +const int rightButton = 5; +const int mouseButton = 6; + +void setup() { // initialize the buttons' inputs: + pinMode(upButton, INPUT); + pinMode(downButton, INPUT); + pinMode(leftButton, INPUT); + pinMode(rightButton, INPUT); + pinMode(mouseButton, INPUT); + + Serial.begin(9600); + // initialize mouse control: + Mouse.begin(); + Keyboard.begin(); +} + +void loop() { + // use serial input to control the mouse: + if (Serial.available() > 0) { + char inChar = Serial.read(); + + switch (inChar) { + case 'u': + // move mouse up + Mouse.move(0, -40); + break; + case 'd': + // move mouse down + Mouse.move(0, 40); + break; + case 'l': + // move mouse left + Mouse.move(-40, 0); + break; + case 'r': + // move mouse right + Mouse.move(40, 0); + break; + case 'm': + // move mouse right + Mouse.click(MOUSE_LEFT); + break; + } + } + + // use the pushbuttons to control the keyboard: + if (digitalRead(upButton) == HIGH) { + Keyboard.write('u'); + } + if (digitalRead(downButton) == HIGH) { + Keyboard.write('d'); + } + if (digitalRead(leftButton) == HIGH) { + Keyboard.write('l'); + } + if (digitalRead(rightButton) == HIGH) { + Keyboard.write('r'); + } + if (digitalRead(mouseButton) == HIGH) { + Keyboard.write('m'); + } + +} + diff --git a/build/shared/examples/09. USB (Leonardo only)/Mouse/ButtonMouseControl/ButtonMouseControl.ino b/build/shared/examples/09. USB (Leonardo only)/Mouse/ButtonMouseControl/ButtonMouseControl.ino new file mode 100644 index 000000000..6dcaf5cdd --- /dev/null +++ b/build/shared/examples/09. USB (Leonardo only)/Mouse/ButtonMouseControl/ButtonMouseControl.ino @@ -0,0 +1,81 @@ + +/* + ButtonMouseControl + + Controls the mouse from five pushbuttons on an Arduino Leonardo. + + Hardware: + * 5 pushbuttons attached to D2, D3, D4, D5, D6 + + + The mouse movement is always relative. This sketch reads + four pushbuttons, and uses them to set the movement of the mouse. + + WARNING: When you use the Mouse.move() command, the Arduino takes + over your mouse! Make sure you have control before you use the mouse commands. + + created 15 Mar 2012 + modified 27 Mar 2012 + by Tom Igoe + + this code is in the public domain + + */ + +// set pin numbers for the five buttons: +const int upButton = 2; +const int downButton = 3; +const int leftButton = 4; +const int rightButton = 5; +const int mouseButton = 6; + +int range = 5; // output range of X or Y movement; affects movement speed +int responseDelay = 10; // response delay of the mouse, in ms + + +void setup() { + // initialize the buttons' inputs: + pinMode(upButton, INPUT); + pinMode(downButton, INPUT); + pinMode(leftButton, INPUT); + pinMode(rightButton, INPUT); + pinMode(mouseButton, INPUT); + // initialize mouse control: + Mouse.begin(); +} + +void loop() { + // read the buttons: + int upState = digitalRead(upButton); + int downState = digitalRead(downButton); + int rightState = digitalRead(rightButton); + int leftState = digitalRead(leftButton); + int clickState = digitalRead(mouseButton); + + // calculate the movement distance based on the button states: + int xDistance = (leftState - rightState)*range; + int yDistance = (upState - downState)*range; + + // if X or Y is non-zero, move: + if ((xDistance != 0) || (yDistance != 0)) { + Mouse.move(xDistance, yDistance, 0); + } + + // if the mouse button is pressed: + if (clickState == HIGH) { + // if the mouse is not pressed, press it: + if (!Mouse.isPressed(MOUSE_LEFT)) { + Mouse.press(MOUSE_LEFT); + } + } + // else the mouse button is not pressed: + else { + // if the mouse is pressed, release it: + if (Mouse.isPressed(MOUSE_LEFT)) { + Mouse.release(MOUSE_LEFT); + } + } + + // a delay so the mouse doesn't move too fast: + delay(responseDelay); +} diff --git a/build/shared/examples/09. USB (Leonardo only)/Mouse/JoystickMouseControl/JoystickMouseControl.ino b/build/shared/examples/09. USB (Leonardo only)/Mouse/JoystickMouseControl/JoystickMouseControl.ino new file mode 100644 index 000000000..5f69c707b --- /dev/null +++ b/build/shared/examples/09. USB (Leonardo only)/Mouse/JoystickMouseControl/JoystickMouseControl.ino @@ -0,0 +1,121 @@ +/* + JoystickMouseControl + + Controls the mouse from a joystick on an Arduino Leonardo. + Uses a pushbutton to turn on and off mouse control, and + a second pushbutton to click the left mouse button + + Hardware: + * 2-axis joystick connected to pins A0 and A1 + * pushbuttons connected to pin D2 and D3 + + The mouse movement is always relative. This sketch reads + two analog inputs that range from 0 to 1023 (or less on either end) + and translates them into ranges of -6 to 6. + The sketch assumes that the joystick resting values are around the + middle of the range, but that they vary within a threshold. + + WARNING: When you use the Mouse.move() command, the Arduino takes + over your mouse! Make sure you have control before you use the command. + This sketch includes a pushbutton to toggle the mouse control state, so + you can turn on and off mouse control. + + created 15 Sept 2011 + updated 28 Mar 2012 + by Tom Igoe + + this code is in the public domain + + */ + +// set pin numbers for switch, joystick axes, and LED: +const int switchPin = 2; // switch to turn on and off mouse control +const int mouseButton = 3; // input pin for the mouse pushButton +const int xAxis = A0; // joystick X axis +const int yAxis = A1; // joystick Y axis +const int ledPin = 5; // Mouse control LED + +// parameters for reading the joystick: +int range = 12; // output range of X or Y movement +int responseDelay = 5; // response delay of the mouse, in ms +int threshold = range/4; // resting threshold +int center = range/2; // resting position value + +boolean mouseIsActive = false; // whether or not to control the mouse +int lastSwitchState = LOW; // previous switch state + +void setup() { + pinMode(switchPin, INPUT); // the switch pin + pinMode(ledPin, OUTPUT); // the LED pin + // take control of the mouse: + Mouse.begin(); +} + +void loop() { + // read the switch: + int switchState = digitalRead(switchPin); + // if it's changed and it's high, toggle the mouse state: + if (switchState != lastSwitchState) { + if (switchState == HIGH) { + mouseIsActive = !mouseIsActive; + // turn on LED to indicate mouse state: + digitalWrite(ledPin, mouseIsActive); + } + } + // save switch state for next comparison: + lastSwitchState = switchState; + + // read and scale the two axes: + int xReading = readAxis(A0); + int yReading = readAxis(A1); + + // if the mouse control state is active, move the mouse: + if (mouseIsActive) { + Mouse.move(xReading, yReading, 0); + } + + // read the mouse button and click or not click: + // if the mouse button is pressed: + if (digitalRead(mouseButton) == HIGH) { + // if the mouse is not pressed, press it: + if (!Mouse.isPressed(MOUSE_LEFT)) { + Mouse.press(MOUSE_LEFT); + } + } + // else the mouse button is not pressed: + else { + // if the mouse is pressed, release it: + if (Mouse.isPressed(MOUSE_LEFT)) { + Mouse.release(MOUSE_LEFT); + } + } + + delay(responseDelay); +} + +/* + reads an axis (0 or 1 for x or y) and scales the + analog input range to a range from 0 to + */ + +int readAxis(int thisAxis) { + // read the analog input: + int reading = analogRead(thisAxis); + + // map the reading from the analog input range to the output range: + reading = map(reading, 0, 1023, 0, range); + + // if the output reading is outside from the + // rest position threshold, use it: + int distance = reading - center; + + if (abs(distance) < threshold) { + distance = 0; + } + + // return the distance for this axis: + return distance; +} + + +