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

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

ВладимирC 19.10.2014 01:23

E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega32u4 -DF_CPU=16000000L -MMD -DUSB_VID=0x2341 -DUSB_PID=0x8036 -DARDUINO=104 -IE:\Arduino\arduino-1.0.4\hardware\arduino\cores\arduino -IE:\Arduino\arduino-1.0.4\hardware\arduino\variants\leonardo X:\TEMP\build8376110162395595122.tmp\sketch_oct18a .cpp -o X:\TEMP\build8376110162395595122.tmp\sketch_oct18a .cpp.o
sketch_oct18a.ino: In function 'void loop()':
sketch_oct18a.ino:32: warning: suggest parentheses around && within ||
sketch_oct18a.ino:48: warning: suggest parentheses around && within ||
sketch_oct18a.ino:111: warning: suggest parentheses around && within ||
sketch_oct18a.ino:133: warning: suggest parentheses around && within ||
sketch_oct18a.ino:141: warning: suggest parentheses around && within ||
sketch_oct18a.ino:141: warning: suggest parentheses around && within ||
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\malloc.c.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\WInterrupts.c .o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\wiring.c.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\wiring_analog .c.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\wiring_digita l.c.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\wiring_pulse. c.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\wiring_shift. c.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\CDC.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\HardwareSeria l.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\HID.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\IPAddress.cpp .o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\main.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\new.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\Print.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\Stream.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\Tone.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\USBCore.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\WMath.cpp.o
Using previously compiled: X:\TEMP\build8376110162395595122.tmp\WString.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\malloc.c.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\WInterrupts.c .o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\wiring.c.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\wiring_analog .c.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\wiring_digita l.c.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\wiring_pulse. c.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\wiring_shift. c.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\CDC.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\HardwareSeria l.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\HID.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\IPAddress.cpp .o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\main.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\new.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\Print.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\Stream.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\Tone.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\USBCore.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\WMath.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-ar rcs X:\TEMP\build8376110162395595122.tmp\core.a X:\TEMP\build8376110162395595122.tmp\WString.cpp.o
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-gcc -Os -Wl,--gc-sections -mmcu=atmega32u4 -o X:\TEMP\build8376110162395595122.tmp\sketch_oct18a .cpp.elf X:\TEMP\build8376110162395595122.tmp\sketch_oct18a .cpp.o X:\TEMP\build8376110162395595122.tmp\core.a -LX:\TEMP\build8376110162395595122.tmp -lm
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 X:\TEMP\build8376110162395595122.tmp\sketch_oct18a .cpp.elf X:\TEMP\build8376110162395595122.tmp\sketch_oct18a .cpp.eep
E:\Arduino\arduino-1.0.4\hardware\tools\avr\bin\avr-objcopy -O ihex -R .eeprom X:\TEMP\build8376110162395595122.tmp\sketch_oct18a .cpp.elf X:\TEMP\build8376110162395595122.tmp\sketch_oct18a .cpp.hex
Размер скетча в двоичном коде: 7*430 байт (из 28*672 байт максимум)

lti1 19.10.2014 03:47

Цитата:

Сообщение от ВладимирC (Сообщение 309091)
т.е. Вот так?
void setup()
{
digitalWrite(analogPin, HIGH);
Keyboard.begin();
}

Да
Цитата:

Сообщение от ВладимирC (Сообщение 309091)
Я первый день с ардуино, буду изучать конечно, но пока могу только готовые скетчи заливать)..... да и то как выянилось, без подсказок не обошлось))

Для получения значений Ваших кнопок используйте такой скетч:
Код:

int analogPin=A0;
int data;

void setup()
{
Serial.begin(9600);
digitalWrite(analogPin, HIGH);
}

void loop()
{
data=analogRead(analogPin);
Serial.println(data);
delay(1000);
}

В мониторе порта увидите значения.
Выход резистивных кнопок подключите к A0 pro micro.
Если в дальнейшем скетч pro micro не захочет заливаться попробуйте так.

ВладимирC 19.10.2014 12:26

Спасибо огромное

ВладимирC 19.10.2014 18:21

А возможно объединить это в один скетч, чтобы не перезаливать их туда сюда, а сразу вычислить кнопки и испытать, и перекинув проводов от кнопок? И если возможно, то как их состыковать?

Chubaka885 19.10.2014 19:44

Цитата:

Сообщение от ВладимирC (Сообщение 309132)
А возможно объединить это в один скетч, чтобы не перезаливать их туда сюда, а сразу вычислить кнопки и испытать, и перекинув проводов от кнопок? И если возможно, то как их состыковать?

Можно. Вот так.
Код:

int analogPin=A0;    //пин для подключения кнопок
int data;
unsigned long flag = 0;
unsigned long eventTime = 0;
unsigned long pauseMillis = 0;

void setup()
{
Serial.begin(9600);
digitalWrite(analogPin, HIGH);
Keyboard.begin();
}

void loop()
{
data=analogRead(analogPin); //читаем значение нажатой кнопки
Serial.println(data);
delay(500);
 
//********************** Громкость ************************************

  if(data>=950 && flag == 0) // все кнопки отпущены
  {
    eventTime=millis();
  }

  if(millis()-eventTime>10 && millis()-eventTime<499 && data>=210 && data<=230 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
  {
    Remote.increase();
    flag = 5;
    delay(10);
    Remote.clear();
  }

  if(millis()-eventTime>500 && data>=210 && data<=230 && flag == 5 || data>=210 && data<=230 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
  {
    Remote.increase(); // действие после удержание кнопки, Увеличить громкость каждые 0,1 секунды
    flag = 3;
    Remote.clear();
    delay(100);
  }

  if(millis()-eventTime>10 && millis()-eventTime<499 && data>=457 && data<=477 && flag == 0) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
  {
    Remote.decrease();
    flag = 6;
    delay(10);
    Remote.clear();
  }

  if(millis()-eventTime>500 && data>=457 && data<=477 && flag == 6 || data>=457 && data<=477 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
  {
    Remote.decrease(); // действие после удержание кнопки, Уменьшить громкость каждые 0,1 секунды
    flag = 3;
    Remote.clear();
    delay(100);
  }
 
//********************** AltTab + Play/pause ************************************   

if(millis()-eventTime>10 && millis()-eventTime<499 && data>=567 && data<=587) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
  {
    flag = 1;
  }

  if(data>=950 && flag == 1 && pauseMillis == 0) // действие после короткого нажатия кнопки, Alt+Tab
  {
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.press(KEY_TAB);
    Keyboard.release(KEY_TAB);
    Keyboard.press(KEY_TAB);
    Keyboard.release(KEY_TAB);
    flag = 0;
    pauseMillis = millis();
  }
 
  if(data>=950 && flag == 1 && pauseMillis != 0) // действие после короткого повторного нажатия кнопки, Alt+Tab
  {
    Keyboard.press(KEY_TAB);
    Keyboard.release(KEY_TAB);
    flag = 0;
    pauseMillis = millis();
  }
 
  if(pauseMillis && millis()-pauseMillis >= 800 && data>=950) // && flag == 7 && data>=950)
  {
    flag = 0;
    pauseMillis = 0;
    Keyboard.releaseAll();
  }
 
  if(millis()-eventTime>500 && data>=567 && data<=587 && flag == 1) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
  {
    Remote.play_pause(); // действие после удержание кнопки, воспроизведение / пауза
    flag = 0;
    delay(10);
    Remote.clear();
  }
//********************** Next и Fast Forward ************************************   
   
  if(millis()-eventTime>10 && millis()-eventTime<499 && data>=0 && data<=10) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
  {
    flag = 2;
  }
 
  if(data>=950 && flag == 2) // действие после короткого нажатия кнопки, Next
  {
    Remote.next();
    flag = 0;
    delay(10);
    Remote.clear();
  }

  if(millis()-eventTime>500 && data>=0 && data<=10 && flag == 2 || data>=0 && data<=10 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
  {
    Remote.forward(); // действие после удержание кнопки, Fast Forward
    flag = 3;
    Remote.clear();
    delay(100);
  }
//********************** Previous и Rewind ************************************   
   
  if(millis()-eventTime>10 && millis()-eventTime<499 && data>=74 && data<=94) // короткое нажатие кнопки от 10 до 499 миллисекунд (изменяется здесь millis()-eventTime>10 && millis()-eventTime<499)
  {
    flag = 4;
  }
 
  if(data>=950 && flag == 4) // действие после короткого нажатия кнопки, Previous
  {
    Remote.previous();
    flag = 0;
    delay(10);
    Remote.clear();
  }

  if(millis()-eventTime>500 && data>=74 && data<=94 && flag == 4 || data>=74 && data<=94 && flag == 3) // удержание кнопки от 500 до ? миллисекунд (изменяется здесь millis()-eventTime>500)
  {
    Remote.rewind(); // действие после удержание кнопки, Rewind
    flag = 3;
    Remote.clear();
    delay(100);
  }
 
  if(data>=950 && flag == 3 || data>=950 && flag == 5 || data>=950 && flag == 6) // действие после отпускания кнопки
  {
    flag = 0;
  } 
}


lti1 19.10.2014 20:40

Цитата:

Сообщение от ВладимирC (Сообщение 309132)
А возможно объединить это в один скетч, чтобы не перезаливать их туда сюда, а сразу вычислить кнопки и испытать, и перекинув проводов от кнопок? И если возможно, то как их состыковать?

Зачем? Это два разных скетча, малым Вы вычисляете значения своих резистивных кнопок и подставляете эти значения в большой скетч, а уже потом его заливаете и тестируете. Например у вас значение для Play/Pause 455, в данном скетче это значение 577, значит Вам необходимо заменить data>=567 && data<=587 на data>=445 && data<=465. И еще если объединить, то в Serial будут литься данные, а об delay(500); будет спотыкаться, не давая нормально работать кнопкам.

ВладимирC 19.10.2014 21:03

Цитата:

Сообщение от lti1 (Сообщение 309145)
Зачем? Это два разных скетча, малым Вы вычисляете значения своих резистивных кнопок и подставляете эти значения в большой скетч, а уже потом его заливаете и тестируете. Например у вас значение для Play/Pause 455, в данном скетче это значение 577, значит Вам необходимо заменить data>=567 && data<=587 на data>=445 && data<=465. И еще если объединить, то в Serial будут литься данные, а об delay(500); будет спотыкаться, не давая нормально работать кнопкам.

Для чего второй скетч, я прекрасно понял. А спросил, потому, что хотел не отходя от кассы попробовать. Потом понял, что чтобы значения изменить, все равно перезаливать надо)).

ВладимирC 20.10.2014 02:40

Еще вопрос, в основном скетче импользуется вход 6, в проверочном А0, почему? Если я ставлю резистор, не проще на одном порту и проверять и работать?
А, раз мы подтянули вход, то резистор не нужен, как я понимаю? Залил считывающий тест, пробовал резисторы разные подсовывать ( имитируя кнопки), вроде работает, на разные сопротивления, дает разные коды, без них шлет код 1022

lti1 20.10.2014 15:06

Цитата:

Сообщение от ВладимирC (Сообщение 309167)
Еще вопрос, в основном скетче импользуется вход 6, в проверочном А0, почему? Если я ставлю резистор, не проще на одном порту и проверять и работать?

Почему в основном скетче используется вход 6 не помню, возможно пожелание Chubaka885, вообще должен использоваться любой из аналоговых входов A0-A3 (Pro micro).
Цитата:

Сообщение от ВладимирC (Сообщение 309167)
А, раз мы подтянули вход, то резистор не нужен, как я понимаю?

Резистор не нужен, я предоставлял Вам примерную схему подключения.
Цитата:

Сообщение от ВладимирC (Сообщение 309167)
Залил считывающий тест, пробовал резисторы разные подсовывать ( имитируя кнопки), вроде работает, на разные сопротивления, дает разные коды, без них шлет код 1022

0 вольт - 0, 5 вольт - 1023
Аналого-цифровой преобразователь
Цитата:

Микроконтроллеры Atmega, используемые в Arduino, содержат шестиканальный аналого-цифровой преобразователь (АЦП). Разрешение преобразователя составляет 10 бит, что позволяет на выходе получать значения от 0 до 1023. Основным применением аналоговых входов большинства платформ Arduino является чтение аналоговых датчиком, но в тоже время они имеют функциональность вводов/выводов широкого применения (GPIO) (то же, что и цифровые порты ввода/вывода 0 - 13).

Stray 23.10.2014 23:45

Уважаемые!
А что нужно отправить из Leonardo используя HID Keyboard для имитации кнопки выключения (гашения экрана)?
Перелопатил кучу инфы, ответ так и не найден.


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

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