Возможно ли библиотеку GyverButton подружить со сдвиговым регистром?

bort707

★★★★★★✩
21 Сен 2020
2,893
860

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@Старик Похабыч, Можете еще разок советом помочь, пожалуйста?:sneaky:
Тут проблема, в которой ну никак не могу разобраться:

На пины с А0 до А6 подключены следующие штуки:

А0 - тактовая кнопка от джойстика "C" - обычный DIY джойстик как в геймпаде на 2 оси и кнопка.

А1-А2 - оси Х\У джойстика "A" - обычный, без кнопок. Мультиметр показывает, что он на 5кОм

А3-А4 - оси Х\У джойстика "В" - тоже такой же.

А5-А6 - оси самого первого джойстика C. Вроде как на 10кОм

Всё подключено на проводках длиной около 20см.



Кнопка работает отлично. Также отлично работают первые два джойстика - А и Б.

Но! оси джойстика C как-то странным образом влияют друг на друга, если выводить на монитор порта через analogRead:
Если дергаю одну ось, то вместе с ней меняются показания и на другой. И наоборот.

Сперва грешил на замыкание - перепаял, проверил - ничего...

Потом прочитал, что много analogRead вызываемых друг за другом вызывают глюки.
Ради пробы отключил analogRead на А0-А4 и оставил на 5 и 6 - тоже ничего.
По советам из интернетов пробовал делать по два замера - один отбрасывать и оставлять второй.
Также пробовал добавлять задержку в 2-5 мс.
Ничего не помогает!

Так же есть и другая проблема - значения с джойстика С как-то не так инвертированны. Сейчас поясню:
Джойстик - это потенциометр, да? Поменял крайние ноги местами - движение инвертировалось.
На первых двух джойстиках я 5V и GND менял местами так, чтобы левое положение = 0, а правое = 1023. Низ = 0, верх = 1023.
То бишь чисто для удобства.

Тут же я пробовал менять провода местами несколько раз - ну вот вообще ничего!

Можете что подсказать, если не затруднит?

UPD Оставил только одно чтение для пробы - с А5. И всё равно они влияют друг на друга.
Вот текущий наскоро сваяный код:

C++:
void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

void loop() {

  //  Serial.print(analogRead(A1));
  //  delay(2);
  //  Serial.print('\t');
  //  Serial.print(analogRead(A2));
  //  delay(2);
  //  Serial.print('\t');
  //  Serial.print(analogRead(A3));
  //  delay(2);
  //  Serial.print('\t');
  //  Serial.print(analogRead(A4));
  //  delay(2);
  //  Serial.print('\t');
//  int a = analogRead(A5);
//  delay(5);
  Serial.print(analogRead(A5));
//  delay(5);
//  Serial.print('\t');
//  a = analogRead(A6);
//  delay(5);
//  Serial.print(analogRead(A6));
//  delay(5);

  Serial.println();
  delay(5);
}
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,190
1,280
Москва
Есть такое дело, обычно так бывает когда какие то из считываемых концов висят в воздухе. Если у пинов А0-А5 есть подтяжка к +5 (как у цифровых) то пины А6 и А7 ее не имеют и получается висят в воздухе. Но если они подключены к джойстику , то так быть не должно.
Прозвоните мультиметром джойстик с кнопкой
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@Старик Похабыч, Большое спасибо за ответ

Перепроверил ещё раз, звонятся нормально:
одна ось 9.1кОм
, вторая 9.2, что можно приравнять к 10, учитывая китайское качество.

Середины у них 4.6 и 5.2 кОм, что тоже в пределах нормы...

Значит проблема точно не в них...

И меня еще вот что смущает:
когда какие то из считываемых концов висят в воздухе
Если я считываю данные с А5, то он подвержен влиянию А6 даже тогда, когда считывание А6 не прописано в коде (закомментировано).
То бишь, оно вроде как и читаться-то не должно.

И с подтяжкой тоже странно - джойстик-то подключен, значит, по идее, оно не может в воздухе висеть.

Если припаять вручную подтягивающие резисторы, то тоже непонятно, как они тут помогут - джойстик-то и так висит же...
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@Старик Похабыч,Я вот теперь боюсь, как бы ардуина корявой не оказалась.
Что интересно - если проводками цеплять А5-6-7 то на землю, то на +5, то значения 0 и 1023 отображаются нормально вроде как.

А кучка параллельно идущих проводов не может давать наводки такие?
У меня в ряд подключены вот эти А0-А6 и одновременно с этим рядышком идут провода на сдвиговый регистр.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,190
1,280
Москва
подцепленные на землю - это притянутые.
Если взять резистор на 10к и подцепить на +5 в эти пины , то наводки уйдут. При чтении будет 1023. Если проводом замкнуть на землю, то будет 0, без наводок. Потенциометр - переменный резистор. у него 3 контакта + , земля и средний , который на пин идет. Соотв. он всегда притянут куда то и наводок быть не могло.
В статьях есть про мою версию наливатора, там 2-ой пост как раз про это идет. Но опять же, там больше про концевики - проблемы с нимим. А если взять любые аналоговые сенсоры (тот же потенциометр) , то он притянут уже сам по себе.
 
  • Лойс +1
Реакции: derungebundener

poty

★★★★★★✩
19 Фев 2020
2,990
895
@derungebundener, проще измерять не сопротивления, а напряжения на пинах А5 и А6. Тогда будет всё понятно.
Наводки постоянными не бывают. Либо джойстик накрылся, либо ошибка в пайке.
 
  • Лойс +1
Реакции: Старик Похабыч

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@Старик Похабыч,

Завтра попробую перекинуть те рабочие джойстики на эти пины, чтобы уже точно понять - глючит именно джойстик, или же проблема в ардуине.

@poty, Не совсем понял... Именно напряжение и мерится, джойстик на потенциометрах - плюс, минус, да центральный вывод на пин.

А как понять, что он накрылся? Как я выше писал - я его прозвонил. И не один раз уже за сегодня.
~10кОм показывает, центр показывает. Если один щуп подключить на крайнюю ногу, а другую на центральную и подергать джойстик - то и показания мультиметра как надо меняются. Я вот прямо очень сомневаюсь, что накрылся джойстик и при том сразу обе оси.

Ошибка в пайке - я тоже так поначалу думал. Отпаивал, перепроверял и паял обратно несколько раз. Даже саму плату прозванивал - сперва была мысль, что случайно каплей припоя закоротил А5-6. Но нет...


В общем, я вообще не могу предположить, в чем может быть причина.
 

poty

★★★★★★✩
19 Фев 2020
2,990
895
@derungebundener, я предлагаю измерять напряжения не Ардуиной, а мультиметром. Тогда:
1. Вы точно поймёте, в какой стороне проблема (Ардуино или джойстик).
2. Будет источник для размышлений. Сейчас всё слишком обще, неконкретно.
Я больше склоняюсь к тому, что у этого конкретного джойстика отличается распиновка, тогда Вы вполне могли подключить +5В или землю на движок потенциометра и картинка была бы очень похожей на описываемую Вами.
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@poty, Завтра вечером отпишусь, обязательно проверю, спасибо.

На счет распиновки очень сомневаюсь. Это же логично - если мультиметр показывает 9кОм, значит это крайние ноги, если ~4.5 - это.
И тем более у меня сейчас в руках второй такой же - банальные обычные потенциометры, ничего особенного...
 

poty

★★★★★★✩
19 Фев 2020
2,990
895
Потенциометры тоже имеют разные распиновки. Ваши замеры сопротивлений я посмотрел, есть и по ним вопросы, но почему, имея вопросы взаимного влияния, Вы не померили (отдельно от Ардуино, а потом - при подключении к Ардуино) - имеется ли связь между потенциометрами разных осей?
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@poty, Вчера, пока писал это - был уже заполночь. Сейчас вот буду всё еще раз замерять.
Просто я не очень опытный и думал, что достаточно будет замерить сопротивления - что вроде как логично.

UPD
Замерил именно напряжения - внешний бп на ~5.6в, бредборд, пучок проводков и мультиметр. Нормальные потенциометры, нормально и ожидаемо реагируют - от 0,001в до ~5.6в с срединой в 2.75в.
Шут знает что тут еще можно делать. Ну-с, попробуем еще разок спаять. Если не поможет - сперва перекину рабочие джойстики на пины А5-6. А если и это не поможет - придется смотреть джойстик на другой ардуине.

UPD_2
Проблема каким-то образом...
Прошла...

Не знаю как, но после банальной перепайки влияние практически полностью пропало.

Если раньше было так:
Ось 1 = 0-1023 и Ось 2 = ~200-~900 То бишь влияние почти на всем диапазоне было

То теперь стало так:
Ось 1 = 0-1023, а вот Ось 2 = ~470-~530. То есть отклонение стало всего единиц 25 в каждую сторону.

Дополнительно притянул свободный пин А7 к земле. На всякий случай.
И помимо этого при движении джойстика на графике плоттера виднелись "рывки", хотя джойстик двигался плавно. После установки конденсатора это тоже решилось. Сейчас добавлю оба кондика на А5-6 и посмотрим, что выйдет.

UPD_3
Вот так оно выглядит без подтяжки А7 к земле и без конденсатора на А6
Изображение во вложении
Синий двигаю, красный под влиянием.
Влияет не только движение, но и рывки о которых говорил выше

UPD_4 Не знаю как, но влияние снова появилось. И вдобавок второй джойстик скукожился до диапазона 400-600 (примерно) по всей длине движения.

UPD_5 Отчаялся и вместо этого глючащего джойстика поставил другой точно такой же - и он тоже глючит!
То бишь проблема либо в конструкции джойстиков, либо же в ардуине.
 

Вложения

Изменено: