![]() |
|
|
#61 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Еще два пина это кнопка, ее тоже можно подключить через резистор
|
|
|
|
|
|
#62 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Хотя кнопку лучше повесить на другой пин. Так как если понадобится вращение с нажатием, то вышеприведенная схема не будет работать в этом режиме
|
|
|
|
|
|
#63 |
|
Senior Member
Регистрация: 22.09.2017
Сообщений: 338
Вес репутации: 443 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
В протеусе не нашел энкодера, поэтому наколхозил такую схему, с помощью моторчика
:![]() Только как применить вашу схему к моей, мне невдомек..
Последний раз редактировалось sana555; 17.04.2018 в 14:47. |
|
|
|
|
|
#64 |
|
Senior Member
Регистрация: 22.09.2017
Сообщений: 338
Вес репутации: 443 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
|
|
|
|
|
#65 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Я не представляю как это должно работать
Кнопку можно повесить на любой вход Хотя тогда экономи всего 1 вывод контроллера и получаем геморой. Проще тогда как и задумывалось на цифровые пины подключить |
|
|
|
|
|
#66 | |
|
Senior Member
Регистрация: 22.09.2017
Сообщений: 338
Вес репутации: 443 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
- два энкодера - экономия уже на 2 пина... Моторчик сейчас служит для имитации крутилки и для включения/отключения двух релюшек. А с релюшек и кнопки уже идут аналоговые сигналы на ардуино. В общем все работает как нужно: ![]() Демонстрационный скейтч (если кому нужен): Развернуть для просмотраКод:
byte EncoderRead;
byte EncoderState;
byte EncoderLastState;
byte EncoderCode;
byte EncoderRot;
//демонстрация
byte up;
byte dw;
byte sw;
void setup() {
Serial.begin(9600);
}
void loop() {
EncoderRead = analogRead(A5)/4; // 127(148) (148- примерно центр между 127 и 170) 170(180) (-/-) 191(223) (-/-) 255
// делим на 4 для простоты
if (EncoderRead < 223) {sw=0;} //если кнопка не нажата, то обнуляем значение
if (EncoderRead > 25) { //если что то нажато:
if (EncoderRead < 148) {EncoderState = 1;} //замкнут первый резистор(2,49В)
if (EncoderRead >= 148 && EncoderRead < 180) {EncoderState = 2;} //замкнут второй резистор(3,33В)
if (EncoderRead >= 180 && EncoderRead < 223) {EncoderState = 3;} //замкнуто оба резистора(3.74В)
if (EncoderRead >= 223) {EncoderState = 4;} //нажата кнопка
if (EncoderState != EncoderLastState) { //если возникло новое состояние
EncoderCode = EncoderCode * 10 + EncoderState; //записываем в EncoderCode последовательность возникновения EncoderState
if (EncoderCode == 13 || EncoderCode == 32) { // вычисляется последовательность вправо: 132(13 или 32) или влево: 231(23 или31)
EncoderRot = 1;
EncoderCode = 0;
}
if (EncoderCode == 23 || EncoderCode == 31) {
EncoderRot = 2;
EncoderCode = 0;
}
if (EncoderCode == 4) { //если нажата кнопка
EncoderRot = 3;
EncoderCode = 0;
}
if (EncoderCode > 33) { //если какой то глюк
EncoderRot = 0;
EncoderCode = 0;
}
EncoderLastState = EncoderState;
}
}
else { //обнуляем переменные
EncoderCode = 0;
EncoderState = 0;
EncoderLastState = 0;
}
//демонстрация:
if (EncoderRot == 1) {
EncoderRot = 0;
up++;
}
if (EncoderRot == 2) {
EncoderRot = 0;
dw++;
}
if (EncoderRot == 3) {
EncoderRot = 0;
sw=1;
}
Serial.print("UP=");
Serial.print(up);
Serial.print(" DOWN=");
Serial.print(dw);
Serial.print(" SWITCH=");
Serial.println(sw);
// Serial.print(" ");
// Serial.println(analogRead(A5));
[свернуть] Последний раз редактировалось sana555; 24.04.2018 в 15:02. |
|
|
|
|
|
|
#67 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Класс , а я думал что не разберешься как считывать показания энкодера с аналогового входа.
Если вращение с нажатием не нужно, то можно сделать так, нажатие а потом вращение без нажатия. Только нужно отображать на дисплее режим энкодера Можно оба энкодера повесить на 1 аналоговый вход И конденсатор лучше поменьше емкость поставить 0,01мкф |
|
|
|
|
|
#68 |
|
Senior Member
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1602 ![]() ![]() ![]() ![]() ![]() ![]() |
Ладно ... с ними с пинами...
![]() Сделали - отлично.. Давайте выкладывайте рецепты домашней колбасы , хлеба, грибов, пива, табака .... и еще чего там есть в наличии с рецептурами и видео ![]() Так как на пенсию ничего не заработано (30 лет "реформ" - ..пта) - будет чем заняться, маленький интернет магазинчик. И сосиски - Home Made © и табак с подоконника... === Какой "Умный дом" - без жратвы , для курилки в самый раз
__________________
Читаю ваши мысли по аватару ... Последний раз редактировалось sunny; 24.04.2018 в 16:47. |
|
|
|
|
|
#69 | ||||
|
Senior Member
Регистрация: 22.09.2017
Сообщений: 338
Вес репутации: 443 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Цитата:
![]() Цитата:
Цитата:
![]() Если потом действительно будет нужно, на пенсии, я с удовольствием выложу: Последний раз редактировалось sana555; 24.04.2018 в 17:06. |
||||
|
|
|
|
|
#70 | |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
|
|
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|