проблема с кнопками

Алексей236
Offline
Зарегистрирован: 09.05.2017

Не могу понять кнопка джойстика работает (pin 3), а остальные кнопки нет .

Кнопки перемешения на джойстике тоже работают.

#include "Keyboard.h"
#include <Keyboard.h>
#include <HID.h>
#define pinX    A0  // ось X джойстика
#define pinY    A1  // ось Y джойстика
void setup() {
  pinMode (3, INPUT_PULLUP);
  pinMode (7, INPUT_PULLUP);
  pinMode (8, INPUT_PULLUP);
  pinMode (9, INPUT_PULLUP);
  pinMode (10, INPUT_PULLUP);
  pinMode (11, INPUT_PULLUP);
  pinMode (12, INPUT_PULLUP);
  pinMode (13, INPUT_PULLUP);
  pinMode (11, INPUT_PULLUP);
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
}
void loop() {
  int X = analogRead(pinX);// считываем значение оси Х
  int Y = analogRead(pinY);// считываем значение оси Y
  boolean button1 = !digitalRead(3);
   boolean button2 = !digitalRead(7);
    boolean button3 = !digitalRead(8);
     boolean button4 = !digitalRead(9);
      boolean button5 = !digitalRead(10);
       boolean button6 = !digitalRead(11);
        boolean button7 = !digitalRead(12);
         boolean button8 = !digitalRead(13);

  if (X>550)
  Keyboard.press(KEY_UP_ARROW);
  else
  Keyboard.release(KEY_UP_ARROW);

  if (X<500)
  Keyboard.press(KEY_DOWN_ARROW);
  else
  Keyboard.release(KEY_DOWN_ARROW);

  if (Y>550)
  Keyboard.press(KEY_RIGHT_ARROW);
  else
  Keyboard.release(KEY_RIGHT_ARROW);

  if (Y<500)
  Keyboard.press(KEY_LEFT_ARROW);
  else
  Keyboard.release(KEY_LEFT_ARROW);

    
  if (button1 == 1) 
  Keyboard.press(KEY_BACKSPACE);
  else
  Keyboard.release(KEY_BACKSPACE);

  
   
  if (button1 == 2) 
  Keyboard.press("e");
  else
  Keyboard.release("e");

  
  if (button1 == 3) 
  Keyboard.press("r");
  else
  Keyboard.release("r");

  if (button1 == 4) 
  Keyboard.press("t");
  else
  Keyboard.release("t");

  if (button1 == 5) 
  Keyboard.press("y");
  else
  Keyboard.release("y");

  if (button1 == 6) 
  Keyboard.press("u");
  else
  Keyboard.release("u");

  if (button1 == 7) 
  Keyboard.press("i");
  else
  Keyboard.release("i");

  if (button1 == 8) 
  Keyboard.press("o");
  else
  Keyboard.release("o");

}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Откуда у вас digitalRead(), который умеет выдавать значения от 1 до 8? Срочно высылайте - мне он тоже нужен.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016
Эта всё патамушта ардуина китайская.
 
В строке 22 переменная button1 описана как boolean. А в строках 59, 65, 70, 76, 80, 85 и 90 она сравнивается с 2, 3, 4, ... 8 соответсвенно. А в китайских ардуинах тип boolean бывает только 0 и 1 и ничем другим.
Алексей236
Offline
Зарегистрирован: 09.05.2017

Переделал код так но так и не работает 



