{"id":37479,"date":"2025-08-01T12:03:56","date_gmt":"2025-08-01T17:03:56","guid":{"rendered":"https:\/\/www.dmcinfo.com\/?p=37479"},"modified":"2025-12-23T09:45:14","modified_gmt":"2025-12-23T14:45:14","slug":"arduino-nano-r4-usb-hid-functionality-and-first-impressions","status":"publish","type":"post","link":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/","title":{"rendered":"Arduino Nano R4 USB HID\u00a0Functionality and First Impressions"},"content":{"rendered":"\n<p>Arduino released the <a href=\"https:\/\/docs.arduino.cc\/hardware\/nano-r4\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nano R4<\/a> on July 25, 2025, powered by the same RA4M1 microcontroller that\u2019s at the core of the popular UNO R4 boards. The board features 256 kB Flash, 32 kB SRAM and an 8 kB EEPROM, all running at 48 MHz with a built-in real-time clock (RTC), 14-bit ADC and a 12-bit DAC. &nbsp;In addition to a standard set of peripherals it also features UCB-C with HID support, CAN, a built-in OPAMP and the standard Qwiic I\u00b2C Connector.&nbsp;<\/p>\n\n\n\n<p>The form factor is the same as other Nanos although the storage and speed have increased significantly. The focus for this article is on the USB HID functionality supported by this new design, along with the ability to create a simple keyboard wedge using the Nano R4.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"900\" height=\"600\" src=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01113425\/Arduino-Nano-R4-box.jpg\" alt=\"Arduino-Nano-R4\" class=\"wp-image-37484\" style=\"width:500px\" srcset=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01113425\/Arduino-Nano-R4-box.jpg 900w, https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01113425\/Arduino-Nano-R4-box-300x200.jpg 300w, https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01113425\/Arduino-Nano-R4-box-768x512.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><figcaption class=\"wp-element-caption\"><em>Arduino Nano R4 box and included parts<\/em><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-keyboard-wedge\">Keyboard Wedge<\/h2>\n\n\n\n<p>A keyboard wedge is a device that uses HID to mimic a keyboard without one being present. This is a common use case in industrial applications such as barcode scanners, sensor logging, and various automations when inputs are required. No special software is needed as the computer thinks it is a keyboard that is plugged in and making the inputs. This feature of the new design can also be used to make a mouse wedge which would mimic a mouse\u2019s inputs on a computer. Any program that has an area to input text (Excel, Chrome, Word, Notepad, etc.) can be used with an HID like the Arduino Nano R4. &nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-keyboard-wedge-example\">Keyboard Wedge Example<\/h2>\n\n\n\n<p>To illustrate the capability and functionality of the wedge, a demonstration has been built using the following:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Arduino Nano R4&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tactile Button&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ultra-sonic Sensor&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>If the button is pressed, the reading from the ultra-sonic sensor is read and formatted into a line like this \u201cDistance: X cm\u201d where the X is the current distance measured by the sensor. If I were to open any area on my computer in which text can be entered, Excel for example, then the above line would print into a new cell on each cycle. The speed can also be changed within the code, which can be found below. &nbsp;<\/p>\n\n\n\n<p>This logic can be applied to many other use cases and sensors. The user can decide how they need their keyboard wedge to work. As mentioned previously, a mouse wedge is also an option, though it is often not as practical except in some niche cases. A sample code is provided to see the effect of a mouse wedge, in a fun way! This code spirals the mouse in and out as long as the Arduino Nano is connected to the PC, the code can be found below.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-keyboard-wedge-code\">Keyboard Wedge Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e\"><span style=\"background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e\">JavaScript<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>#include &lt;Keyboard.h> \n\n#define LOOP_TIME_MS 500 \n\nconst int trigPin = 3; \n\nconst int echoPin = 4; \n\nconst int buttonPin = 2; \n\n  \n\nvoid setup() { \n\n  pinMode(trigPin, OUTPUT); \n\n  pinMode(echoPin, INPUT); \n\n  pinMode(buttonPin, INPUT_PULLUP); \/\/ Use internal pull-up resistor \n\n  \n\n  Keyboard.begin(); \n\n  delay(1000); \/\/ Wait for USB to stabilize \n\n} \n\n  \n\nvoid loop() { \n\n  \/\/ Check if button is pressed (LOW due to pull-up config) \n\n  if (digitalRead(buttonPin) == LOW) { \n\n    long duration; \n\n    int distance; \n\n  \n\n    \/\/ Send ultrasonic pulse \n\n    digitalWrite(trigPin, LOW); \n\n    delayMicroseconds(2); \n\n    digitalWrite(trigPin, HIGH); \n\n    delayMicroseconds(10); \n\n    digitalWrite(trigPin, LOW); \n\n  \n\n    \/\/ Read echo time \n\n    duration = pulseIn(echoPin, HIGH); \n\n  \n\n    \/\/ Calculate distance in cm \n\n    distance = duration * 0.034 \/ 2; \n\n  \n\n    \/\/ Send distance as keystrokes \n\n    Keyboard.print(\"Distance: \"); \n\n    Keyboard.print(distance); \n\n    Keyboard.println(\" cm\"); \n\n  \n\n    \/\/ Debounce delay so it doesn't repeat too fast \n\n    delay(LOOP_TIME_MS); \n\n  } \n\n} <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">#<\/span><span style=\"color: #9CDCFE\">include<\/span><span style=\"color: #D4D4D4\"> &lt;<\/span><span style=\"color: #9CDCFE\">Keyboard<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #9CDCFE\">h<\/span><span style=\"color: #D4D4D4\">&gt; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">#<\/span><span style=\"color: #9CDCFE\">define<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">LOOP_TIME_MS<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">500<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">int<\/span><span style=\"color: #D4D4D4\"> trigPin = <\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">int<\/span><span style=\"color: #D4D4D4\"> echoPin = <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">int<\/span><span style=\"color: #D4D4D4\"> buttonPin = <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">void<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">setup<\/span><span style=\"color: #D4D4D4\">() { <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">pinMode<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">trigPin<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">OUTPUT<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">pinMode<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">echoPin<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">INPUT<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">pinMode<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">buttonPin<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">INPUT_PULLUP<\/span><span style=\"color: #D4D4D4\">); <\/span><span style=\"color: #6A9955\">\/\/ Use internal pull-up resistor <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">Keyboard<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">begin<\/span><span style=\"color: #D4D4D4\">(); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">delay<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">1000<\/span><span style=\"color: #D4D4D4\">); <\/span><span style=\"color: #6A9955\">\/\/ Wait for USB to stabilize <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">} <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">void<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">loop<\/span><span style=\"color: #D4D4D4\">() { <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #6A9955\">\/\/ Check if button is pressed (LOW due to pull-up config) <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #DCDCAA\">digitalRead<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">buttonPin<\/span><span style=\"color: #D4D4D4\">) == <\/span><span style=\"color: #4FC1FF\">LOW<\/span><span style=\"color: #D4D4D4\">) { <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">long<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">duration<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">int<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">distance<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #6A9955\">\/\/ Send ultrasonic pulse <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">digitalWrite<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">trigPin<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">LOW<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">delayMicroseconds<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">digitalWrite<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">trigPin<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">HIGH<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">delayMicroseconds<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">digitalWrite<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">trigPin<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">LOW<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #6A9955\">\/\/ Read echo time <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">duration<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">pulseIn<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">echoPin<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">HIGH<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #6A9955\">\/\/ Calculate distance in cm <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">distance<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #9CDCFE\">duration<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #B5CEA8\">0.034<\/span><span style=\"color: #D4D4D4\"> \/ <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #6A9955\">\/\/ Send distance as keystrokes <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Keyboard<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">print<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;Distance: &quot;<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Keyboard<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">print<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">distance<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Keyboard<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">println<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot; cm&quot;<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #6A9955\">\/\/ Debounce delay so it doesn&#39;t repeat too fast <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">delay<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #4FC1FF\">LOOP_TIME_MS<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  } <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">} <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-mouse-wedge-code\">Mouse Wedge Code<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e\"><span style=\"background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e\">JavaScript<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>#include &lt;Mouse.h> \n\n#include &lt;math.h> \n\n  \n\nfloat angle = 0.0; \n\nfloat radius = 0.0; \n\nconst float maxRadius = 50.0; \n\nconst float minRadius = 5.0; \n\nconst float angleStep = 0.3; \n\nconst float radiusStep = 0.1; \n\nbool expanding = true; \n\n  \n\nvoid setup() { \n\n  Mouse.begin(); \n\n  delay(1000); \/\/ Let USB settle \n\n} \n\n  \n\nvoid loop() { \n\n  \/\/ Calculate position in polar coordinates \n\n  int dx = int(radius * cos(angle)); \n\n  int dy = int(radius * sin(angle)); \n\n  \n\n  \/\/ Move the mouse \n\n  Mouse.move(dx, dy, 0); \n\n  \n\n  \/\/ Advance angle \n\n  angle += angleStep; \n\n  \n\n  \/\/ Adjust radius \n\n  if (expanding) { \n\n    radius += radiusStep; \n\n    if (radius >= maxRadius) expanding = false; \n\n  } else { \n\n    radius -= radiusStep; \n\n    if (radius &lt;= minRadius) expanding = true; \n\n  } \n\n  delay(10); \n\n} <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">#<\/span><span style=\"color: #9CDCFE\">include<\/span><span style=\"color: #D4D4D4\"> &lt;<\/span><span style=\"color: #9CDCFE\">Mouse<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #9CDCFE\">h<\/span><span style=\"color: #D4D4D4\">&gt; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">#<\/span><span style=\"color: #9CDCFE\">include<\/span><span style=\"color: #D4D4D4\"> &lt;<\/span><span style=\"color: #9CDCFE\">math<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #9CDCFE\">h<\/span><span style=\"color: #D4D4D4\">&gt; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">float<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">angle<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #B5CEA8\">0.0<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">float<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">radius<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #B5CEA8\">0.0<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">float<\/span><span style=\"color: #D4D4D4\"> maxRadius = <\/span><span style=\"color: #B5CEA8\">50.0<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">float<\/span><span style=\"color: #D4D4D4\"> minRadius = <\/span><span style=\"color: #B5CEA8\">5.0<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">float<\/span><span style=\"color: #D4D4D4\"> angleStep = <\/span><span style=\"color: #B5CEA8\">0.3<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">float<\/span><span style=\"color: #D4D4D4\"> radiusStep = <\/span><span style=\"color: #B5CEA8\">0.1<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">bool<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">expanding<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #569CD6\">true<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">void<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">setup<\/span><span style=\"color: #D4D4D4\">() { <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">Mouse<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">begin<\/span><span style=\"color: #D4D4D4\">(); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">delay<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">1000<\/span><span style=\"color: #D4D4D4\">); <\/span><span style=\"color: #6A9955\">\/\/ Let USB settle <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">} <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">void<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">loop<\/span><span style=\"color: #D4D4D4\">() { <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #6A9955\">\/\/ Calculate position in polar coordinates <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">int<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">dx<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">int<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">radius<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #DCDCAA\">cos<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">angle<\/span><span style=\"color: #D4D4D4\">)); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">int<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">dy<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">int<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">radius<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #DCDCAA\">sin<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">angle<\/span><span style=\"color: #D4D4D4\">)); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #6A9955\">\/\/ Move the mouse <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">Mouse<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">move<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">dx<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">dy<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #6A9955\">\/\/ Advance angle <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">angle<\/span><span style=\"color: #D4D4D4\"> += <\/span><span style=\"color: #9CDCFE\">angleStep<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #6A9955\">\/\/ Adjust radius <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #9CDCFE\">expanding<\/span><span style=\"color: #D4D4D4\">) { <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">radius<\/span><span style=\"color: #D4D4D4\"> += <\/span><span style=\"color: #9CDCFE\">radiusStep<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #9CDCFE\">radius<\/span><span style=\"color: #D4D4D4\"> &gt;= <\/span><span style=\"color: #9CDCFE\">maxRadius<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #9CDCFE\">expanding<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #569CD6\">false<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  } <\/span><span style=\"color: #C586C0\">else<\/span><span style=\"color: #D4D4D4\"> { <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">radius<\/span><span style=\"color: #D4D4D4\"> -= <\/span><span style=\"color: #9CDCFE\">radiusStep<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #9CDCFE\">radius<\/span><span style=\"color: #D4D4D4\"> &lt;= <\/span><span style=\"color: #9CDCFE\">minRadius<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #9CDCFE\">expanding<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #569CD6\">true<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  } <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">delay<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">} <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusion\">Conclusion<\/h2>\n\n\n\n<p>The Arduino, with its small form factor and relatively easy coding environment can be used in many ways to automate anything the user needs. Whether it be for a personal project or a business or industrial need, an HID keyboard wedge can save the user time and money at scale. <\/p>\n\n\n\n<p><strong>DMC can implement HID Keyboard Wedges into your specific needs. Learn more about our <a href=\"https:\/\/www.dmcinfo.com\/services\/embedded-development-and-embedded-programming\/\">Embedded expertise<\/a> <\/strong>and <strong>\u00a0<a href=\"https:\/\/www.dmcinfo.com\/contact#get-in-touch\">contact us today<\/a><\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Arduino released the Nano R4 on July 25, 2025, powered by the same RA4M1 microcontroller that\u2019s at the core of the popular UNO R4 boards. The board features 256 kB Flash, 32 kB SRAM and an 8 kB EEPROM, all running at 48 MHz with a built-in real-time clock (RTC), 14-bit ADC and a 12-bit [&hellip;]<\/p>\n","protected":false},"author":238,"featured_media":37486,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[754],"tags":[],"class_list":["post-37479","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-embedded-development-programming"],"yoast_head":"<title>Arduino Nano R4 USB HID\u00a0Functionality and First Impressions | DMC, Inc.<\/title>\n<meta name=\"description\" content=\"Explore the Arduino Nano R4&#039;s USB HID functionality and ability to create a simple keyboard wedge in this article by DMC, Inc..\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Arduino Nano R4 USB HID\u00a0Functionality and First Impressions\" \/>\n<meta property=\"og:description\" content=\"Explore the Arduino Nano R4&#039;s USB HID functionality and ability to create a simple keyboard wedge in this article by DMC, Inc..\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/\" \/>\n<meta property=\"og:site_name\" content=\"DMC, Inc.\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-01T17:03:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-23T14:45:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"925\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Thomas Panek Gonzalez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thomas Panek Gonzalez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/\"},\"author\":{\"name\":\"Thomas Panek Gonzalez\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/person\/7c7e4a49f1040fd890e7b4918232b60b\"},\"headline\":\"Arduino Nano R4 USB HID\u00a0Functionality and First Impressions\",\"datePublished\":\"2025-08-01T17:03:56+00:00\",\"dateModified\":\"2025-12-23T14:45:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/\"},\"wordCount\":536,\"publisher\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg\",\"articleSection\":[\"Embedded Development &amp; Programming\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/\",\"url\":\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/\",\"name\":\"Arduino Nano R4 USB HID\u00a0Functionality and First Impressions | DMC, Inc.\",\"isPartOf\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg\",\"datePublished\":\"2025-08-01T17:03:56+00:00\",\"dateModified\":\"2025-12-23T14:45:14+00:00\",\"description\":\"Explore the Arduino Nano R4's USB HID functionality and ability to create a simple keyboard wedge in this article by DMC, Inc..\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#primaryimage\",\"url\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg\",\"contentUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg\",\"width\":925,\"height\":400,\"caption\":\"Arduino logo and Nano R4 USB HID text\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dmcinfo.com\/#website\",\"url\":\"https:\/\/www.dmcinfo.com\/\",\"name\":\"DMC, Inc.\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dmcinfo.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dmcinfo.com\/#organization\",\"name\":\"DMC, Inc.\",\"url\":\"https:\/\/www.dmcinfo.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png\",\"contentUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png\",\"width\":418,\"height\":167,\"caption\":\"DMC, Inc.\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929\",\"https:\/\/www.instagram.com\/dmcengineering\",\"https:\/\/www.youtube.com\/DMCEngineering\",\"https:\/\/www.linkedin.com\/company\/dmc-engineering\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/person\/7c7e4a49f1040fd890e7b4918232b60b\",\"name\":\"Thomas Panek Gonzalez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/person\/image\/\",\"url\":\"\/\/www.dmcinfo.com\/wp-content\/uploads\/wpo365\/profile-images\/238.png\",\"contentUrl\":\"\/\/www.dmcinfo.com\/wp-content\/uploads\/wpo365\/profile-images\/238.png\",\"caption\":\"Thomas Panek Gonzalez\"},\"url\":\"https:\/\/www.dmcinfo.com\/blog\/author\/thomasp\/\"}]}<\/script>","yoast_head_json":{"title":"Arduino Nano R4 USB HID\u00a0Functionality and First Impressions | DMC, Inc.","description":"Explore the Arduino Nano R4's USB HID functionality and ability to create a simple keyboard wedge in this article by DMC, Inc..","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/","og_locale":"en_US","og_type":"article","og_title":"Arduino Nano R4 USB HID\u00a0Functionality and First Impressions","og_description":"Explore the Arduino Nano R4's USB HID functionality and ability to create a simple keyboard wedge in this article by DMC, Inc..","og_url":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/","og_site_name":"DMC, Inc.","article_publisher":"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929","article_published_time":"2025-08-01T17:03:56+00:00","article_modified_time":"2025-12-23T14:45:14+00:00","og_image":[{"width":925,"height":400,"url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg","type":"image\/jpeg"}],"author":"Thomas Panek Gonzalez","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Thomas Panek Gonzalez","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#article","isPartOf":{"@id":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/"},"author":{"name":"Thomas Panek Gonzalez","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/person\/7c7e4a49f1040fd890e7b4918232b60b"},"headline":"Arduino Nano R4 USB HID\u00a0Functionality and First Impressions","datePublished":"2025-08-01T17:03:56+00:00","dateModified":"2025-12-23T14:45:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/"},"wordCount":536,"publisher":{"@id":"https:\/\/www.dmcinfo.com\/#organization"},"image":{"@id":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg","articleSection":["Embedded Development &amp; Programming"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/","url":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/","name":"Arduino Nano R4 USB HID\u00a0Functionality and First Impressions | DMC, Inc.","isPartOf":{"@id":"https:\/\/www.dmcinfo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#primaryimage"},"image":{"@id":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg","datePublished":"2025-08-01T17:03:56+00:00","dateModified":"2025-12-23T14:45:14+00:00","description":"Explore the Arduino Nano R4's USB HID functionality and ability to create a simple keyboard wedge in this article by DMC, Inc..","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/blog\/37479\/arduino-nano-r4-usb-hid-functionality-and-first-impressions\/#primaryimage","url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg","contentUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/08\/01115404\/Arduino-Nano-R4-USB-HID-intro.jpg","width":925,"height":400,"caption":"Arduino logo and Nano R4 USB HID text"},{"@type":"WebSite","@id":"https:\/\/www.dmcinfo.com\/#website","url":"https:\/\/www.dmcinfo.com\/","name":"DMC, Inc.","description":"","publisher":{"@id":"https:\/\/www.dmcinfo.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dmcinfo.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dmcinfo.com\/#organization","name":"DMC, Inc.","url":"https:\/\/www.dmcinfo.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png","contentUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png","width":418,"height":167,"caption":"DMC, Inc."},"image":{"@id":"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929","https:\/\/www.instagram.com\/dmcengineering","https:\/\/www.youtube.com\/DMCEngineering","https:\/\/www.linkedin.com\/company\/dmc-engineering"]},{"@type":"Person","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/person\/7c7e4a49f1040fd890e7b4918232b60b","name":"Thomas Panek Gonzalez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/person\/image\/","url":"\/\/www.dmcinfo.com\/wp-content\/uploads\/wpo365\/profile-images\/238.png","contentUrl":"\/\/www.dmcinfo.com\/wp-content\/uploads\/wpo365\/profile-images\/238.png","caption":"Thomas Panek Gonzalez"},"url":"https:\/\/www.dmcinfo.com\/blog\/author\/thomasp\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts\/37479","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/users\/238"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/comments?post=37479"}],"version-history":[{"count":8,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts\/37479\/revisions"}],"predecessor-version":[{"id":37492,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts\/37479\/revisions\/37492"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/media\/37486"}],"wp:attachment":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/media?parent=37479"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/categories?post=37479"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/tags?post=37479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}