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

Вернуться   PCCar.ru - Ваш автомобильный компьютер > MP3Car ТехИнфа > AndroidCar > Дополнительные устройства

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2018, 20:16   #831
svoboda120
Старший Пользователь
 
Регистрация: 20.01.2017
Возраст: 60
Город: Енакиево
Регион: Украина
Машина: Peugeot 407
Сообщений: 110
svoboda120 is on a distinguished road
По умолчанию

Цитата:
Сообщение от Alex15BV Посмотреть сообщение
Что может быть? Может в системные папки нужно что-то добавить, в buildprop что-то прописать?
У вас что то не так с режимом ОТГ. Посмотрите эту статью. В ней автор описывает прошивку для вашего девайса и одним из преимуществ этой прошивки считает "— разъем microUSB type-C активирован в режим OTG, теперь можно в него подключать устройства". Возможно подтолкнет вас на какие то мысли.
svoboda120 вне форума   Ответить с цитированием
Старый 22.12.2018, 16:59   #832
Alex15BV
Пользователь
 
Регистрация: 01.11.2017
Возраст: 50
Город: Лобня
Регион: 50, 90, 150
Машина: BMW 530D Touring
Сообщений: 96
Alex15BV is a jewel in the roughAlex15BV is a jewel in the roughAlex15BV is a jewel in the rough
По умолчанию

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

Пример:
зачем сначала "vol_up = 111", потом к этому "button_range = 5"
и потом к этому ещё "data >= vol_up - button_range && data <= vol_up + button_range"

когда можно "vol_up_porog = 120" и затем "data < vol_up_porog"
и к тому же эту переменную можно потом использовать в loop для однозначной идентификации нажатой кнопки (в качестве флага)...

Последний раз редактировалось Alex15BV; 22.12.2018 в 23:06.
Alex15BV вне форума   Ответить с цитированием
Старый 12.01.2019, 14:35   #833
fishdimka
Новый Пользователь
 
Регистрация: 18.12.2018
Возраст: 43
Регион: 26
Сообщений: 7
fishdimka is on a distinguished road
По умолчанию

задача:
-при повороте энкодера по часовой стрелке срабатывала кнопка "стрелка вправо" KEY_RIGHT_ARROW
-при повороте против часовой "стрелка влево" KEY_LEFT_ARROW
-при нажатии энкодера Enter "KEY_RETURN"
собрал скетч,
работает только нажатие энкодера Enter "KEY_RETURN"
если не чего не трогаешь просто перелистываются приложения, как будто нажата клавиша "стрелка вправо" KEY_RIGHT_ARROW

подключил так:
pin 16 кнопка энкодера SW
pin 2 нога энкодера CLK
pin 3 нога энкодера DT
GDN средняя нога энкодера и с кнопки GDN

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

скетч
#include <HID.h>
#include <keyboard.h>
#include <Tablet.h>
#include <Encoder.h>
#define BTN_pin 16 // pin 16 кнопка энкодера SW
const int pin_A = 2; // pin 2 нога энкодера CLK
const int pin_B = 3; // pin 3 нога энкодера 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); //пины энкодера объявляем входами
Serial.begin(9600);
Keyboard.begin(); //подключим как клава
}
void loop()
{
//////////////ЭНКОДЕР///////////
{ encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера
encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера
if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю
if(encoder_B)
{
Keyboard.press(KEY_RIGHT_ARROW);
delay(200);
Keyboard.releaseAll();
}
else {
Keyboard.press(KEY_LEFT_ARROW);
delay(200);
Keyboard.releaseAll();
}
}
encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла
}

if(digitalRead(BTN_pin)==LOW) //Если кнопка нажата то делаем то что ниже.
{
Keyboard.press(KEY_RETURN); //При нажатии на кнопку команда Enter
delay(200); //Делаем небольшую задержку чтоб не засыпало командами.
Keyboard.releaseAll();
}
}
fishdimka вне форума   Ответить с цитированием
Старый 12.01.2019, 15:34   #834
Alex15BV
Пользователь
 
Регистрация: 01.11.2017
Возраст: 50
Город: Лобня
Регион: 50, 90, 150
Машина: BMW 530D Touring
Сообщений: 96
Alex15BV is a jewel in the roughAlex15BV is a jewel in the roughAlex15BV is a jewel in the rough
По умолчанию

После комментария "//////////////ЭНКОДЕР///////////" открывающая скобка не лишняя, случайно? (перед encoder_A = digitalRead(pin_A)

... И инклюды лишние: если используются только функции клавиатуры - то зачем подключать ещё и Tablet, и Encoder?

Последний раз редактировалось Alex15BV; 12.01.2019 в 16:17.
Alex15BV вне форума   Ответить с цитированием
Старый 12.01.2019, 16:01   #835
Alex15BV
Пользователь
 
Регистрация: 01.11.2017
Возраст: 50
Город: Лобня
Регион: 50, 90, 150
Машина: BMW 530D Touring
Сообщений: 96
Alex15BV is a jewel in the roughAlex15BV is a jewel in the roughAlex15BV is a jewel in the rough
По умолчанию

Цитата:
Сообщение от fishdimka Посмотреть сообщение
задача:
-при повороте энкодера по часовой стрелке срабатывала кнопка "стрелка вправо" KEY_RIGHT_ARROW
-при повороте против часовой "стрелка влево" KEY_LEFT_ARROW
-при нажатии энкодера Enter "KEY_RETURN"
Я в Ардуино чайник, но сделал себе - и работает, как часики: и переключение режимов работы, и длительбность нажатия)
Сделал на прерываниях (здесь кусок, касающийся только энкодера):
PHP код:
#include <Mouse.h>
#include <Keyboard.h>
#include <Tablet.h>

