6

I'm a bit of a noob in the Arduino area but I found an Arduino nano I bought a long time ago sitting on my shelf and collecting dust, so I taught "why not make a project". I game a lot of racing games so I wanted to make a simple ignition button with it, but every time I tried to compile or verify it, it says

Keyboard not found. Does your sketch include the line #include "Keyboard.h"

Greenonline
  • 3,152
  • 7
  • 36
  • 48
brandon bondig
  • 61
  • 1
  • 1
  • 2

3 Answers3

14

Get yourself a Arduino Leonardo, Micro or Pro Micro (or Due, Zero, M0). Those can emulate a keyboard.
Start with reading the Arduino Keyboard Mouse reference.

The Arduino Nano can not use the Arduino Keyboard Mouse library.

Since many years, there is a library called "V-USB" that requires some extra hardware and makes it possible for a ATmega328p microcontroller to act as an USB device. It is not something for a beginner.

A few years ago, Arduino has changed the way the USB is used. The NicoHood HID library makes use of the new possibilities. It makes it possible for example to have extended features for a USB keyboard, like the media keys.

For a normal keyboard and mouse, the Arduino Keyboard Mouse library will do. It will be perfect for a ignition button. But you have to buy one of those boards (Leonardo, and so on).

Jot
  • 3,276
  • 1
  • 14
  • 21
3

The solution to get a board that has built in USB support is not preferred for someone who just wants to use the boards they already have. It is possible to use a board that can communicate with your computer over serial, such as the Arduino Nano, to send data to a Python program which can then turn the input from the Arduino into keyboard presses, etc. using libraries.

For this approach, you would need to know python. The libraries to use are:

pyserial - communication with Arduino

pynput - control the computer's keyboard

threading (comes with python) - allow pyserial and pynput to work simultaneously

nicholas
  • 131
  • 1
1

You can give Keyboard Input using Arduino Nano, Uno or any other boards by doing these following steps:

  1. Sending the serial data using Serial.println() in the Arduino Script. A Demo script is given below:
#include <Arduino.h>

void setup() { Serial.begin(9600); // Start serial communication }

void loop() { int accelerator = analogRead(A0); int decelerator = analogRead(A1); int x = analogRead(A4); int y = analogRead(A5);

if (accelerator &gt; 15) {
    Serial.println(&quot;q&quot;); // Send 'q' over serial
    delay(10);
}
if (decelerator &gt; 590) {
    Serial.println(&quot;z&quot;); // Send 'z' over serial
    delay(10);
}
if (x &gt; 400) {
    Serial.println(&quot;i&quot;); // Forward
    delay(250);
}
if (x &lt; 290) {
    Serial.println(&quot;,&quot;); // Backward
    delay(250);
}
if (y &gt; 400) {
    Serial.println(&quot;j&quot;); // Left
    delay(250);
}
if (y &lt; 290) {
    Serial.println(&quot;l&quot;); // Right
    delay(250);
}

}

Then, running the python script below:

import serial
from pynput.keyboard import Controller

keyboard = Controller() arduino = serial.Serial('/dev/ttyUSB0', 9600) # Change this to match your Arduino's port

while True: data = arduino.readline().decode().strip() if data: keyboard.press(data) keyboard.release(data)

Here, change this '/dev/ttyUSB0' according to the port you're using the Arduino board.