#include "Keyboard.h"
#include <Keyboard.h>
#include <HID.h>
#define pinX    A0  // ось X джойстика
#define pinY    A1  // ось Y джойстика
void setup() {
  pinMode (3, INPUT_PULLUP);
  pinMode (7, INPUT_PULLUP);
  pinMode (8, INPUT_PULLUP);
  pinMode (9, INPUT_PULLUP);
  pinMode (10, INPUT_PULLUP);
  pinMode (11, INPUT_PULLUP);
  pinMode (12, INPUT_PULLUP);
  pinMode (13, INPUT_PULLUP);
  
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
}
void loop() {
  int X = analogRead(pinX);// считываем значение оси Х
  int Y = analogRead(pinY);// считываем значение оси Y
  boolean button1 = !digitalRead(3);
   boolean button2 = !digitalRead(7);
    boolean button3 = !digitalRead(8);
     boolean button4 = !digitalRead(9);
      boolean button5 = !digitalRead(10);
       boolean button6 = !digitalRead(11);
        boolean button7 = !digitalRead(12);
         boolean button8 = !digitalRead(13);
 
  if (X>550)
  Keyboard.press(KEY_UP_ARROW);
  else
  Keyboard.release(KEY_UP_ARROW);
 
  if (X<500)
  Keyboard.press(KEY_DOWN_ARROW);
  else
  Keyboard.release(KEY_DOWN_ARROW);
 
  if (Y>550)
  Keyboard.press(KEY_RIGHT_ARROW);
  else
  Keyboard.release(KEY_RIGHT_ARROW);
 
  if (Y<500)
  Keyboard.press(KEY_LEFT_ARROW);
  else
  Keyboard.release(KEY_LEFT_ARROW);
 
    
  if (button1 == 1) 
  Keyboard.press(KEY_BACKSPACE);
  else
  Keyboard.release(KEY_BACKSPACE);
 
  
   
  if (button2 == 1) 
  Keyboard.press("e");
  else
  Keyboard.release("e");
 
  
  if (button3 == 1) 
  Keyboard.press("r");
  else
  Keyboard.release("r");
 
  if (button4 == 1) 
  Keyboard.press("t");
  else
  Keyboard.release("t");
 
  if (button5 == 1) 
  Keyboard.press("y");
  else
  Keyboard.release("y");
 
  if (button6 == 1) 
  Keyboard.press("u");
  else
  Keyboard.release("u");
 
  if (button7 == 1) 
  Keyboard.press("i");
  else
  Keyboard.release("i");
 
  if (button8 == 1) 
  Keyboard.press("o");
  else
  Keyboard.release("o");
 
}
Алексей236
Offline
Зарегистрирован: 09.05.2017
#include "Keyboard.h"
#include <Keyboard.h>
#include <HID.h>
#define pinX    A0  // ось X джойстика
#define pinY    A1  // ось Y джойстика
void setup() {
  pinMode (3, INPUT_PULLUP);
  pinMode (7, INPUT_PULLUP);
  pinMode (8, INPUT_PULLUP);
  pinMode (9, INPUT_PULLUP);
  pinMode (10, INPUT_PULLUP);
  pinMode (11, INPUT_PULLUP);
  pinMode (12, INPUT_PULLUP);
  pinMode (13, INPUT_PULLUP);
  
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
}
void loop() {
  int X = analogRead(pinX);// считываем значение оси Х
  int Y = analogRead(pinY);// считываем значение оси Y
  boolean button1 = !digitalRead(3);
   boolean button2 = !digitalRead(7);
    boolean button3 = !digitalRead(8);
     boolean button4 = !digitalRead(9);
      boolean button5 = !digitalRead(10);
       boolean button6 = !digitalRead(11);
        boolean button7 = !digitalRead(12);
         boolean button8 = !digitalRead(13);

  if (X>550)
  Keyboard.press(KEY_UP_ARROW);
  else
  Keyboard.release(KEY_UP_ARROW);

  if (X<500)
  Keyboard.press(KEY_DOWN_ARROW);
  else
  Keyboard.release(KEY_DOWN_ARROW);

  if (Y>550)
  Keyboard.press(KEY_RIGHT_ARROW);
  else
  Keyboard.release(KEY_RIGHT_ARROW);

  if (Y<500)
  Keyboard.press(KEY_LEFT_ARROW);
  else
  Keyboard.release(KEY_LEFT_ARROW);

    
  if (button1 == 1) 
  Keyboard.press(KEY_BACKSPACE);
  else
  Keyboard.release(KEY_BACKSPACE);

  
   
  if (button2 == 1) 
  Keyboard.press("e");
  else
  Keyboard.release("e");

  
  if (button3 == 1) 
  Keyboard.press("r");
  else
  Keyboard.release("r");

  if (button4 == 1) 
  Keyboard.press("t");
  else
  Keyboard.release("t");

  if (button5 == 1) 
  Keyboard.press("y");
  else
  Keyboard.release("y");

  if (button6 == 1) 
  Keyboard.press("u");
  else
  Keyboard.release("u");

  if (button7 == 1) 
  Keyboard.press("i");
  else
  Keyboard.release("i");

  if (button8 == 1) 
  Keyboard.press("o");
  else
  Keyboard.release("o");

}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Давайте подумаем... Что у нас посылает кейкод? Функция Keyboard.press(). А чем же питается эта функция... https://www.arduino.cc/en/Reference/KeyboardPress говорит нам о том, что символами (char). Является ли "o" символом?