#define KeyEncPin 2     // кнопка энкодера
#define EncAcPin 3      // энкодер - канал А
#define EncBcPin 5      // энкодер - канал В

volatile boolean RightMove false;   // направления вращения энкодера
volatile boolean LeftMove false;    
volatile boolean EncPress false;    // нажатия кнопки энкодера

// ----- обработчики прерываний -------

void EncoderMove() {                     // вращение энкодера
  
if (digitalRead(EncBcPin) == HIGH) {
    
RightMove true;
  }
  else {
    
LeftMove true;
  }
}

void KeyEncPress() {        // кнопка энкодера
  
EncPress true;
}

void setup() {
  
pinMode(KeyEncPinINPUT_PULLUP);                                           // кнопка энкодера - при нажатии PLAY/PAUSE либо ENTER/ESCAPE
  
attachInterrupt(digitalPinToInterrupt(KeyEncPin), KeyEncPressFALLING);
  
pinMode(EncAcPinINPUT_PULLUP);                                            // канал-А энкодера - для отслеживания вращения
  
attachInterrupt(digitalPinToInterrupt(EncAcPin), EncoderMoveFALLING);
  
pinMode(EncBcPinINPUT_PULLUP);                                            // канал-В энкодера - для определения направления вращения
  
pinMode(LedPinOUTPUT);

  
Serial.begin(9600);                 // инициализация интерфейсов
  
Keyboard.begin();
  
Mouse.begin();
  
delay(500);
}

void loop() {
  if (
RightMove == true) {             // обработка вращения энкодера: если вращаем вправо - увеличить громкость/стрелка вверх
    
if (MediaMode == true) {
      
Tablet.vol_up();
      
Tablet.clear();
    }
    else {
      
Keyboard.press(KEY_UP_ARROW);
      
delay(10);
      
Keyboard.release(KEY_UP_ARROW);
    }
    
RightMove false;
  }

  if (
LeftMove == true) {               // если вращаем влево - уменьшаем громкость/стрелка вниз
    
if (MediaMode == true) {
      
Tablet.vol_down();
      
Tablet.clear();
    }
    else {
      
Keyboard.press(KEY_DOWN_ARROW);
      
delay(10);
      
Keyboard.release(KEY_DOWN_ARROW);
    }
    
LeftMove false;
  }

  if (
EncPress == true) {                       // обнаружили факт нажатия кнопки энкодера - определяем длительность нажатия и запоминаем кнопку
    
delay(20);
    while (
digitalRead(KeyEncPin) == LOW) {     // пока не отпустим -
      
TimePress millis() - EventStart;        // считаем время нажатия
      
delay(10);
    }
    
KeyNumber 1;                              // сохраняем номер нажатой кнопки для обработчика
    
EncPress false;                           // сбрасываем флаг нажатия
    
NeedWork 1;                               // взводим флаг необходимости обработки нажатия
    
if (TimePress <= 400) {                     // сохраняем длительность нажатия
      
ShortKey 1;
    }
    else {
      
ShortKey 0;
    }
  }
...


Последний раз редактировалось Alex15BV; 14.01.2019 в 18:03.
Alex15BV вне форума   Ответить с цитированием
Старый 12.01.2019, 20:49   #836
fishdimka
Новый Пользователь
 
Регистрация: 18.12.2018
Возраст: 43
Регион: 26
Сообщений: 7
fishdimka is on a distinguished road
По умолчанию

скетч не компилируется, ругается на эту строку
attachInterrupt(digitalPinToInterrupt(KeyEncPin), KeyEncPress, FALLING);
fishdimka вне форума   Ответить с цитированием
Старый 12.01.2019, 20:58   #837
Alex15BV
Пользователь
 
Регистрация: 01.11.2017
Возраст: 50
Город: Лобня
Регион: 50, 90, 150
Машина: BMW 530D Touring
Сообщений: 96
Alex15BV is a jewel in the roughAlex15BV is a jewel in the roughAlex15BV is a jewel in the rough
По умолчанию

Arduino ProMicro - забыл указать... Не знаю, на чем ты делаешь
Alex15BV вне форума   Ответить с цитированием
Старый 12.01.2019, 21:00   #838
fishdimka
Новый Пользователь
 
Регистрация: 18.12.2018
Возраст: 43
Регион: 26
Сообщений: 7
fishdimka is on a distinguished road
По умолчанию

на Arduino ProMicro делаю
fishdimka вне форума   Ответить с цитированием
Старый 12.01.2019, 21:07   #839
Alex15BV
Пользователь
 
Регистрация: 01.11.2017
Возраст: 50
Город: Лобня
Регион: 50, 90, 150
Машина: BMW 530D Touring
Сообщений: 96
Alex15BV is a jewel in the roughAlex15BV is a jewel in the roughAlex15BV is a jewel in the rough
По умолчанию

Нет проблем никаких

Последний раз редактировалось Alex15BV; 31.01.2019 в 17:43.
Alex15BV вне форума   Ответить с цитированием
Старый 12.01.2019, 21:19   #840
fishdimka
Новый Пользователь
 
Регистрация: 18.12.2018
Возраст: 43
Регион: 26
Сообщений: 7
fishdimka is on a distinguished road
По умолчанию

можешь прислать весь скетч целяком
fishdimka вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



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


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