diff --git a/libraries/AP_AnalogSource/AP_AnalogSource_Arduino.cpp b/libraries/AP_AnalogSource/AP_AnalogSource_Arduino.cpp index 8c426684c6..b164ffd407 100644 --- a/libraries/AP_AnalogSource/AP_AnalogSource_Arduino.cpp +++ b/libraries/AP_AnalogSource/AP_AnalogSource_Arduino.cpp @@ -27,8 +27,7 @@ static volatile struct { // each conversion takes about 125 microseconds static void adc_timer(uint32_t t) { - if (bit_is_set(ADCSRA, ADSC) || - num_pins_watched == 0) { + if (bit_is_set(ADCSRA, ADSC) || num_pins_watched == 0) { // conversion is still running. This should be // very rare, as we are called at 1kHz return; @@ -142,6 +141,18 @@ void AP_AnalogSource_Arduino::assign_pin_index(uint8_t pin) delay(1000); } } + + // allow pin to be a channel (i.e. "A0") or an actual pin +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) + if (pin >= 54) pin -= 54; +#elif defined(__AVR_ATmega32U4__) + if (pin >= 18) pin -= 18; +#elif defined(__AVR_ATmega1284__) + if (pin >= 24) pin -= 24; +#else + if (pin >= 14) pin -= 14; +#endif + _pin_index = num_pins_watched; pins[_pin_index].pin = pin; num_pins_watched++; diff --git a/libraries/AP_RangeFinder/examples/AP_RangeFinder_test/AP_RangeFinder_test.pde b/libraries/AP_RangeFinder/examples/AP_RangeFinder_test/AP_RangeFinder_test.pde index d1a47f3804..9bed0abd6c 100644 --- a/libraries/AP_RangeFinder/examples/AP_RangeFinder_test/AP_RangeFinder_test.pde +++ b/libraries/AP_RangeFinder/examples/AP_RangeFinder_test/AP_RangeFinder_test.pde @@ -33,8 +33,9 @@ FastSerialPort0(Serial); // FTDI/console // declare global instances Arduino_Mega_ISR_Registry isr_registry; ModeFilterInt16_Size5 mode_filter(2); +AP_TimerProcess timer_scheduler; + #ifdef USE_ADC_ADS7844 - AP_TimerProcess adc_scheduler; AP_ADC_ADS7844 adc; AP_AnalogSource_ADC adc_source(&adc, AP_RANGEFINDER_PITOT_TYPE_ADC_CHANNEL, 0.25); // use Pitot tube #else @@ -51,14 +52,18 @@ void setup() Serial.println("Range Finder Test v1.1"); Serial.print("Sonar Type: "); Serial.println(SONAR_TYPE); - -#ifdef USE_ADC_ADS7844 + isr_registry.init(); - adc_scheduler.init(&isr_registry); + timer_scheduler.init(&isr_registry); + +#ifdef USE_ADC_ADS7844 adc.filter_result = true; - adc.Init(&adc_scheduler); // APM ADC initialization + adc.Init(&timer_scheduler); // APM ADC initialization aRF.calculate_scaler(SONAR_TYPE,3.3); // setup scaling for sonar #else + // initialise the analog port reader + AP_AnalogSource_Arduino::init_timer(&timer_scheduler); + aRF.calculate_scaler(SONAR_TYPE,5.0); // setup scaling for sonar #endif