УЦИ (управления цифровой индикации)
- Войдите на сайт для отправки комментариев
Пт, 28/11/2014 - 12:29
Помогите нубу в написании скеча! Есть два энкодера,мега2560,i2c/lcd16*2,две кнопки,задача:вывод на экран показаний с каждего энкодера+кнопка обнуления для каждего показания энкодера обе независимых друг от друга.
Вот дошел до этого написания и тупик не хватает опыта с праграмированием одна линия работает норм снимает показания и выводит Line X .
[code]
//DFRobot.com
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
volatile int encoder_register = 0;
void setup() {
pinMode(2,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
attachInterrupt(1, encoder, RISING);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Llne X");
lcd.setCursor(0,1);
lcd.print("Llne Z");
}
void loop() {
lcd.setCursor(7, 0);
lcd.print(encoder_register);
lcd.print(" ");
}
void encoder() {
detachInterrupt(1);
delay(10);
if (digitalRead(3)){
if(digitalRead(2)) ++encoder_register;
else --encoder_register;
}
attachInterrupt(1, encoder, RISING);
}
[/code]
Ну тут тебе надо два прерывания: энкодры и кнопка.
> detachInterrupt(1);
> attachInterrupt(1, encoder, RISING);
Зачем это переподключение?
Для считывания состояний рекомендую Cyberlib
Ловишь прерывания, считаешь оимпульсы в глобальные переменные.
Ловишь прерывания от кнопки.
Раз в секунду выводишь значение переменной на экран
спасибо что откликнулся на мой стопор, а если есть возможность и время можно все пополочкам я в этом деле как то не очень можно сказать (честно) полный новичок просто у меня есть небольшой станочек хочу на него уци поставить.
И для кого я писал про прерывания?
ДА Я вас просил поподробней а не умнячать!
Да просто когда ты новичек и люди более понимающие, начинают кидаться терминами и короткими фразами
они понимают о чем речь и становится немного обидно ,просто хотелось бы когда пишут что новичек тоже
относились с пониманием , а за прерывание спасиб но с кнопками беда полная помогите !
Вы забываете о том, что это форум и, в сущности, никто и ничем Вам не обязан. Если кто-то делится своими знаниями, то он делает это по доброй воле. Направление для поиска Вам дали, на эту тему написано вполне достаточно, нужно только пользоваться поиском, как по форуму, так и глобально. Не Вы первый новичок, не Вы - последний. Разжевывать никто не будет, разбираться придется самостоятельно. Или идти на платные курсы.
а дальше что делать приравнивать к нулю а что именно?
Читать до полного просветления http://arduino.ru/Reference/AttachInterrupt
Я так понимаю на прерывании ничего не получется т.к. (2,3)(18,19) это два энкодера а (20,21) шина I2c lcd16/2
Вопрос: что делать ?
Натолкните где просветится!!!!!!!!!!!!!!!!!!!!!
контакты спрерыванием кончились твои предложения
нужна альтернатива или нет?
Межушный ганглий юзать. Я вот знаю способ, как на два прерывания повесит примерно штук 6 энкодеров, но тебе не скажу.
спасибо
Я на этом форуме недавно и вижу что люди не склоны к общению и помощи,я например на автофоруме Ниссан вишу уже 8 лет ,все стараются помочь кто чем может,но и там бывают люди которые кричат едь на сервис ,а 90 случаях из 100 помогают!
Ну вот и вали на тот форум со своими проблемами. Тут тебе код писать никто не будет.
Нужно готовое? Есть раздел "Ищу исполнителя", там тебе за вознаграждение и в пупок поцелуют и в задницу подуют.
Во первых энкодер можно и опрособ обрабатывать, не обязательно в прерываниях
во вторых плох тот солдат, который не мечтает стать генералом...ну в смысле любой начинающий ардуинщик рано или поздно должен начать читать даташит на atmega328pa. Когда начнет узнает, что прерывание у этого МК можно настроить на любую ногу, только это будет не система прерываний INT0/1 с которой справляется attacheInterrupt, а система PCINT, настроить которую способны только достойные джидаи
опросом не получается, пробовал, вращение двигателя на катором энкодер стоит 1100 об.мин начинаются пропуски что неприемлимо в моей ситуации последний код меня полностью устраивает работает как часы,
просто с обнулением типерь связаится не могу вбиваю библиотеку на button
if
(digitalRead(clearButton) == LOW ) {
58
positionRight = 0;
и не какого эфекта
Ну вот и вали на тот форум со своими проблемами. Тут тебе код писать никто не будет.
Нужно готовое? Есть раздел "Ищу исполнителя", там тебе за вознаграждение и в пупок поцелуют и в задницу подуют.
----------------------------------------------------------------------------------------------------------------------------------------
Поэтому поводу тебе я могу сказать одно, счетчик импульсов на 2 оси б/у по 1т.р. полный интернет ,а мне хочется самому сделать и понять принцип ,а форумы для этого существуют чтобы обсуждать( форум – это такое место в Интернете, где собираются люди, которых объединяет одно увлечение или идея, и общаются на интересующую их тему. Они помогают друг другу советами и подсказками, обмениваются жизненным опытом, поддерживают друг друга.)
Ну так делай, я тебе направление дал. Если хочешь, чтобы тебе код написали, то за этим в друго раздел.
Примеры:
http://easyelectronics.ru/avr-uchebnyj-kurs-inkrementalnyj-enkoder.html
http://www.compcar.ru/forum/showthread.php?t=5148
Разбираться и адаптировать под себя
Спасибо буду просвящаться и экспериминтировать.
((((((((((((((((((((Если хочешь, чтобы тебе код написали, то за этим в друго раздел.))))))))))))))))))))))))
Я так понимаю что ты с того раздела и есть.
Нет, ну угадал.
а как сократить показания 10:1