Помощь с калькулятором на ардуино

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

Доброго времени суток! Несколько дней уже пытаюсь понять в чём проблема моего проэкта - решил написать сюда, т. к. нужен совет профессионалов. Обо всём по порядку:

Я купил вот такой аналог ардуино на али: https://ru.aliexpress.com/item/WAVGAT-UNO-R3-CH340G-MEGA328P-Arduino-UNO/32877460592.html?spm=a2g0s.9042311.0.0.388e33edSs6Llg

Затем вот такой довольно стандартный экран с уже припаяным I2C-переходником: https://ru.aliexpress.com/item/1PCS-LCD-module-Blue-screen-IIC-I2C-1602-for-arduino-1602-LCD-UNO-r3-mega2560/32763867041.html?spm=a2g0s.9042311.0.0.388e33edSs6Llg

И наконец клавиатура с аналоговым выходом: https://ru.aliexpress.com/item/Button-Keypad-module-4x4-Analog-pin-connection/32635207928.html?spm=a2g0s.9042311.0.0.388e33edSs6Llg

С экраном проблем не возникло. Подключил по вот-такой схеме: 

Стандартная схема подключения экрана

Дальше подключил клавиатуру вот-так:

Теперь к сути проблемы. Аналоговый вход должен выдавать значение от 0 до 1023. С другой стороны клавиатуры есть таблица значений нажатых клавиш от 0 до 1023(есть на странице на али). Питаю как и нада от 5 вольт. Сама плата питается от USB компа. Но у меня если я подключаю только клавиатуру(без экрана) для разных клавиш значения разбегаються от 1000 с копейками до 4000 с копейками, но при этом каждая клавиша имеет индивидуальное значение, а когда ни одна не нажата - считывается 0. Но только стоит подключить дисплэй, как значение нажатых клавиш начинают совпадать, а когда ни одна не нажата - выскакивает рандомное значение около 610. Как мне решить данную проблему и заставить работать клавиатуру одновременно с экраном? Буду благодарен за дельные советы.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Посмотрите осциллографом, что у Вас происходит на шине 5 В.

sadman41
Offline
Зарегистрирован: 19.10.2016

Плата Wavgat?

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

andriano пишет:

Посмотрите осциллографом, что у Вас происходит на шине 5 В.

К сожелению нету в хозяйстве.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

sadman41 пишет:

Плата Wavgat?

Да, бросил же ссылку.

sadman41
Offline
Зарегистрирован: 19.10.2016

С вавгатом еще и не такое может быть.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

sadman41 пишет:

С вавгатом еще и не такое может быть.

Значит я лоханулся по полной, купив эту плату?

sadman41
Offline
Зарегистрирован: 19.10.2016

Кто ж знает. Сверху строка поиска, наберите wavgat. Почитаете, сами решите.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

sadman41 пишет:

Кто ж знает. Сверху строка поиска, наберите wavgat. Почитаете, сами решите.

Хорошо, про качество платы я понял... А вот в моем конкретном случае можете посоветовать как можна хотябы попытатся заставить это чудо работать. Я готов к костылям и велосипедам. Я в этом деле новичок и уверен, что не знаю еще многих аспектов. Может Вы сталкивались с подобной проблемой?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Приведите ваш скетч. Может там чего не так...

sadman41
Offline
Зарегистрирован: 19.10.2016

Я - нет. В темах по вавату объяснено, почему там значения разбегаются и всё такое. А вот хватит ли нервов разобраться с этим - вопрос, конечно.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

asam пишет:

Приведите ваш скетч. Может там чего не так...

Свой скетч я множество раз переписывал, удалял и снова создавал(да-да, я такой), но базировался на тестовом скетче, предоставленым изготовителем клавиатуры и уже здесь ни черта не работало так, как заверяют автора(даже без дисплэя, чисто с клавиатурой и ардуионо, я хоть и получал более-менее стабильную роботу, но значения в таблице на целую голову отличались от данных в таблице). Вот скетч, который я использувал для совмещение роботы клавиатуры и экрана:

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

int keyVolume = 0;
void setup() {
  Serial.begin (9600);
  lcd.init();
  lcd.backlight();// Включаем подсветку дисплея
  lcd.print("Ready...");
}

void loop() {
 int sensorValue = analogRead (keyVolume);
  Serial.println (sensorValue);//выводим значение в порт
  lcd.clear();
  lcd.print(sensorValue);//выводим значение на экран
  delay(500);
}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Sklyanskiy пишет:

sadman41 пишет:

Кто ж знает. Сверху строка поиска, наберите wavgat. Почитаете, сами решите.

Хорошо, про качество платы я понял... А вот в моем конкретном случае можете посоветовать как можна хотябы попытатся заставить это чудо работать. Я готов к костылям и велосипедам. Я в этом деле новичок и уверен, что не знаю еще многих аспектов. Может Вы сталкивались с подобной проблемой?

в ссылке на плату wavgat (внизу) есть описание как поставит аддон на эту плату, там же и ссылка на сам аддон.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

в IDE есть вавгат ?

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

xDriver пишет:

Sklyanskiy пишет:

sadman41 пишет:

Кто ж знает. Сверху строка поиска, наберите wavgat. Почитаете, сами решите.

Хорошо, про качество платы я понял... А вот в моем конкретном случае можете посоветовать как можна хотябы попытатся заставить это чудо работать. Я готов к костылям и велосипедам. Я в этом деле новичок и уверен, что не знаю еще многих аспектов. Может Вы сталкивались с подобной проблемой?

в ссылке на плату wavgat (внизу) есть описание как поставит аддон на эту плату, там же и ссылка на сам аддон.

Да это, батюшка не аддон, а огромное кол-во кода, написаного в целях "заставить Arduino IDE работать с этой китайской подделкой". Его я поставил. Без него даже не определяется сие чудо-чуднее и уж тем более без этого кода и библиотек(которые дает производитель) невозможно банально залить самый простый скетч. М-да... Боюсь мне остается идти на конференцию по китайской эклектронике и программированию на тему "Как структурировать дерьмо, чтобы оно не разтекалось". Уже жалею, что сэкономил и не купил оригинальную ардуинку... Спасибо, что хотябы пытаетесь помочь.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

xDriver пишет:

в IDE есть вавгат ?

Так точно, капитан. Первым делом сделал после покупки.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

у меня опять свободный вечер :)

вавгат есть только в версии нано, могу зацепить патанциометр на А0 и посмотреть чяВо выводит

надо ?

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

xDriver пишет:

у меня опять свободный вечер :)

вавгат есть только в версии нано, могу зацепить патанциометр на А0 и посмотреть чяВо выводит

надо ?

Буду благодарен. Возможно это не баг, а фича))) Может сможем с вами найти закономерности этих чудес в мире електроники. А я пока попытаюсь к другим пинам присобачить клавиатуру.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ожидайте ...

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

xDriver пишет:

ожидайте ...

Вас понял, жду с нетерпением.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Sklyanskiy пишет:

xDriver пишет:

ожидайте ...

Вас понял, жду с нетерпением.

такс... 

а вавгат то даже не распаянный! 

ща гребенки напаяю....

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

Нашел кстати новую закономерность:

Оказвывается с напряжением предпологаймо все хорошо, более-менее стабильная работа есть, если просто отключить провода для вывода информации на экран(даже не трогая питания и землю модуля). Может данные идущие к дисплею создают помехи для клавиатуры? Я понимаю, что звучит как бред, но возможно там дорожки немного пересекаются на плате либо некачественные. Может мне как-то на обычные пины попытатся присобачить клавиатуру(если это возможно)?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

с перемеником у меня все нормально!

чип и три положения:

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

xDriver пишет:

с перемеником у меня все нормально!

чип и три положения:


Тогда у меня вопрос: что у вас нормально работает, если функция analogRead() должна возвращать значение от 0 до 1023? Но это в теории. Смотря на результаты вашего эксперимента, можно заявить, что у меня похожая ситуация, но если я подключаю кроме А0(клавиатуры) пины А4 и А5 к экрану, то получаю сказочные результаты которые будто-бы домножаються на рандомный коэффициент, в следствии чего невозможно определить какая кнопка на клавиатуре с аналоговым выходом нажата... Что-то вопросов становится все больше, а ответов не прибавляется... До чего же сложно жить в этом мире...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

батенька, так вы про этот чип ничего не знаете ? 

ацп 12 бит и тактовая 32мГц ?

 

надо 0-1024

  analogReadResolution(10);

 

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

xDriver пишет:

батенька, так вы про этот чип ничего не знаете ? 

ацп 12 бит и тактовая 32мГц ?


Вы меня раскусили... Полный новачок и про чип почти ничего не знаю. Нашёл себе проблем, не знал как решить - написал сюда. Ещё раз убедился в том, что дурак-дураком, денег на нормальную ардуинку не осталось, а проект нужно доделать чем скорее... До этого работал только с обычной ардуинкой оригинальной. Решил сэкономить и плохо вчитался в описание. Теперь не знаю что и поделать, ведь знаний моих недостаточно по ходу дела, чтобы воплотить в жизнь чёртов калькулятор с несколькими полезными для меня функциями...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

извиняюсь 0-1023...

  analogReadResolution(10);

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

фото давайте, как и чем там у вас все подключено

может и найдем чего

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

xDriver пишет:

извиняюсь 0-1023...

  analogReadResolution(10);

 


Спасибо за совет. Попытаюсь завтра розобраться с данной функцией, т. к. у меня уже пол первого, а завтра утром вставать рано. Пойду отосплюсь, надеюсь завтра всё доделаю. Спасибо за подсказку в каком направлении копать.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

дык у меня пол второго уже :) удачи!

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

xDriver пишет:

фото давайте, как и чем там у вас все подключено

может и найдем чего

Ну что ж, функцию analogReadResolution() юзнул, числа стали болле адекватными, но ситуация не изменилась в корне. Если экран не подключен, то значение хоть и отличаються от табличных, зато хотябы стабильны и можна без проблем с помощью кода определять кнопки. Подключаю экран и всё. Вместо 0(когда не нажата ни одна кнопка), я получаю значение около 153-158. Предоставляю скетч и фотки, а схемы смотрите выше:

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

int keyVolume = 1;//номер аналового порта
void setup() {
  analogReadResolution(10);
  Serial.begin (9600);
  lcd.init();
  lcd.backlight();// Включаем подсветку дисплея
  lcd.print("Ready...");
}

void loop() {
 int sensorValue = analogRead (keyVolume);
  Serial.println (sensorValue);//выводим значение в порт
  lcd.clear();
  lcd.print(sensorValue);//выводим значение на экран
  delay(500);
}

Архив с фотографиями и даже видео(77мб): https://drive.google.com/open?id=1HdtsvQRu0b4W1bZaXcQZNCSMFQlwsWRZ

Как добится стабльной роботы сиего чуда?

bwn
Offline
Зарегистрирован: 25.08.2014

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

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

bwn пишет:

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


Был бы у меня ещё один источник кроме питание по usb. Есть ещё аккумулятор, но 9V как-то многовато, чтобы напрямую подключить. Если вам не трудно, то скажите какое должно быть общее сопротивление резисторов, чтобы превратить 9 вольт в 5?

bwn
Offline
Зарегистрирован: 25.08.2014

Чтобы превратить 9в в 5в нужна КРЕН5, али другой стабилизатор. Тестер есть в хозяйстве?

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

bwn пишет:

Чтобы превратить 9в в 5в нужна КРЕН5, али другой стабилизатор. Тестер есть в хозяйстве?


Да нет, к сожалению...

bwn
Offline
Зарегистрирован: 25.08.2014

