PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Резистивные кнопки (http://pccar.ru/forumdisplay.php?f=165)
-   -   Encoder + Arduino + Резистивные кнопки (http://pccar.ru/showthread.php?t=23202)

uncann 10.01.2017 08:10

Ну и имеется в виду спать, просто это же кнопка "power" :)
Вот как в скрипте на 6-ой странице, строка которая не проходит компиляцию:

if (data>=140 && data<=150) // спать
{
Remote.power();
Remote.clear();
}

lti1 10.01.2017 09:03

Цитата:

Сообщение от uncann (Сообщение 379388)
Ну и имеется в виду спать, просто это же кнопка "power" :)
Вот как в скрипте на 6-ой странице, строка которая не проходит компиляцию:

if (data>=140 && data<=150) // спать
{
Remote.power();
Remote.clear();
}

http://pccar.ru/showthread.php?p=277286#post277286

uncann 11.01.2017 19:01

Не, файлики то поменяны, но заменил попробовать из тех что по ссылке - все равно так же 'class Remote_' has no member named 'power' :(

uncann 12.01.2017 19:03

О! Победил :)
Оказывается надо так:
Remote.power();
Remote.clear();
То есть "Power" надо с маленькой буквы! С чего бы ради - непонятно, но так скомпилировалось.

T0xa 01.03.2017 11:13

Всем привет! Стоит задача рулить цифровым потенциометром используя энкодер. Написал скетч - залил в Arduino Uno, подтянул пины по питанию через встроенные резисторы. Все работает и регулируется. НО после того как перенес этот скетч на Pro Mini 3.3V 8Mhz, то появился глюк - вращаешь энкодер в любую сторону а он циклично меняет значение сначала до минимума а потом до максимума (либо наоборот, смотря в какую сторону крутить). Попробовал переписать скетч под библиотеку Encoder.h, но в результате все повторяется. На Uno работает как должно, а на Pro Mini циклично меняет значение, как будто энкодер попеременно вращаешь в разные стороны. Возможно где-то по схемотехнике чего-то надо добавить? В общем, прошу помощи.

skanch 01.03.2017 16:23

Я нисколько не программист, но пользуюсь таким скетчем в своих поделках. Связка: энкодер+ProMini 5V 16Mhz работает нормально.

T0xa 01.03.2017 19:14

Цитата:

Сообщение от skanch (Сообщение 383162)
Я нисколько не программист, но пользуюсь таким скетчем в своих поделках. Связка: энкодер+ProMini 5V 16Mhz работает нормально.

Благодарю, но на мой взгляд слишком громоздко. Нашел решение своей проблемы - подтянул пины по питанию через внешние резисторы 10 кОм и для надежности добавил конденсаторы 0.1 мкф. Все пришло в норму :smile2:

skanch 01.03.2017 19:22

Цитата:

Сообщение от T0xa (Сообщение 383173)
... Нашел решение своей проблемы - подтянул пины по питанию через внешние резисторы 10 кОм и для надежности добавил конденсаторы 0.1 мкф. Все пришло в норму :smile2:

Все оказалось куда проще, чем я мог предположить... Удачи в проекте!

Las42kuz 10.08.2017 20:50

Здравствуйте делаю планшет в машину! Остановился на подключении кнопок на руле точнее я подключил ардуйно про микро и кнопки но сейчас решил добавить энкодер и теперь не знаю как объединить два сетча помогите пожалуйста , сам не осилю! По отдельности все работает! Заранее спасибо

это для энкодера
[PHP]#define BTN_pin 8 // pin 8 кнопка энкодера SW
const int pin_A = 10; // pin 10 нога энкодера CLK
const int pin_B = 9; // pin 9 нога энкодера DT
unsigned char encoder_A; //переменная
unsigned char encoder_B; //переменная
unsigned char encoder_A_prev=0; //переменная
uint32_t vibor = 0; //Здесь будем хранть время
int perek = 0; //переменная переключатель

void setup() {
digitalWrite(BTN_pin, 1); //подтяжка кнопки энкодера
pinMode(pin_A, INPUT); //пины энкодера объявляем входами
pinMode(pin_B, INPUT); //пины энкодера объявляем входами
Keyboard.begin(); //подключим как клава
}
void loop()
{

{ encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера
encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера
if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю
if(encoder_B)
{
Remote.increase(); //отправляем команду громкость выше
Remote.clear(); //очищаем команду
}
else {
Remote.decrease(); //отправляем команду громкость ниже
Remote.clear(); //очищаем команду
}
}
encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла
}
if(digitalRead(BTN_pin)==LOW) //Если кнопка нажата то делаем то что ниже.
{
Keyboard.press(KEY_LEFT_ALT); //нажмем кнопку ALT
Keyboard.press(KEY_TAB); //нажмем кнопку TAB
Keyboard.release(KEY_TAB); //отпустим кнопку TAB
delay(150); //ждем 150мс чтоб не скакало по окошкам
vibor = millis(); //запускаем отсчет времени
perek=1; //переменной переключателя присваиваем 1
}
if((vibor && millis()-vibor > 1000) && perek==1) //если прошло больше 1 секунды и перемменая переключателя = 1
{
Keyboard.releaseAll(); //отпускаем все кнопки
perek = 0; //переменной переключателя присваиваем 0 чтоб сюда больше не заходил
}
}
/PHP]
для кнопок на руль

[PHP]int rknop; // это переменная которая хранит значения наших кнопок.
void setup()
{
Serial.begin(9600); //это скорость соединения с компьютером (для сериал монитора в нашем случае)

pinMode(rknop,INPUT);
}

void loop()
{
rknop=analogRead(A0); //Считываем значения на порту A0 и записываем значения в переменную rknop
Serial.println(rknop); //Отправляем данные переменной rknop на компьютер
delay(200); //небольшая задержка в пол секунды, её можно удалить но значения в сериал мониторе будет меняться очень быстро

///////////////////////////////////////////
if(rknop < 969 && rknop > 966) //здесь мы делаем условие. Т.е если у наз значение переменной rknop больше 900 и меньше 960 то делаем какоето действие которая ниже. На сколько мы помним при нажатии кнопки S1 у нас значения были ~930 так вот мы могли написать просто if(rknop == 930) что означает если rknop равно 930 то делем дейсвие которое ниже, но наши значения немного игрют поэтому мы задаем никий промежуток от 900 до 960
{
Remote.next(); //отправляем команду следующая песня
delay(200); //делаем небольшую задержу чтоб устройство успело отправить необходимые команды на планшет или компьютер и не засыпать его командами
Remote.clear();//очищаем команду
}

////////////////////////////////////////////
if(rknop < 994 && rknop > 992)
{
Remote.previous(); //предыдущая песня
delay(200);
Remote.clear();
}

////////////////////////////////////////////
if(rknop < 927 && rknop > 925)
{
Remote.play_pause(); //плей и паузу
delay(200);
Remote.clear();
}

////////////////////////////////////////////
if(rknop < 1009 && rknop > 1007)
{
Remote.increase(); //громкость прибавить
delay(000);
Remote.clear();
}

////////////////////////////////////////////
if(rknop < 1019 && rknop > 1015)
{
Remote.decrease(); //громкость убавить
delay(000);
Remote.clear();
}/PHP]

jonikus81 11.08.2017 07:16

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


Часовой пояс GMT +4, время: 15:45.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot