/* Example for analogContinuousRead * It measures continuously the voltage on pin A9, * Write v and press enter on the serial console to get the value * Write c and press enter on the serial console to check that the conversion is taking place, * Write t to check if the voltage agrees with the comparison in the setup() * Write s to stop the conversion, you can restart it writing r. */ #include #include ADC *adc = new ADC(); // adc object #if defined(ADC_TEENSY_LC) // teensy LC #define PINS 13 #define PINS_DIFF 2 uint8_t adc_pins[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12}; uint8_t adc_pins_diff[] = {A10, A11}; #elif defined(ADC_TEENSY_3_0) // teensy 3.0 #define PINS 14 #define PINS_DIFF 4 uint8_t adc_pins[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13}; uint8_t adc_pins_diff[] = {A10, A11, A12, A13}; #elif defined(ADC_TEENSY_3_1) || defined(ADC_TEENSY_3_2) // teensy 3.1/3.2 #define PINS 21 #define PINS_DIFF 4 uint8_t adc_pins[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20}; uint8_t adc_pins_diff[] = {A10, A11, A12, A13}; #elif defined(ADC_TEENSY_3_5) // Teensy 3.5 #define PINS 27 #define PINS_DIFF 2 uint8_t adc_pins[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26}; uint8_t adc_pins_diff[] = {A10, A11}; #elif defined(ADC_TEENSY_3_6) // Teensy 3.6 #define PINS 25 #define PINS_DIFF 2 uint8_t adc_pins[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, A23, A24}; uint8_t adc_pins_diff[] = {A10, A11}; #elif defined(ADC_TEENSY_4_0) // Teensy 4.0 #define PINS 14 #define DIG_PINS 10 #define PINS_DIFF 0 uint8_t adc_pins[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13}; uint8_t adc_pins_dig[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9}; uint8_t adc_pins_diff[] = {}; #elif defined(ADC_TEENSY_4_1) // Teensy 4.1 #define PINS 18 #define DIG_PINS 10 #define PINS_DIFF 0 uint8_t adc_pins[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17}; uint8_t adc_pins_dig[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9}; uint8_t adc_pins_diff[] = {}; #endif // defined void setup() { pinMode(LED_BUILTIN, OUTPUT); for (int i = 0; i < PINS; i++) { pinMode(adc_pins[i], INPUT); } Serial.begin(9600); ///// ADC0 //// adc->adc0->setAveraging(16); // set number of averages adc->adc0->setResolution(12); // set bits of resolution adc->adc0->setConversionSpeed(ADC_CONVERSION_SPEED::MED_SPEED); // change the conversion speed adc->adc0->setSamplingSpeed(ADC_SAMPLING_SPEED::MED_SPEED); // change the sampling speed ////// ADC1 ///// #ifdef ADC_DUAL_ADCS adc->adc1->setAveraging(16); // set number of averages adc->adc1->setResolution(12); // set bits of resolution adc->adc1->setConversionSpeed(ADC_CONVERSION_SPEED::MED_SPEED); // change the conversion speed adc->adc1->setSamplingSpeed(ADC_SAMPLING_SPEED::MED_SPEED); // change the sampling speed #endif delay(500); } int value = 0; int pin = 0; void loop() { for (int i = 0; i < PINS; i++) { value = adc->analogRead(adc_pins[i]); // read a new value, will return ADC_ERROR_VALUE if the comparison is false. Serial.print("A"); Serial.print(i); Serial.print(": "); Serial.print(value * 3.3 / adc->adc0->getMaxValue(), 2); Serial.print(". "); if (i == 9) { Serial.println(); } else if (i == 11) { Serial.print("\t"); } else if (i == 13) { Serial.print("\t"); } else if (i == 22) { Serial.println(); } } Serial.println(); #if ADC_DIFF_PAIRS > 0 Serial.print("Differential pairs: "); for (int i = 0; i < PINS_DIFF; i += 2) { value = adc->analogReadDifferential(adc_pins_diff[i], adc_pins_diff[i + 1]); // read a new value, will return ADC_ERROR_VALUE if the comparison is false. Serial.print(i); Serial.print(": "); Serial.print(value * 3.3 / adc->adc0->getMaxValue(), 2); Serial.print(". "); } Serial.println(); #endif // the actual parameters for the temperature sensor depend on the board type and // on the actual batch. The printed value is only an approximation //Serial.print("Temperature sensor (approx.): "); //value = adc->analogRead(ADC_INTERNAL_SOURCE::TEMP_SENSOR); // read a new value, will return ADC_ERROR_VALUE if the comparison is false. //Serial.print(": "); //float volts = value*3.3/adc->adc0->getMaxValue(); //Serial.print(25-(volts-0.72)/1.7*1000, 2); // slope is 1.6 for T3.0 //Serial.println(" C."); // Print errors, if any. if (adc->adc0->fail_flag != ADC_ERROR::CLEAR) { Serial.print("ADC0: "); Serial.println(getStringADCError(adc->adc0->fail_flag)); } #ifdef ADC_DUAL_ADCS if (adc->adc1->fail_flag != ADC_ERROR::CLEAR) { Serial.print("ADC1: "); Serial.println(getStringADCError(adc->adc1->fail_flag)); } #endif adc->resetError(); Serial.println(); Serial.println(); //digitalWriteFast(LED_BUILTIN, !digitalReadFast(LED_BUILTIN)); delay(50); }