/**
Blink Example for the Arduino Nano R4 Board
Name: nano_r4_blink.ino
Purpose: This sketch demonstrates how to blink the built-in
user LED of the Arduino Nano R4 board.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/// Built-in LED pin
#define LED_PIN LED_BUILTIN
voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// Configure LED pin as output
pinMode(LED_PIN,OUTPUT);// Startup message
Serial.println("- Arduino Nano R4 - Blink Example started...");}voidloop(){// Turn on the LED, wait 1 second
digitalWrite(LED_PIN,HIGH);Serial.println("- LED on!");delay(1000);// Turn off the LED, wait 1 second
digitalWrite(LED_PIN,LOW);Serial.println("- LED off!");delay(1000);}
/**
RGB LED Example for the Arduino Nano R4 Board
Name: nano_r4_rgb_led.ino
Purpose: This sketch demonstrates how to control the built-in
RGB LED of the Arduino Nano R4 board.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// Initialize LEDR, LEDG and LEDB as outputs
pinMode(LEDR,OUTPUT);pinMode(LEDG,OUTPUT);pinMode(LEDB,OUTPUT);// Turn off all LEDs initially
digitalWrite(LEDR,HIGH);digitalWrite(LEDG,HIGH);digitalWrite(LEDB,HIGH);Serial.println("- Arduino Nano R4 - RGB LED Example started...");}voidloop(){// Turn on the built-in red LED and turn off the rest
digitalWrite(LEDR,LOW);digitalWrite(LEDG,HIGH);digitalWrite(LEDB,HIGH);Serial.println("- Red LED on!");delay(500);// Turn on the built-in green LED and turn off the rest
digitalWrite(LEDR,HIGH);digitalWrite(LEDG,LOW);digitalWrite(LEDB,HIGH);Serial.println("- Green LED on!");delay(500);// Turn on the built-in blue LED and turn off the rest
digitalWrite(LEDR,HIGH);digitalWrite(LEDG,HIGH);digitalWrite(LEDB,LOW);Serial.println("- Blue LED on!");delay(500);// Turn off all LEDs
digitalWrite(LEDR,HIGH);digitalWrite(LEDG,HIGH);digitalWrite(LEDB,HIGH);Serial.println("- All LEDs off!");delay(500);}
/**
User LED Example for the Arduino Nano R4 Board
Name: nano_r4_user_led.ino
Purpose: This sketch demonstrates how to control the built-in
user LED of the Arduino Nano R4 board.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// Configure LED_BUILTIN pin as output
pinMode(LED_BUILTIN,OUTPUT);// Turn off LED initially
digitalWrite(LED_BUILTIN,LOW);Serial.println("- Arduino Nano R4 - User LED Example started...");}voidloop(){// Turn on the built-in user LED
digitalWrite(LED_BUILTIN,HIGH);Serial.println("- User LED on!");delay(1000);// Turn off the built-in user LED
digitalWrite(LED_BUILTIN,LOW);Serial.println("- User LED off!");delay(1000);}
/**
Combined Digital I/O Example for the Arduino Nano R4 Board
Name: nano_r4_digital_io_combined.ino
Purpose: This sketch demonstrates reading a button input and toggling
the built-in LED state each time the button is pressed.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/// Pin definitions
constintbuttonPin=2;// Button input on D2
constintledPin=LED_BUILTIN;// Built-in LED
// Variables to store button and LED state
intbuttonState=0;intlastButtonState=HIGH;boolledState=false;voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// Configure pins
pinMode(buttonPin,INPUT_PULLUP);pinMode(ledPin,OUTPUT);// Turn off LED initially
digitalWrite(ledPin,LOW);Serial.println("- Arduino Nano R4 - Combined Digital I/O Example started...");Serial.println("- Press button to toggle the built-in LED");}voidloop(){// Read current button state
buttonState=digitalRead(buttonPin);// Check if button was just pressed (state change from HIGH to LOW)
if(buttonState==LOW&&lastButtonState==HIGH){// Button press detected - toggle LED state
ledState=!ledState;digitalWrite(ledPin,ledState);Serial.print("- Button pressed! LED is now ");if(ledState){Serial.println("ON");}else{Serial.println("OFF");}// Simple debounce delay
delay(50);}// Save current button state for next iteration
lastButtonState=buttonState;// Small delay for stability
delay(10);}
/**
Analog Input Example for the Arduino Nano R4 Board
Name: nano_r4_analog_input.ino
Purpose: This sketch demonstrates how to read an analog input
and display the value on the Serial Monitor.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/// Analog input pin
constintanalogPin=A0;voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - Analog Input Example started...");Serial.println("- Reading analog values from pin A0");}voidloop(){// Read the analog value (0 - 1023 with 10-bit resolution)
intanalogValue=analogRead(analogPin);// Convert to voltage (0 to +5 VDC)
floatvoltage=analogValue*(5.0/1023.0);// Display the results
Serial.print("- Analog Value: ");Serial.print(analogValue);Serial.print(" | Voltage: ");Serial.print(voltage,2);Serial.println(" VDC");// Wait half a second before next reading
delay(500);}
/**
High-Resolution Analog Input Example for the Arduino Nano R4 Board
Name: nano_r4_analog_high_res.ino
Purpose: This sketch demonstrates how to use 14-bit resolution
for precise analog input measurements.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/// Analog input pin
constintanalogPin=A0;voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// Set analog read resolution to 14-bit (0 - 16383)
analogReadResolution(14);Serial.println("- Arduino Nano R4 - High-Resolution Analog Input Example started...");Serial.println("- Using 14-bit resolution (0 - 16383)");}voidloop(){// Read the analog value (0 - 16383 with 14-bit resolution)
intanalogValue=analogRead(analogPin);// Convert to voltage (0 - +5 VDC)
floatvoltage=analogValue*(5.0/16383.0);// Calculate percentage (0 - 100%)
floatpercentage=(analogValue/16383.0)*100.0;// Display the results
Serial.print("- Analog Value: ");Serial.print(analogValue);Serial.print(" | Voltage: ");Serial.print(voltage,3);Serial.print(" VDC | Percentage: ");Serial.print(percentage,1);Serial.println(" %");// Wait half a second before next reading
delay(500);}
/**
PWM Example for the Arduino Nano R4 Board
Name: nano_r4_pwm_led.ino
Purpose: This sketch demonstrates how to use PWM to control
the brightness of the built-in user LED of the Nano R4 board.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/// Built-in LED pin (supports PWM)
constintledPin=LED_BUILTIN;voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// No need to set pinMode for PWM pins - analogWrite() handles this
Serial.println("- Arduino Nano R4 - PWM LED Example started...");Serial.println("- Built-in LED will fade in and out continuously");}voidloop(){// Fade in (0 to 255)
for(intbrightness=0;brightness<=255;brightness++){analogWrite(ledPin,brightness);delay(5);}Serial.println("- LED at maximum brightness");delay(500);// Fade out (255 to 0)
for(intbrightness=255;brightness>=0;brightness--){analogWrite(ledPin,brightness);delay(5);}Serial.println("- LED turned off");delay(500);}
/**
High-Resolution PWM Example for the Arduino Nano R4 Board
Name: nano_r4_pwm_high_res.ino
Purpose: This sketch demonstrates how to use 12-bit PWM resolution
for precise control of the built-in orange user LED brightness.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/// Built-in LED pin (supports PWM)
constintpwmPin=LED_BUILTIN;voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// Set PWM resolution to 12-bit (0-4095)
analogWriteResolution(12);Serial.println("- Arduino Nano R4 - High-Resolution PWM Example started...");Serial.println("- Using 12-bit resolution (0-4095) with built-in LED");}voidloop(){// Generate a smooth sine wave using 12-bit PWM
for(inti=0;i<360;i++){// Calculate sine wave value and map to 12-bit range
floatsineValue=sin(i*PI/180.0);intpwmValue=(int)((sineValue+1.0)*2047.5);// Map -1 to 1 → 0 to 4095
analogWrite(pwmPin,pwmValue);// Print current values every 30 degrees
if(i%30==0){Serial.print("- Angle: ");Serial.print(i);Serial.print("°, PWM Value: ");Serial.println(pwmValue);}delay(10);}Serial.println("- Sine wave cycle completed");delay(1000);}
専用のOPAMP.hライブラリを使うことで、オペアンプの設定および利用が可能です。このライブラリは、Arduno Uno R4ボードのコアに含まれます。OPAMPを開始するには、ライブラリをインクルードし、OPAMP.begin(speed)を呼び出します。ここで、sppedは、低消費電力の場合は、OPAMP_SPEED_LOWSPEED、高性能向けには、OPAMP_SPEED_HIGHSPEEDです。
/**
OPAMP Example for the Arduino Nano R4 Board
Name: nano_r4_opamp_example.ino
Purpose: This sketch demonstrates how to initialize the built-in OPAMP.
Works for both voltage follower and amplifier configurations.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/#include<OPAMP.h>voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - OPAMP Example started...");Serial.println("- Initializing OPAMP in high-speed mode...");// Initialize OPAMP in high-speed mode
OPAMP.begin(OPAMP_SPEED_HIGHSPEED);Serial.println("- OPAMP initialized successfully!");Serial.println("- OPAMP is now ready for use with external connections");Serial.println("- The behavior depends on how you connect the external components");}voidloop(){// The OPAMP operates automatically based on external connections
// No additional code needed in the loop
Serial.println("- OPAMP running...");delay(2000);}
/**
DAC Basic Output Example for the Arduino Nano R4 Board
Name: nano_r4_dac_basic.ino
Purpose: This sketch demonstrates how to use the DAC to generate
precise analog voltages on pin A0.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// Set DAC resolution to 12-bit for maximum precision
analogWriteResolution(12);Serial.println("- Arduino Nano R4 - DAC Basic Output Example started...");Serial.println("- Generating precise voltages on pin A0");Serial.println("- Connect a multimeter to A0 to measure output");}voidloop(){// Generate different voltage levels
// 0, +1.25, +2.5, +3.75 and +5 VDC
intdacValues[]={0,1024,2048,3072,4095};floatvoltages[]={0.0,1.25,2.5,3.75,5.0};for(inti=0;i<5;i++){analogWrite(DAC,dacValues[i]);Serial.print("- DAC Value: ");Serial.print(dacValues[i]);Serial.print(" | Target Voltage: ");Serial.print(voltages[i],2);Serial.println(" VDC");// Hold each voltage for 2 seconds
delay(2000);}Serial.println("- Cycle completed, repeating...");delay(1000);}
/**
DAC Sine Wave Generator for the Arduino Nano R4 Board
Name: nano_r4_dac_sine_wave.ino
Purpose: This sketch generates a smooth sine wave using the 12-bit DAC
for testing and signal generation applications.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// Set DAC resolution to 12-bit for smooth waveform
analogWriteResolution(12);Serial.println("- Arduino Nano R4 - DAC Sine Wave Generator started...");Serial.println("- Generating sine wave on pin A0");Serial.println("- Connect an oscilloscope to A0 to view waveform");}voidloop(){// Generate one complete sine wave cycle (360 degrees)
for(intangle=0;angle<360;angle++){// Calculate sine value (-1 to +1) and convert to DAC range (0 to 4095)
floatsineValue=sin(angle*PI/180.0);intdacValue=(int)((sineValue+1.0)*2047.5);// Center at +2.5 VDC
// Output the calculated value to DAC
analogWrite(DAC,dacValue);// Print debug info every 30 degrees
if(angle%30==0){floatvoltage=(dacValue/4095.0)*5.0;Serial.print("- Angle: ");Serial.print(angle);Serial.print("° | DAC: ");Serial.print(dacValue);Serial.print(" | Voltage: ");Serial.print(voltage,2);Serial.println(" VDC");}// Control wave frequency (~28 Hz)
delayMicroseconds(100);}}
/**
RTC Basic Example for the Arduino Nano R4 Board
Name: nano_r4_rtc_basic.ino
Purpose: This sketch demonstrates how to use the built-in RTC
to keep track of date and time.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/#include"RTC.h"voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - RTC Basic Example started...");Serial.println("- Initializing RTC...");// Initialize RTC
RTC.begin();// Set initial time: January 15, 2025, 12:00:00 PM, Monday
RTCTimestartTime(15,Month::JANUARY,2025,12,0,0,DayOfWeek::MONDAY,SaveLight::SAVING_TIME_INACTIVE);RTC.setTime(startTime);Serial.println("- RTC time has been set to January 15, 2025, 12:00:00 PM");Serial.println("- Current date and time will be displayed every second");}voidloop(){// Get current time from RTC
RTCTimecurrentTime;RTC.getTime(currentTime);// Get individual values
intyear=currentTime.getYear();intmonth=Month2int(currentTime.getMonth());intday=currentTime.getDayOfMonth();inthour=currentTime.getHour();intminute=currentTime.getMinutes();intsecond=currentTime.getSeconds();// Display date (YYYY/MM/DD)
Serial.print("Date: ");Serial.print(year);Serial.print("/");if(month<10)Serial.print("0");Serial.print(month);Serial.print("/");if(day<10)Serial.print("0");Serial.print(day);// Display time (HH:MM:SS)
Serial.print(" | Time: ");if(hour<10)Serial.print("0");Serial.print(hour);Serial.print(":");if(minute<10)Serial.print("0");Serial.print(minute);Serial.print(":");if(second<10)Serial.print("0");Serial.print(second);// Display day of week
Serial.print(" | Day: ");DayOfWeekdayOfWeek=currentTime.getDayOfWeek();if(dayOfWeek==DayOfWeek::MONDAY){Serial.print("Monday");}elseif(dayOfWeek==DayOfWeek::TUESDAY){Serial.print("Tuesday");}elseif(dayOfWeek==DayOfWeek::WEDNESDAY){Serial.print("Wednesday");}elseif(dayOfWeek==DayOfWeek::THURSDAY){Serial.print("Thursday");}elseif(dayOfWeek==DayOfWeek::FRIDAY){Serial.print("Friday");}elseif(dayOfWeek==DayOfWeek::SATURDAY){Serial.print("Saturday");}elseif(dayOfWeek==DayOfWeek::SUNDAY){Serial.print("Sunday");}Serial.println();// Wait one second before next reading
delay(1000);}
// Create RTCTime object with current date and time
// Format: day, month, year, hour, minute, second, dayOfWeek, daylightSaving
RTCTimenewTime(30,Month::JUNE,2025,15,30,45,DayOfWeek::MONDAY,SaveLight::SAVING_TIME_INACTIVE);// Set the RTC time
RTC.setTime(newTime);
/**
EEPROM Basic Example for the Arduino Nano R4 Board
Name: nano_r4_eeprom_basic.ino
Purpose: This sketch demonstrates how to store and retrieve data
from the built-in EEPROM memory.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/#include<EEPROM.h>voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - EEPROM Basic Example started...");// Read a counter from EEPROM address 0
intbootCounter=EEPROM.read(0);// If this is the first time (EEPROM starts with 255), set counter to 0
if(bootCounter==255){bootCounter=0;Serial.println("- First boot detected!");}// Add 1 to the counter
bootCounter=bootCounter+1;// Save the new counter value to EEPROM
EEPROM.write(0,bootCounter);// Show the results
Serial.print("- This board has been reset ");Serial.print(bootCounter);Serial.println(" times");// Store a user preference (LED brightness)
intbrightness=128;// Value from 0 to 255
EEPROM.write(1,brightness);Serial.print("- LED brightness setting saved: ");Serial.println(brightness);// Read the brightness setting back
intsavedBrightness=EEPROM.read(1);Serial.print("- LED brightness setting loaded: ");Serial.println(savedBrightness);Serial.println("- Reset the board to see the counter increase!");}voidloop(){// Nothing to do in the loop
// The counter only increases when you reset the board
delay(1000);}
// Define a structure for complex data
structSettings{intthreshold;floatcalibration;boolenabled;chardeviceName[16];};// Store structure to EEPROM
SettingsmySettings={512,3.14,true,"NanoR4Device"};EEPROM.put(0,mySettings);// Read structure from EEPROM
SettingsloadedSettings;EEPROM.get(0,loadedSettings);
/**
UART Basic Example for the Arduino Nano R4 Board
Name: nano_r4_uart_basic.ino
Purpose: This sketch demonstrates basic UART communication
using both USB Serial and hardware Serial1.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/voidsetup(){// Initialize USB serial communication at 115200 baud
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));// Initialize hardware serial on pins D0/D1 at 9600 baud
Serial1.begin(9600);Serial.println("- Arduino Nano R4 - UART Basic Example started...");Serial.println("- USB Serial (Serial): 115200 baud");Serial.println("- Hardware Serial (Serial1): 9600 baud on D0/D1");Serial.println("- Connect logic analyzer to D0 (RX) and D1 (TX)");Serial.println("- Type messages in Serial Monitor to send via Serial1");Serial.println();}voidloop(){// Check for data from USB Serial (computer)
if(Serial.available()){Stringmessage=Serial.readString();// Remove newline characters
message.trim();if(message.length()>0){Serial.print("- USB received: \"");Serial.print(message);Serial.println("\"");// Send the message via Serial1 (D0/D1)
Serial1.print("- Message from USB: ");Serial1.println(message);Serial.println("- Message sent via Serial1 (D0/D1)!");}}// Check for data from Serial1 (external device on D0/D1)
if(Serial1.available()){Stringresponse=Serial1.readString();// Remove newline characters
response.trim();if(response.length()>0){Serial.print("- Serial1 received: \"");Serial.print(response);Serial.println("\"");}}// Send periodic test data via Serial1
staticunsignedlonglastSend=0;if(millis()-lastSend>3000){lastSend=millis();// Send test data with timestamp
Serial1.print("Test data: ");Serial1.print(millis());Serial1.println(" ms");Serial.println("- Periodic test data sent via Serial1!");}delay(10);}
// Example: Connecting a GPS module via Serial1
voidsetup(){Serial.begin(115200);// USB debugging
Serial1.begin(9600);// GPS module communication
Serial.println("GPS module communication started");}voidloop(){// Forward GPS data to USB Serial for monitoring
if(Serial1.available()){StringgpsData=Serial1.readString();Serial.print("GPS: ");Serial.print(gpsData);}// Send commands to GPS module from USB Serial
if(Serial.available()){Stringcommand=Serial.readString();Serial1.print(command);Serial.println("Command sent to GPS");}}
/**
SPI Basic Example for the Arduino Nano R4 Board
Name: nano_r4_spi_basic.ino
Purpose: This sketch demonstrates how to use SPI communication
to send and receive data.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/#include<SPI.h>// Chip Select pin for SPI device
constintCS_PIN=10;voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - SPI Basic Example started...");// Set CS pin as output and set it HIGH (inactive)
pinMode(CS_PIN,OUTPUT);digitalWrite(CS_PIN,HIGH);// Initialize SPI communication
SPI.begin();// Configure SPI settings
// - Clock speed: 1 MHz (1000000 Hz)
// - Data order: Most Significant Bit first
// - Data mode: Mode 0 (Clock polarity = 0, Clock phase = 0)
SPI.beginTransaction(SPISettings(1000000,MSBFIRST,SPI_MODE0));Serial.println("- SPI initialized successfully");Serial.println("- Ready to communicate with SPI devices");// Example: Send some test data
sendSPIData();}voidloop(){// Send a counter value every 2 seconds
staticintcounter=0;// Select the device (CS LOW)
digitalWrite(CS_PIN,LOW);// Send counter value
byteresponse=SPI.transfer(counter);// Deselect the device (CS HIGH)
digitalWrite(CS_PIN,HIGH);// Display results
Serial.print("- Sent: ");Serial.print(counter);Serial.print(" | Received: ");Serial.println(response);// Increment counter and wrap around at 255
counter++;if(counter>255){counter=0;}delay(2000);}voidsendSPIData(){Serial.println("- Sending test data...");// Select the device
digitalWrite(CS_PIN,LOW);// Send a sequence of test bytes
for(inti=0;i<5;i++){bytetestData=0x10+i;// Send 0x10, 0x11, 0x12, 0x13, 0x14
byteresponse=SPI.transfer(testData);Serial.print(" Sent: 0x");if(testData<16)Serial.print("0");Serial.print(testData,HEX);Serial.print(" | Received: 0x");if(response<16)Serial.print("0");Serial.println(response,HEX);delay(100);}// Deselect the device
digitalWrite(CS_PIN,HIGH);Serial.println("- Test data transmission complete");}
// Multiple device example
constintDEVICE1_CS=10;// First SPI device
constintDEVICE2_CS=9;// Second SPI device
constintDEVICE3_CS=8;// Third SPI device
voidsetup(){SPI.begin();// Configure all CS pins
pinMode(DEVICE1_CS,OUTPUT);pinMode(DEVICE2_CS,OUTPUT);pinMode(DEVICE3_CS,OUTPUT);// Set all CS pins HIGH (inactive)
digitalWrite(DEVICE1_CS,HIGH);digitalWrite(DEVICE2_CS,HIGH);digitalWrite(DEVICE3_CS,HIGH);}
/**
I2C Basic Example for the Arduino Nano R4 Board
Name: nano_r4_i2c_basic.ino
Purpose: This sketch demonstrates basic I2C communication
patterns for protocol analysis.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/#include<Wire.h>// Example device address
constintDEVICE_ADDRESS=0x48;voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - I2C Basic Example started...");// Initialize I2C communication as master
Wire.begin();Serial.println("- I2C initialized successfully");Serial.println("- Connect protocol analyzer to A4 (SDA) and A5 (SCL)");Serial.println("- Starting I2C communication patterns...");delay(2000);}voidloop(){// Write a single byte
Serial.println("- Writing single byte (0xAA) to device 0x48...");Wire.beginTransmission(DEVICE_ADDRESS);Wire.write(0xAA);Wire.endTransmission();delay(1000);// Write multiple bytes
Serial.println("- Writing multiple bytes (0x10, 0x20, 0x30) to device 0x48...");Wire.beginTransmission(DEVICE_ADDRESS);Wire.write(0x10);Wire.write(0x20);Wire.write(0x30);Wire.endTransmission();delay(1000);// Request data from device
Serial.println("- Requesting 2 bytes from device 0x48...");Wire.requestFrom(DEVICE_ADDRESS,2);// Read any available data
while(Wire.available()){intdata=Wire.read();Serial.print("Received: 0x");if(data<16)Serial.print("0");Serial.println(data,HEX);}delay(2000);Serial.println("---");}
// Example: Communicating with multiple I2C devices
voidcommunicateWithMultipleDevices(){// Device addresses (examples)
constintSENSOR_ADDRESS=0x48;// Temperature sensor
constintDISPLAY_ADDRESS=0x3C;// OLED display
constintEEPROM_ADDRESS=0x50;// External EEPROM
// Read from temperature sensor
Wire.beginTransmission(SENSOR_ADDRESS);Wire.write(0x00);// Register to read
Wire.endTransmission();Wire.requestFrom(SENSOR_ADDRESS,2);if(Wire.available()>=2){inttempHigh=Wire.read();inttempLow=Wire.read();Serial.print("Temperature: ");Serial.println((tempHigh<<8)|tempLow);}// Send data to display
Wire.beginTransmission(DISPLAY_ADDRESS);Wire.write(0x40);// Data mode
Wire.write(0xFF);// Sample data
Wire.endTransmission();// Write to EEPROM
Wire.beginTransmission(EEPROM_ADDRESS);Wire.write(0x00);// Memory address
Wire.write(0x55);// Data to write
Wire.endTransmission();}
Nano R4ボードでは、CAN(Controller Area Network)通信を実行でき、自動車ネットワークや産業デバイス、他のCAN設備と通信することができます。CANは、RA4M1マイクロコントローラー内で実装され、専用の2ピンを使い、複数のデバイスとの長距離の堅牢なリアルタイム通信を行うことができます。ノイズの多い環境で信頼性の高い通信が必要となる自動車アプリケーションや産業オートメーション分散制御システムに最適です。
/**
CAN Basic Example for the Arduino Nano R4 Board
Name: nano_r4_can_basic.ino
Purpose: This sketch demonstrates basic CAN communication
for automotive and industrial applications.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/#include<Arduino_CAN.h>voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - CAN Basic Example started...");// Initialize CAN communication at 500k baud
if(!CAN.begin(CanBitRate::BR_500k)){Serial.println("- Error: Failed to initialize CAN bus!");while(1)delay(10);}Serial.println("- CAN bus initialized at 500k baud");Serial.println("- Connect CAN transceiver to D4 (TX) and D5 (RX)");Serial.println("- Sending periodic CAN messages...");delay(1000);}voidloop(){// Send periodic CAN messages
staticunsignedlonglastSend=0;if(millis()-lastSend>1000){lastSend=millis();// Create a CAN message
uint8_tdata[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};CanMsgmsg(CAN_ID(0x123),sizeof(data),data);// Send the message
intresult=CAN.write(msg);if(result==1){Serial.print("- CAN message sent - ID: 0x");Serial.print(0x123,HEX);Serial.print(", Data: ");for(inti=0;i<8;i++){Serial.print("0x");if(data[i]<16)Serial.print("0");Serial.print(data[i],HEX);if(i<7)Serial.print(" ");}Serial.println();}else{Serial.println("- Error: Failed to send CAN message!");}}// Check for incoming CAN messages
if(CAN.available()){CanMsgreceivedMsg=CAN.read();Serial.print("- CAN message received - ID: 0x");Serial.print(receivedMsg.id,HEX);Serial.print(", Length: ");Serial.print(receivedMsg.data_length);Serial.print(", Data: ");for(inti=0;i<receivedMsg.data_length;i++){Serial.print("0x");if(receivedMsg.data[i]<16)Serial.print("0");Serial.print(receivedMsg.data[i],HEX);if(i<receivedMsg.data_length-1)Serial.print(" ");}Serial.println();}delay(10);}
/**
HID Keyboard Example for the Arduino Nano R4 Board
Name: nano_r4_hid_keyboard.ino
Purpose: This sketch demonstrates how to use the Nano R4 as a
USB keyboard to send keystrokes and key combinations.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/#include"Keyboard.h"voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - HID Keyboard Example started...");Serial.println("- WARNING: This will send actual keystrokes to your computer!");// Wait 5 seconds before starting HID to give user time to read warning
Serial.println("- Starting in 5 seconds...");for(inti=5;i>0;i--){Serial.print(i);Serial.println(" seconds remaining");delay(1000);}// Initialize keyboard functionality
Keyboard.begin();Serial.println("- Keyboard HID initialized. Starting demonstration...");delay(1000);// Demonstrate basic text typing
Serial.println("- Typing basic text...");Keyboard.print("Hello from Nano R4! ");delay(1000);// Demonstrate special keys
Serial.println("- Pressing Enter key...");Keyboard.press(KEY_RETURN);delay(100);Keyboard.releaseAll();delay(1000);// Demonstrate keyboard shortcuts
Serial.println("- Sending Ctrl+A (Select All)...");Keyboard.press(KEY_LEFT_CTRL);Keyboard.press('a');delay(100);Keyboard.releaseAll();delay(1000);Serial.println("- Keyboard demonstration completed!");}voidloop(){// Send a timestamp every 10 seconds
staticunsignedlonglastMessage=0;if(millis()-lastMessage>10000){lastMessage=millis();Serial.println("- Sending periodic message...");// Send message with only letters, numbers and spaces
Keyboard.print("Nano R4 ");Keyboard.print(millis()/1000);Keyboard.print(" seconds");Keyboard.press(KEY_RETURN);delay(50);Keyboard.releaseAll();}delay(100);}
/**
HID Mouse Example for the Arduino Nano R4 Board
Name: nano_r4_hid_mouse.ino
Purpose: This sketch demonstrates how to use the Nano R4 as a
USB mouse to control cursor movement and clicking.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/#include"Mouse.h"voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - HID Mouse Example started...");Serial.println("- WARNING: This will control your actual mouse cursor!");// Wait 5 seconds before starting HID
Serial.println("- Starting in 5 seconds...");for(inti=5;i>0;i--){Serial.print(i);Serial.println(" seconds remaining");delay(1000);}// Initialize mouse functionality
Mouse.begin();Serial.println("- Mouse HID initialized. Starting demonstration...");delay(1000);// Demonstrate basic mouse movement
Serial.println("- Moving mouse in a square pattern...");Mouse.move(100,0);// Move right
delay(500);Mouse.move(0,100);// Move down
delay(500);Mouse.move(-100,0);// Move left
delay(500);Mouse.move(0,-100);// Move up
delay(500);// Demonstrate mouse clicks
Serial.println("- Performing mouse clicks...");Mouse.click(MOUSE_LEFT);delay(500);Mouse.click(MOUSE_RIGHT);delay(500);// Demonstrate scrolling
Serial.println("- Demonstrating scroll wheel...");Mouse.move(0,0,3);// Scroll up
delay(500);Mouse.move(0,0,-3);// Scroll down
delay(500);Serial.println("- Mouse demonstration completed!");}voidloop(){// Create a gentle circular mouse movement every 15 seconds
staticunsignedlonglastMovement=0;if(millis()-lastMovement>15000){lastMovement=millis();Serial.println("- Creating circular mouse movement...");for(intangle=0;angle<360;angle+=30){intx=(int)(10*cos(angle*PI/180));inty=(int)(10*sin(angle*PI/180));Mouse.move(x,y);delay(100);}}delay(100);}
/**
External Interrupt Example for the Arduino Nano R4 Board
Name: nano_r4_interrupt_example.ino
Purpose: This sketch demonstrates how to use external interrupts
to detect button presses.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/constintbuttonPin=2;constintledPin=LED_BUILTIN;// Variables shared with ISR must be volatile
volatileboolbuttonPressed=false;volatileunsignedlongpressCount=0;// Interrupt Service Routine - keep it short!
voidbuttonISR(){buttonPressed=true;pressCount++;}voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));pinMode(buttonPin,INPUT_PULLUP);pinMode(ledPin,OUTPUT);// Attach interrupt to button pin
attachInterrupt(digitalPinToInterrupt(buttonPin),buttonISR,FALLING);Serial.println("- Arduino Nano R4 - External Interrupt Example started...");Serial.println("- Press the button to trigger interrupts");}voidloop(){if(buttonPressed){buttonPressed=false;digitalWrite(ledPin,!digitalRead(ledPin));Serial.print("- Button pressed! Count: ");Serial.println(pressCount);}delay(10);}
/**
Modulino Movement Example for the Arduino Nano R4 Board
Name: nano_r4_modulino_movement.ino
Purpose: This sketch demonstrates reading motion data from the
Modulino Movement sensor via the Qwiic connector.
@author Arduino Product Experience Team
@version 1.0 01/06/25
*/#include<Modulino.h>#include<Wire.h>// Create Modulino Movement object
ModulinoMovementmovement;// Variables for sensor data
floatx,y,z;floatroll,pitch,yaw;voidsetup(){// Initialize serial communication and wait up to 2.5 seconds for a connection
Serial.begin(115200);for(autostartNow=millis()+2500;!Serial&&millis()<startNow;delay(500));Serial.println("- Arduino Nano R4 - Modulino Movement Example started...");// Initialize Wire1 for Qwiic connector
Wire1.begin();// Initialize Modulino system
Modulino.begin();// Initialize Movement sensor
movement.begin();Serial.println("- Modulino Movement connected successfully!");Serial.println("- Reading motion data...\n");}voidloop(){// Read new movement data from the sensor
movement.update();// Get acceleration values
x=movement.getX();y=movement.getY();z=movement.getZ();// Get gyroscope values
roll=movement.getRoll();pitch=movement.getPitch();yaw=movement.getYaw();// Display acceleration
Serial.print("- Accel (g): X=");Serial.print(x,2);Serial.print(" Y=");Serial.print(y,2);Serial.print(" Z=");Serial.print(z,2);// Display gyroscope
Serial.print(" | Gyro (dps): Roll=");Serial.print(roll,1);Serial.print(" Pitch=");Serial.print(pitch,1);Serial.print(" Yaw=");Serial.print(yaw,1);Serial.println();// Update at 10Hz
delay(100);}