I have successfully installed the USBhost library and uploaded the sketch below to my Due.
Which enables me to connect a USB numeric keypad to the native port on the Due, and read the OEM value of the keystrokes in serial monitor.
What I am hoping to do next is utilise a four digit passcode for locking and unlocking a door, none of the example sketches for passwords appear to support USBhost instead only supporting keypad library.
Can someone please point me in the right direction to a foundation sketch I can build upon.
Thanks in advance.
what you need to do is set up a variable to 'collect' the keypad presses... (as well as limiter or event, signifying that you then need to compare the entered 'password' to correctly stored/saved 'password' to see if they match.)
right now... you are doing nothing.
outputting the 'key press' to the serial monitor, which does nothing for you.
Adding to the basic, I have now produced the following.
The only problem is with the USBHost library, one key press enters all four,if i press "1" it produces "1111"
You could change your code like the one below (not tested though):
#include <KeyboardController.h>
String MyPassword = "1234\n";
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
USBHost usb;
// Attach Keyboard to native USB socket
KeyboardController keyboard(usb);
void setup() {
Serial.begin(250000);
Serial.println(" Enter Password ");
}
void keyPressed() {
char inChar = keyboard.getOemKey();
//Serial.print("OEM key: ");
//Serial.println(keyboard.getOemKey());
inputString += inChar;
if (inChar == '\n') { // If carriage return
stringComplete = true;
}
}
void loop() {
usb.Task();
if (stringComplete) {
Serial.print(" You entered this Password: ");
Serial.println(inputString);
if (inputString == MyPassword) {
// clear the string:
inputString = "";
Serial.println(" Password OK ---> Unlock the door ");
// TODO : Set a PIO to open the door
}
else {
Serial.println(" Password not OK ---> door remains closed ");
inputString = "";
}
stringComplete = false;
Serial.println(" Enter Password ");
}
}
Thank you for your help, this is exactly what I am wanting to do.
However as you can see for some reason, even whilst the password == password the sketch says it is wrong.
Can anyone see from the code what the problem is, I cant see the wood for the trees.
Thank you for your help, the enter key reports back "19" however when I enter this in the sketch it turns from blue text to black and after it uploads does not work.
I have never attempted messing with a library before, but think that because the numeric usb keypad outputs a enum KeyboardModifiers that is not mapped as below, I may be correct in thinking merging them into the library would solve my problem.
I have tried to simply merge the two together without success, how would I add these to the mapping ?
/*
Copyright (c) 2012 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef KEYBOARD_CONTROLLER_H
#define KEYBOARD_CONTROLLER_H
#include <hidboot.h>
enum KeyboardModifiers {
LeftCtrl = 1,
LeftShift = 2,
Alt = 4,
LeftCmd = 8,
RightCtrl = 16,
RightShift = 32,
AltGr = 64,
RightCmd = 128
};
class KeyboardController : public KeyboardReportParser {
public:
KeyboardController(USBHost &usb) : hostKeyboard(&usb), key(0), keyOem(0), modifiers(0) {
hostKeyboard.SetReportParser(0, this);
};
uint8_t getKey() { return key; };
uint8_t getModifiers() { return modifiers; };
uint8_t getOemKey() { return keyOem; };
protected:
virtual void OnKeyDown(uint8_t mod, uint8_t key);
virtual void OnKeyUp(uint8_t mod, uint8_t key);
private:
HIDBoot<HID_PROTOCOL_KEYBOARD> hostKeyboard;
uint8_t key, keyOem, modifiers;
};
#endif