И, кстати, "It is necessary to call Keyboard.begin() before using press()"

Алексей236
Offline
Зарегистрирован: 09.05.2017

А как использовать обычные буквы с обработкой длительных нажатий. То есть зажатий.

sadman41
Offline
Зарегистрирован: 19.10.2016

Отсылать символ только при переходе HIGH->LOW, а не каждый раз, когда обнаружено состояние LOW.

На примере показывать не просите - я данный скетч писал абсолютно по-другому.

Алексей236
Offline
Зарегистрирован: 09.05.2017

Вот ещё раз переделанный код, но опять не работает. Мне кажется, что я напутал с подключением кнопок. Я их подключил одной ногой к земле другой к пину.

 

#include "Keyboard.h"
#include <Keyboard.h>
#include <HID.h>
#define pinX    A0  // ось X джойстика
#define pinY    A1  // ось Y джойстика
void setup() {
  pinMode (3, INPUT_PULLUP);
  pinMode (7, INPUT_PULLUP);
  pinMode (8, INPUT_PULLUP);
  pinMode (9, INPUT_PULLUP);
  pinMode (10, INPUT_PULLUP);
  pinMode (11, INPUT_PULLUP);
  pinMode (12, INPUT_PULLUP);
  pinMode (13, INPUT_PULLUP);
  
  pinMode(pinX, INPUT);
  pinMode(pinY, INPUT);
  
  Keyboard.begin();
}
void loop() {
  int X = analogRead(pinX);// считываем значение оси Х
  int Y = analogRead(pinY);// считываем значение оси Y
  boolean button1 = !digitalRead(3);
   boolean button2 = !digitalRead(7);
    boolean button3 = !digitalRead(8);
     boolean button4 = !digitalRead(9);
      boolean button5 = !digitalRead(10);
       boolean button6 = !digitalRead(11);
        boolean button7 = !digitalRead(12);
         boolean button8 = !digitalRead(13);

  if (X>550)
  Keyboard.press(KEY_UP_ARROW);
  else
  Keyboard.release(KEY_UP_ARROW);

  if (X<500)
  Keyboard.press(KEY_DOWN_ARROW);
  else
  Keyboard.release(KEY_DOWN_ARROW);

  if (Y>550)
  Keyboard.press(KEY_RIGHT_ARROW);
  else
  Keyboard.release(KEY_RIGHT_ARROW);

  if (Y<500)
  Keyboard.press(KEY_LEFT_ARROW);
  else
  Keyboard.release(KEY_LEFT_ARROW);

    
  if (button1 == 1) 
  Keyboard.press(KEY_BACKSPACE);
  else
  Keyboard.release(KEY_BACKSPACE);

  
   
  if (button2 == 1) 
  Keyboard.press(KEY_LEFT_CTRL);
  else
  Keyboard.release(KEY_LEFT_CTRL);

  
  if (button3 == 1) 
  Keyboard.press(KEY_RIGHT_CTRL);
  else
  Keyboard.release(KEY_RIGHT_CTRL);

  if (button4 == 1) 
  Keyboard.press(KEY_LEFT_SHIFT);
  else
  Keyboard.release(KEY_LEFT_SHIFT);

  if (button5 == 1) 
  Keyboard.press(KEY_RIGHT_SHIFT);
  else
  Keyboard.release(KEY_RIGHT_SHIFT);

  if (button6 == 1) 
  Keyboard.press(KEY_TAB);
  else
  Keyboard.release(KEY_TAB);

  if (button7 == 1) 
  Keyboard.press(KEY_RETURN);
  else
  Keyboard.release(KEY_RETURN);

  if (button8 == 1) 
  Keyboard.press(KEY_END);
  else
  Keyboard.release(KEY_END);

}

 

bwn
Offline
Зарегистрирован: 25.08.2014

Алексей236 пишет:

Вот ещё раз переделанный код, но опять не работает. Мне кажется, что я напутал с подключением кнопок. Я их подключил одной ногой к земле другой к пину.

Изучаем простейших. Со страницы нумер раз.