Стенд цифровых и аналоговых датчиков
- Войдите на сайт для отправки комментариев
Здравствуйте уважаемые!
Подскажите пожалуйста, стоит задача подать 32 дискретныз и 32 аналоговых сигнала на два ардуино мега 2560,
пока едет вторая плата мега, пробую делать на одной (дискретных портов хватает, а аналогвых еще 16 буду брать со второй меги).
Схема такая: иметься 32 кнопки, первые контакты этих кнопок подключены к аналоговому и цифровому разъему на ардуино.
Вторые контакты кнопок подключены к переменным резисторам, чтобы не делать для каждого аналогово входа по резистору сделал группы по 8 контактов к резистору, т.е. одним резистором подаю сигнал на 8 аналоговых входов.
Кнопка сверху сделал для того чтобы переключаться между двумя режимами: при подаче на контакт резисторов 5V на сигнал актуален для аналоговых портов ардуино т.е. от 0 до 5V или (0-1023).
Когда подаю на контакт резисторов GND сигнал актуален для цифровых портов ардуино т.е. от 0 до 1.
По цифровым портам в терминале я хотел видеть единицы, поэтому сделал поддяжку к единице на цифровых портах, а когда туда приходит GND, сотвтетственно пришлось сделать инверсию.
Почему сделал так, оказалась я не зал что функция digitalWrite(pin, ???) может тянуть только к 5V (digitalWrite(pin, HIGH) к нулю как я хотел не тянет.
Проблема заключаеться в аналоговых портах, когда я кручу ручку потенциометра, изменяется не только его сигнал но и соседние, как исправить? Прошу прощения что вопрос сам по себе маленький, а написал я много, но сделал я для того чтобы было понятно Вам. Спасибо.
Может резисторов добавить?
И да забыл самое главное, скетч:
void setup() { Serial.begin(9600); pinMode(22, INPUT); pinMode(23, INPUT); pinMode(24, INPUT); pinMode(25, INPUT); pinMode(26, INPUT); pinMode(27, INPUT); pinMode(28, INPUT); pinMode(29, INPUT); pinMode(30, INPUT); pinMode(31, INPUT); pinMode(32, INPUT); pinMode(33, INPUT); pinMode(34, INPUT); pinMode(35, INPUT); pinMode(36, INPUT); pinMode(37, INPUT); pinMode(38, INPUT); pinMode(39, INPUT); pinMode(40, INPUT); pinMode(41, INPUT); pinMode(42, INPUT); pinMode(43, INPUT); pinMode(44, INPUT); pinMode(45, INPUT); pinMode(46, INPUT); pinMode(47, INPUT); pinMode(48, INPUT); pinMode(49, INPUT); pinMode(50, INPUT); pinMode(51, INPUT); pinMode(52, INPUT); pinMode(53, INPUT); pinMode(21, INPUT); } void loop() { digitalWrite(22, HIGH); digitalWrite(23, HIGH); digitalWrite(24, HIGH); digitalWrite(25, HIGH); digitalWrite(26, HIGH); digitalWrite(27, HIGH); digitalWrite(28, HIGH); digitalWrite(29, HIGH); digitalWrite(30, HIGH); digitalWrite(31, HIGH); digitalWrite(32, HIGH); digitalWrite(33, HIGH); digitalWrite(34, HIGH); digitalWrite(35, HIGH); digitalWrite(36, HIGH); digitalWrite(37, HIGH); digitalWrite(38, HIGH); digitalWrite(39, HIGH); digitalWrite(40, HIGH); digitalWrite(41, HIGH); digitalWrite(42, HIGH); digitalWrite(43, HIGH); digitalWrite(44, HIGH); digitalWrite(45, HIGH); digitalWrite(46, HIGH); digitalWrite(47, HIGH); digitalWrite(48, HIGH); digitalWrite(49, HIGH); digitalWrite(50, HIGH); digitalWrite(51, HIGH); digitalWrite(52, HIGH); digitalWrite(53, HIGH); digitalWrite(21, HIGH); int analog0 = analogRead(A0); int analog1 = analogRead(A1); int analog2 = analogRead(A2); int analog3 = analogRead(A3); int analog4 = analogRead(A4); int analog5 = analogRead(A5); int analog6 = analogRead(A6); int analog7 = analogRead(A7); int analog8 = analogRead(A8); int analog9 = analogRead(A9); int analog10 = analogRead(A10); int analog11 = analogRead(A11); int analog12 = analogRead(A12); int analog13 = analogRead(A13); int analog14 = analogRead(A14); int analog15 = analogRead(A15); boolean discret0 = !digitalRead(23); boolean discret1 = !digitalRead(25); boolean discret2 = !digitalRead(27); boolean discret3 = !digitalRead(29); boolean discret4 = !digitalRead(31); boolean discret5 = !digitalRead(33); boolean discret6 = !digitalRead(35); boolean discret7 = !digitalRead(37); boolean discret8 = !digitalRead(39); boolean discret9 = !digitalRead(41); boolean discret10 = !digitalRead(43); boolean discret11 = !digitalRead(45); boolean discret12 = !digitalRead(47); boolean discret13 = !digitalRead(49); boolean discret14 = !digitalRead(51); boolean discret15 = !digitalRead(53); boolean discret16 = !digitalRead(22); boolean discret17 = !digitalRead(24); boolean discret18 = !digitalRead(26); boolean discret19 = !digitalRead(28); boolean discret20 = !digitalRead(30); boolean discret21 = !digitalRead(32); boolean discret22 = !digitalRead(34); boolean discret23 = !digitalRead(36); boolean discret24 = !digitalRead(38); boolean discret25 = !digitalRead(40); boolean discret26 = !digitalRead(42); boolean discret27 = !digitalRead(44); boolean discret28 = !digitalRead(46); boolean discret29 = !digitalRead(48); boolean discret30 = !digitalRead(50); boolean discret31 = !digitalRead(52); boolean discret32 = !digitalRead(21); Serial.print(analog0+1000); Serial.print(" "); Serial.print(analog1+1000); Serial.print(" "); Serial.print(analog2+1000); Serial.print(" "); Serial.print(analog3+1000); Serial.print(" "); Serial.print(analog4+1000); Serial.print(" "); Serial.print(analog5+1000); Serial.print(" "); Serial.print(analog6+1000); Serial.print(" "); Serial.print(analog7+1000); Serial.print(" "); Serial.print(analog8+1000); Serial.print(" "); Serial.print(analog9+1000); Serial.print(" "); Serial.print(analog10+1000); Serial.print(" "); Serial.print(analog11+1000); Serial.print(" "); Serial.print(analog12+1000); Serial.print(" "); Serial.print(analog13+1000); Serial.print(" "); Serial.print(analog14+1000); Serial.print(" "); Serial.print(analog15+1000); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(1500); Serial.print(" "); Serial.print(discret0); Serial.print(" "); Serial.print(discret1); Serial.print(" "); Serial.print(discret2); Serial.print(" "); Serial.print(discret3); Serial.print(" "); Serial.print(discret4); Serial.print(" "); Serial.print(discret5); Serial.print(" "); Serial.print(discret6); Serial.print(" "); Serial.print(discret7); Serial.print(" "); Serial.print(discret8); Serial.print(" "); Serial.print(discret9); Serial.print(" "); Serial.print(discret10); Serial.print(" "); Serial.print(discret11); Serial.print(" "); Serial.print(discret12); Serial.print(" "); Serial.print(discret13); Serial.print(" "); Serial.print(discret14); Serial.print(" "); Serial.print(discret15); Serial.print(" "); Serial.print(discret16); Serial.print(" "); Serial.print(discret17); Serial.print(" "); Serial.print(discret18); Serial.print(" "); Serial.print(discret19); Serial.print(" "); Serial.print(discret20); Serial.print(" "); Serial.print(discret21); Serial.print(" "); Serial.print(discret22); Serial.print(" "); Serial.print(discret23); Serial.print(" "); Serial.print(discret24); Serial.print(" "); Serial.print(discret25); Serial.print(" "); Serial.print(discret26); Serial.print(" "); Serial.print(discret27); Serial.print(" "); Serial.print(discret28); Serial.print(" "); Serial.print(discret29); Serial.print(" "); Serial.print(discret30); Serial.print(" "); Serial.print(discret31); Serial.print(" "); Serial.print(discret32); Serial.println(" "); delay(1000); }Если у вас один резистор задействован на 8 входов, откуда же там взяться разным значениям? По вашей схеме я вижу только 4 независимых сигнала, чтобы сделать из них 32 - нужно добавить еще три (2**3) независимых сдвигающих регистра.
По поводу кода - не надоело набивать одно и то же по 32 раза? Может стоит попробовать циклы?
Я имел в виду соседние изменяются, т.е. 1 резистор выкручен на мин, значит на выходе 5V, из 32 аналоговых портов на 1,5,9,13,17,21,25,29 портах значение 1023, а на портах между ними изменения происходят. как с эти бороться? по поводу кода переработаю.
А верна ли схема как Вы думаете?
Я имел в виду соседние изменяются, т.е. 1 резистор выкручен на мин, значит на выходе 5V, из 32 аналоговых портов на 1,5,9,13,17,21,25,29 портах значение 1023, а на портах между ними изменения происходят. как с эти бороться?
По той схеме, что нарисована - соседние подстроечники вроде не должны влиять друг на друга. Может, собрал неправильно? крайние и средние контакты резистора не перепутал7
Не не перепутал, проверил все на короткое а потом без ардуино подключил лишь землю и питание и проверял что выходит все норм, я думаю нужно после каждой кнопки ставить резистор 10к и тем самым ткнуть к земле.
я думаю нужно после каждой кнопки ставить резистор 10к и тем самым ткнуть к земле.
попробуй. но думаю что это ничего не изменит, кроме уровней сигналов