#pragma once // VersaPad v2 – SAMD21G18A Custom Variant // Arduino pin assignments for the custom PCB #define ARDUINO_SAMD_VARIANT_COMPLIANCE 10610 #include // ─── Pin count ──────────────────────────────────────────────────────────────── // D0–D9 : Button matrix (COL_0–4, ROW_0–4) // D10–D17 : Rotary encoders A/B (ENC0–ENC3), all on EIC // D18–D20 : SPI for WS2812 (SERCOM5: MOSI, SCK, MISO) // D21–D22 : USB D–/D+ (internal, not exposed) // D23–D25 : Fader ADC inputs (A0–A2) // ───────────────────────────────────────────────────────────────────────────── #define PINS_COUNT (26u) #define NUM_DIGITAL_PINS (23u) // D0–D22 usable as digital #define NUM_ANALOG_INPUTS (3u) // A0–A2 = D23–D25 #define NUM_ANALOG_OUTPUTS (0u) #define analogInputToDigitalPin(p) ((p < NUM_ANALOG_INPUTS) ? (p) + 23u : -1) // digitalPinToInterrupt is defined by Arduino.h as (P). // attachInterrupt() then internally looks up ulExtInt via g_APinDescription. // ─── Button Matrix ──────────────────────────────────────────────────────────── // Columns (driven LOW one at a time) #define PIN_COL0 (4u) // PB10 – also encoder SW column #define PIN_COL1 (3u) // PA11 #define PIN_COL2 (2u) // PA10 #define PIN_COL3 (1u) // PA09 #define PIN_COL4 (0u) // PA08 // Rows (read with internal pull-up) #define PIN_ROW0 (5u) // PB11 #define PIN_ROW1 (6u) // PA12 #define PIN_ROW2 (7u) // PA13 #define PIN_ROW3 (8u) // PA14 #define PIN_ROW4 (9u) // PA15 // ─── Rotary Encoders ────────────────────────────────────────────────────────── // All on EIC (External Interrupt Controller) for hardware quadrature #define PIN_ENC0_A (16u) // PA22 EIC EXTINT6 #define PIN_ENC0_B (17u) // PA23 EIC EXTINT7 #define PIN_ENC1_A (14u) // PA20 EIC EXTINT4 #define PIN_ENC1_B (15u) // PA21 EIC EXTINT5 #define PIN_ENC2_A (12u) // PA18 EIC EXTINT2 #define PIN_ENC2_B (13u) // PA19 EIC EXTINT3 #define PIN_ENC3_A (10u) // PA16 EIC EXTINT0 #define PIN_ENC3_B (11u) // PA17 EIC EXTINT1 // ─── WS2812 SPI (SERCOM5) ───────────────────────────────────────────────────── #define PIN_SPI_MOSI (18u) // PB22 SERCOM5 PAD2 ← LED data line #define PIN_SPI_SCK (19u) // PB23 SERCOM5 PAD3 #define PIN_SPI_MISO (20u) // PB03 SERCOM5 PAD1 (unused for WS2812) #define PERIPH_SPI sercom5 #define PAD_SPI_TX SPI_PAD_2_SCK_3 // MOSI=PAD2, SCK=PAD3 #define PAD_SPI_RX SERCOM_RX_PAD_1 // MISO=PAD1 // ─── Faders (ADC) ───────────────────────────────────────────────────────────── #define PIN_A0 (23u) // PA02 ADC AIN[0] #define PIN_A1 (24u) // PA03 ADC AIN[1] (also VREFA) #define PIN_A2 (25u) // PB08 ADC AIN[2] #define PIN_FADER0 PIN_A0 #define PIN_FADER1 PIN_A1 #define PIN_FADER2 PIN_A2 static const uint8_t A0 = PIN_A0; static const uint8_t A1 = PIN_A1; static const uint8_t A2 = PIN_A2; // ─── USB (internal) ─────────────────────────────────────────────────────────── #define PIN_USB_DM (21u) // PA24 #define PIN_USB_DP (22u) // PA25 #define PIN_USB_HOST_ENABLE (21u) // unused, required by core // ─── SPI ────────────────────────────────────────────────────────────────────── #define SPI_INTERFACES_COUNT 0 // SPI-Objekt wird in src/hal/spi.cpp definiert // ─── Serial / UART ──────────────────────────────────────────────────────────── // No hardware UART exposed; USB CDC is used as Serial #define SERIAL_INTERFACES_COUNT 0 // ─── I2C ────────────────────────────────────────────────────────────────────── // Not used on this board, stubs required by core #define WIRE_INTERFACES_COUNT 0 #define PIN_WIRE_SDA (16u) // PA22 (reused, I2C not enabled) #define PIN_WIRE_SCL (17u) // PA23 // ─── ADC reference ──────────────────────────────────────────────────────────── #define ADC_RESOLUTION 12 // ─── Clock ──────────────────────────────────────────────────────────────────── // Required by cores/arduino/delay.c (micros / delayMicroseconds) #define VARIANT_MCK (48000000ul) #define VARIANT_MAINOSC (32768ul)