поэтому я создал схему, которая отправляет аналоговый сигнал через ЦАП, используя I2C, а затем считывает аналоговый сигнал через АЦП.Тем не менее, я получаю неожиданный вывод из кода ниже:
#include <Wire.h>
#include <Adafruit_MCP4725.h>
#define voltsIn A0
Adafruit_MCP4725 dac; // constructor
uint32_t dac_value=0;
uint8_t adcValueRead[3] = {};
int16_t result=0;
void setup(void) {
Serial.begin(9600);
Wire.begin();
dac.begin(0x60);
}
void loop(void) {
if (Serial.available()>0) {
dac_value=Serial.parseInt()
Wire.beginTransmission(0x6A);
Wire.write(0xA8);
Wire.endTransmission();
delay(1000);
Wire.requestFrom(0x6A, 3);
for (uint8_t i=0; i<3; ++i) {
adcValueRead[i]=Wire.read();
}
result = (( ( (int16_t)(adcValueRead[0]) ) << 8) + adcValueRead[1]);
Serial.print(result*0.0000625);
delay(500);
}
}
Таким образом, ожидаемый вывод при вводе 0 должен быть:
-2.05 (это просто нижний пределАЦП).
Вместо этого мой вывод:
-2.05 (задержка) -2.05
Тогда, когда мой ввод 2048, мой вывод:
0 (задержка) -2.05
Ввод 4095 дает мне:
2.05 (задержка) -2.05
Итак, насколько я понимаю, после того, как arduino прочитает мой ввод в первый раз, значение0 затем остается внутри последовательного порта, который затем запускает оператор if.Во-первых, мне просто интересно, почему последовательный порт будет действовать таким образом и как я мог бы обойти проблему, чтобы он печатал только одно значение для одного входа.