Почему я получаю аналоговые показания для неподключенных портов, нажимая на пьезоэлемент в канале 1?
Пьезоэлемент подключен только к каналу 1 (порт Arduino A[0]). Каналы Ch 1 – Ch 6 подключены к монофоническим разъемам «мама», а проводка заземления (GND) идет последовательно от разъема 1, 2 и 3 и так далее… до конца канала 6 к порту GND Arduino.
Каналы Ch2 – Ch6 не подключены к пьезоэлементу, но все же подключены к плате arduino. А 1 -А[5]
Это последовательное чтение ... первый столбец - Ch1 ... Ch 6.
Taped 3 times
787 0 0 0 0 0
191 0 0 0 0 0
19 0 0 0 0 0
937 123 63 5 0 0 < ch2, ch3 ch4 ERROR !>
86 0 0 0 0 0
13 0 0 0 0 0
507 83 126 16 8 0 < ch2, ch3, ch4 ch5 ERROR !>
21 1 1 0 0 0 < ch2, ch3 ERROR !>
0 0 18 0 0 0 < ch3 ERROR !>
Это код ардуино:
const int singnalLevel = 10;
boolean treshold = false;
int sensorReading[6];
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorReading[6] = {0, 0, 0, 0, 0, 0};
boolean treshold = false;
sensorReading[0] = analogRead(A0);
sensorReading[1] = analogRead(A1);
sensorReading[2] = analogRead(A2);
sensorReading[3] = analogRead(A3);
sensorReading[4] = analogRead(A4);
sensorReading[5] = analogRead(A5);
for (int index = 0; index <= 5 ; index++) {
if(sensorReading[index] > singnalLevel){
treshold = true;
}
}
if(treshold){
for (int index = 0; index <= 5 ; index++) {
Serial.print(sensorReading[index]);
Serial.print(" ");
}
Serial.println();
}
delay(1);
}
Это принципиальная схема.
Я не уверен, является ли это правильным ответом или нет, но я все равно отправлю его, так как есть небольшой шанс, что он будет полезен.
В других микроконтроллерах, которые я использовал ранее, вам необходимо иметь время установления между операциями чтения канала АЦП, иначе предыдущее чтение, вероятно, повлияет на последующие чтения. Я еще не использовал АЦП на Arduino, но, возможно, есть библиотечная функция, которую вы можете вызвать, чтобы был зависимый от процессора сон/задержка, которая используется при чтении каналов АЦП. В любом случае вы можете легко проверить эту теорию, установив задержку между считываниями канала АЦП, чтобы увидеть, исчезнет ли проблема.
Мультиплексору на ATMega нужно время, чтобы переключиться с одного входа на другой вход. Вы можете добавить задержку, чтобы дождаться стабилизации, а затем прочитать его ввод.
analogRead(A0);
delay(10);
sensorReading[0] = analogRead(A0);
analogRead(A1);
delay(10);
sensorReading[0] = analogRead(A1);
Кенни