Стенд цифровых и аналоговых датчиков

Sadd
Offline
Зарегистрирован: 26.04.2016

Здравствуйте уважаемые!

Подскажите пожалуйста, стоит задача подать 32 дискретныз и 32 аналоговых сигнала на два ардуино мега 2560,

пока едет вторая плата мега, пробую делать на одной (дискретных портов хватает, а аналогвых еще 16 буду брать со второй меги).

Схема такая: иметься 32 кнопки, первые контакты этих кнопок подключены к аналоговому и цифровому разъему на ардуино.

Вторые контакты кнопок подключены к переменным резисторам, чтобы не делать для каждого аналогово входа по резистору сделал группы по 8 контактов к резистору, т.е. одним резистором подаю сигнал на 8 аналоговых входов.

Кнопка сверху сделал для того чтобы переключаться между двумя режимами: при подаче на контакт резисторов 5V на сигнал актуален для аналоговых портов ардуино т.е. от 0 до 5V или (0-1023).

Когда подаю на контакт резисторов GND сигнал актуален для цифровых портов ардуино т.е. от 0 до 1.

По цифровым портам в терминале я хотел видеть единицы, поэтому сделал поддяжку к единице на цифровых портах, а когда туда приходит GND, сотвтетственно пришлось сделать инверсию.

Почему сделал так, оказалась я не зал что функция digitalWrite(pin, ???) может тянуть только к 5V (digitalWrite(pin, HIGH) к нулю как я хотел не тянет.

Проблема заключаеться в аналоговых портах, когда я кручу ручку потенциометра, изменяется не только его сигнал но и соседние, как исправить? Прошу прощения что вопрос сам по себе маленький, а написал я много, но сделал я для того чтобы было понятно Вам. Спасибо.

Sadd
Offline
Зарегистрирован: 26.04.2016

Может резисторов добавить?

И да забыл самое главное, скетч:

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);
  }

 

 

 

b707
Offline
Зарегистрирован: 26.05.2017

Если у вас один резистор задействован на 8 входов, откуда же там взяться разным значениям? По вашей схеме я вижу только 4 независимых сигнала, чтобы сделать из них 32 - нужно добавить еще три (2**3) независимых сдвигающих регистра.

По поводу кода - не надоело набивать одно и то же по 32 раза? Может стоит попробовать циклы?

Sadd
Offline
Зарегистрирован: 26.04.2016

Я имел в виду соседние изменяются, т.е. 1 резистор выкручен на мин, значит на выходе 5V, из 32 аналоговых портов на 1,5,9,13,17,21,25,29 портах значение 1023, а на портах между ними изменения происходят. как с эти бороться? по поводу кода переработаю.

А верна ли схема как Вы думаете?

b707
Offline
Зарегистрирован: 26.05.2017

Sadd пишет:

Я имел в виду соседние изменяются, т.е. 1 резистор выкручен на мин, значит на выходе 5V, из 32 аналоговых портов на 1,5,9,13,17,21,25,29 портах значение 1023, а на портах между ними изменения происходят. как с эти бороться?

По той схеме, что нарисована - соседние подстроечники вроде не должны влиять друг на друга. Может, собрал неправильно? крайние и средние контакты резистора не перепутал7

Sadd
Offline
Зарегистрирован: 26.04.2016

Не не перепутал, проверил все на короткое а потом без ардуино подключил лишь землю и питание и проверял что выходит все норм, я думаю нужно после каждой кнопки ставить резистор 10к и тем самым ткнуть к земле.

 

b707
Offline
Зарегистрирован: 26.05.2017

Sadd пишет:

 я думаю нужно после каждой кнопки ставить резистор 10к и тем самым ткнуть к земле.

попробуй. но думаю что это ничего не изменит, кроме уровней сигналов