diff --git a/hardware/arduino/avr/cores/arduino/wiring_analog.c b/hardware/arduino/avr/cores/arduino/wiring_analog.c index 8feead9577c..32e94f80be6 100644 --- a/hardware/arduino/avr/cores/arduino/wiring_analog.c +++ b/hardware/arduino/avr/cores/arduino/wiring_analog.c @@ -41,19 +41,21 @@ int analogRead(uint8_t pin) { uint8_t low, high; + // If a pin number is passed (e.g. the "digital pin number" for + // an Ax pin), then translate it to the corresponding "analog + // pin number (e.g., A0 => 0, A1 => 1, etc). + #if defined(A0) + if (pin >= A0) + pin -= A0; + #endif + + #if defined(NUM_ANALOG_INPUTS) + if (pin >= NUM_ANALOG_INPUTS) + return 0; + #endif + #if defined(analogPinToChannel) -#if defined(__AVR_ATmega32U4__) - if (pin >= 18) pin -= 18; // allow for channel or pin numbers -#endif pin = analogPinToChannel(pin); -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - if (pin >= 54) pin -= 54; // allow for channel or pin numbers -#elif defined(__AVR_ATmega32U4__) - if (pin >= 18) pin -= 18; // allow for channel or pin numbers -#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) - if (pin >= 24) pin -= 24; // allow for channel or pin numbers -#else - if (pin >= 14) pin -= 14; // allow for channel or pin numbers #endif #if defined(ADCSRB) && defined(MUX5) diff --git a/hardware/arduino/avr/variants/robot_control/pins_arduino.h b/hardware/arduino/avr/variants/robot_control/pins_arduino.h index b868064eac8..e029cfdf3d3 100644 --- a/hardware/arduino/avr/variants/robot_control/pins_arduino.h +++ b/hardware/arduino/avr/variants/robot_control/pins_arduino.h @@ -28,6 +28,9 @@ #include +#define NUM_DIGITAL_PINS 30 +#define NUM_ANALOG_INPUTS 12 + #define ARDUINO_MODEL_USB_PID 0x0038 #define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0) diff --git a/hardware/arduino/avr/variants/robot_motor/pins_arduino.h b/hardware/arduino/avr/variants/robot_motor/pins_arduino.h index 7dc4a79b055..022b8563131 100644 --- a/hardware/arduino/avr/variants/robot_motor/pins_arduino.h +++ b/hardware/arduino/avr/variants/robot_motor/pins_arduino.h @@ -1,5 +1,5 @@ /* - pins_arduino.h - Pin definition functions for Arduino Robot Control Board + pins_arduino.h - Pin definition functions for Arduino Robot Motor Board Part of Arduino - http://www.arduino.cc/ Copyright (c) 2913 D. Cuartielles, X. Yang (Arduino Verkstad) @@ -28,6 +28,9 @@ #include +#define NUM_DIGITAL_PINS 30 +#define NUM_ANALOG_INPUTS 12 + #define ARDUINO_MODEL_USB_PID 0x0039 #define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)