У меня есть датчик, и он генерирует аналоговый сигнал.
Я читаю все аналоговые данные и отправляю их на мой компьютер.
uint8_t sensors[] = { A0,A1,A2,A3,A4,A5,A6 };
const int len = sizeof(sensors) / sizeof(sensors[0]);
void loop(void)
{
for (size_t i = 0; i < len; i++)
{
auto sensor = sensors[i];
int sensorValue = analogRead(sensor);
// Convert the analogue reading (which goes from 0 - 1023) to a voltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);
char t[100];
sprintf(t, "%d:%d$\n", sensor, sensorValue);
uint8_t t1[100];
//PrintSerial.println(t);
memcpy(t1, t, 100);
wifi.send(t1, strlen(t));
}
delay(300);
}
Я построил аналог чтения. Почему график выглядит так?
Ответы:
Этого следовало ожидать.
К другим контактам ничего не подключено, поэтому их напряжение плавающее.
Arduino MCU имеет только один АЦП. Для считывания различных аналоговых выводов он использует мультиплексор, чтобы подключить вывод, который вы хотите прочитать, к одному АЦП. АЦП внутри микроконтроллера имеет внутри себя конденсатор «сэмплируй и держи».
Чтобы прочитать напряжение на контакте, он подключит контакт, чтобы зарядить образец и удерживать конденсатор. Затем он будет отключать и измерять напряжение образца и удерживать конденсатор, по одному биту за раз.
Так что в вашем случае, считывая напряжение на подключенном контакте, он зарядит конденсатор. Затем он будет читать неподключенные контакты. Но поскольку ничто не подключено, конденсатор выборки и удержания будет оставаться примерно на одном напряжении, потому что неподключенный контакт не будет ни заряжать, ни разряжать его.
Измерение напряжения на образце и удерживающем конденсаторе немного снизит это напряжение, поэтому на графике линии будут ниже, чем в предыдущем измерении.
PS Кроме того, поскольку все контакты расположены на макете, у вас будет некоторая емкостная связь между соседними контактами.
источник
Акк действительно маленький конденсатор. Когда вы переключаете каналы, заряд в конденсаторе переносится с одного входного канала на другой. Если следующий входной канал имеет очень высокий импеданс или очень низкую емкость, заряды на конденсаторе переменного тока доминируют, и его напряжение изменяется незначительно.
Кроме того, плохой код также может быть причиной этого - обычно из-за нехватки времени для завершения добавления.
источник