From cc8940b9ec47345b734c770de460f760e0bea0fb Mon Sep 17 00:00:00 2001 From: Nico Date: Sun, 11 Jan 2015 23:10:14 +0100 Subject: [PATCH] Added HelloWorld example --- Readme.md | 10 ++++++--- examples/HelloWorld/HelloWorld.ino | 34 +++++++++++++++++++++++++++++ pictures/example.png | Bin 0 -> 21346 bytes 3 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 examples/HelloWorld/HelloWorld.ino create mode 100644 pictures/example.png diff --git a/Readme.md b/Readme.md index 24a870f..bd7f7a5 100644 --- a/Readme.md +++ b/Readme.md @@ -87,15 +87,19 @@ Same for Micro and HoodLoader2. Not all HID reports are playing well together on With the custom report you can try it out yourself. Everything you need should be in the pins_arduino.h file. ##### 3. Try the Basic HID examples for each HID device. -They are pretty much self explaining. -You can also see the *Projects/HID_Test* for an all in one example. + +![example Picture](pictures/example.png) + +You may want to start with the HelloWorld and HID_Basic examples. They are pretty much self explaining. +Ensure that always the correct HID-Core is selected. See *Project/USB-Serial* for a fully usable USB-Serial bridge and how to use the new Serial functions. In the CDC.h you can also see the new Control Line functions for advanced users. Keep in mind that the USB_ENDPOINTs for the u2 Series are set to 16 bytes, so the Serial buffer is also smaller (normally 64b). ##### 4. Deactivate USB-Core to save flash and ram (optional) -If you don't want to use the USB-Core you can also choose under *Tools/USB Core* "No USB functions" to get rid of the USB stuff and save the ram for other stuff if you don't need it. You also don't need the HID Project essentially if you don't want to use the USB functions. +If you don't want to use the USB-Core you can also choose under *Tools/USB Core* "No USB functions" to get rid of the USB stuff +and save the ram for other stuff if you don't need it. You also don't need the HID Project essentially if you don't want to use the USB functions. Due to a bad Leonardo/Micro bootloader you need to add an add an ISR into every sketch as workaround. **This is not needed for HoodLoader2 devices**, since the bootloader does a true watchdog reset on reprogramming and not a simple application jump diff --git a/examples/HelloWorld/HelloWorld.ino b/examples/HelloWorld/HelloWorld.ino new file mode 100644 index 0000000..eaa964b --- /dev/null +++ b/examples/HelloWorld/HelloWorld.ino @@ -0,0 +1,34 @@ +/* + Copyright (c) 2014 NicoHood + See the readme for credit to other people. + + Hello World Keyboard Beginner example + + Press a button to write some text to your pc. + See official and HID Project documentation for more information. +*/ + +const int pinLed = LED_BUILTIN; +const int pinButton = 2; + +void setup() { + // hardware setup + pinMode(pinLed, OUTPUT); + pinMode(pinButton, INPUT_PULLUP); + + // Sends a clean report to the host. This is important on any Arduino type. + Keyboard.begin(); +} + +void loop() { + if (digitalRead(pinButton) == LOW) { + digitalWrite(pinLed, HIGH); + + // Same use as the official library, pretty much self explaining + Keyboard.println("Hello World"); + + // simple debounce + delay(500); + digitalWrite(pinLed, LOW); + } +} diff --git a/pictures/example.png b/pictures/example.png new file mode 100644 index 0000000000000000000000000000000000000000..949047fb8dfae1186b8a131158003fe4aba683ab GIT binary patch literal 21346 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 literal 0 HcmV?d00001