#include #include #include MCP3424 adc(0x68); void setup() { SerialUSB.begin(57600); Wire.begin(); adc.generalCall(GC_RESET); } void show_v(double& value, _ConfReg r) { char v[24], buff[48]; dtostrf(value,8,8,v); sprintf(buff, "channel: %d, gain: %d, value: %s", r.ch, 1 << r.pga, v); SerialUSB.println(buff); } double value; void loop() { for (int i = (int)CH1; i <= (int)CH4; i++) { _ConfReg& c = adc.creg[(Channel)i]; c.bits = { GAINx1, SR12B, ONE_SHOT, (Channel)i, 1 }; ConvStatus err = adc.read(c.ch, value); //while (err != R_OK) ConvStatus err = adc.read(c.ch, value); if (err == R_OK) { show_v(value, c); c.srate = SR18B; c.pga = adc.findGain(value); err = adc.read(c.ch, value); if (err == R_OK) { show_v(value, c); SerialUSB.println(); } else SerialUSB.println(" error."); } else { SerialUSB.print("conversion error: "); SerialUSB.println(err); } } asm volatile ("nop"); } char *dtostrf (double val, signed char width, unsigned char prec, char *sout) { asm(".global _printf_float"); char fmt[20]; sprintf(fmt, "%%%d.%df", width, prec); sprintf(sout, fmt, val); return sout; }