Обзаводитесь, либо бросайте это дело. Без замеров, это гадание на кофейной гуще и танцы с бубном. ИМХО.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

bwn пишет:

Обзаводитесь, либо бросайте это дело. Без замеров, это гадание на кофейной гуще и танцы с бубном. ИМХО.


Я понял. Спасибо.

Feofan
Offline
Зарегистрирован: 28.05.2017

Может и не при чём... попробуйте исключить из соединений отладочную плату. Белую.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

Feofan пишет:

Может и не при чём... попробуйте исключить из соединений отладочную плату. Белую.


Спасибо за совет... К сожалению не помогло :(

bwn
Offline
Зарегистрирован: 25.08.2014

Лана, еще одна простенькая проверка, отключите подсветку на дисплее и посмотрите, что получится.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

bwn пишет:

Лана, еще одна простенькая проверка, отключите подсветку на дисплее и посмотрите, что получится.

Увы, ничего не изменилось.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Батарейка на 9В + LМ7805 (смотреть гуголь-картинки)  мошт тебя и спасёть. 

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

Ребята, я не пьян, но что-то произошло за граней моего понимания: я просто подключил две кнопки к плате(деже не програмирывал) по стандартной схеме(с резистором на 1кОм к земле) и вуаля: клавиатура заработала более-менее нормально. Конечно значение с табличными не совпадают ни черта, но теперь хоть запрограммировать это дело можно адекватно. Теперь если ни одна кнопка не нажата, то значение скачет 0-1, а каждая кнопка имеет индивидуальное значение по котрой её можна определить. Может среди вас, форумчан, какой-то экстрасенс удаленно помог?))))

Вообщем, спасибо всем кто помогал танцевать с бубном, подпевал мелодию и иногда в него бил. Прекрасное место оказывается arduino.ru. Еще раз всем спасибо. Уж не знаю что именно помогло, но вроди работает. Продолжу шаманить для превращение этого чуда в калькулятор.

bwn
Offline
Зарегистрирован: 25.08.2014

А тестер, все равно, купите.))))

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

bwn пишет:

А тестер, все равно, купите.))))

Разумеется... Обязательно куплю. Еще раз спасибо за советы.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

Если кому-то еще интересно, то выглядит все это дело примерно вот так: https://drive.google.com/open?id=1BMqd8hEyE0XWZAR7gSImyE5ilsmJtrn8 (11Mb). В архиве фотки этого чуда.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Sklyanskiy пишет:

 С другой стороны клавиатуры есть таблица значений нажатых клавиш от 0 до 1023(есть на странице на али). Питаю как и нада от 5 вольт.

Это плата не 5-вольтовая, и подавать ей на аналоговый вход 5 вольт НЕ надо. Переключите на 3,3.

Feofan
Offline
Зарегистрирован: 28.05.2017

Контакт подозрительный.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

dimax пишет:

Sklyanskiy пишет:

 С другой стороны клавиатуры есть таблица значений нажатых клавиш от 0 до 1023(есть на странице на али). Питаю как и нада от 5 вольт.

Это плата не 5-вольтовая, и подавать ей на аналоговый вход 5 вольт НЕ надо. Переключите на 3,3.


А как же надпись с обратной стороны о 5V. Перейдите по ссылке на клавиатуру на алике с самого первого сообщения. Там на фото с обратной стороны написаны значения клавиш при питании в 5V.

Sklyanskiy
Offline
Зарегистрирован: 25.03.2019

Feofan пишет:

Контакт подозрительный.


Ну вроди работает. Там дополнительные контакты на 5V и GND если стандартных не заватает. (да-да, я прекрасно понимаю, что используя макетную плату можна и 10 модулей к одному пину подключить)

mixail844
Offline
Зарегистрирован: 30.04.2012

когда ТС указал вчанале что значения скачут от 1000 до 4000 ,сразу подумалось что байты перевернуты .это обьяснило бы рандомность.

ТС , поменять местами (программно) верхний и нижний байты можете ? в переменной sensorValue

и затем вывести результат