#1 2022-06-12 16:30:45

Cheburek
Учасник
Зареєстрований: 2022-05-17
Повідомлень: 24

не нажимается правая кнопка миши

не нажемается правая кнопка мижи при нажатии кнопки
нажатие кнопки находится в void move_mouse()
вот код

#include <Keyboard.h>
#include <Mouse.h>

unsigned long last;

boolean butt_flag1 = 0;
boolean butt1;

boolean butt_flag2 = 0;
boolean butt2;


int VRx = A0;
int VRy = A1;

int VRx2 = A2;
int VRy2 = A3;

int SW = 12;
int SW2 = 11;

int xPosition = 0;
int yPosition = 0;
int SW_state = 0;

int mapX = 0;
int mapY = 0;

int xPosition2= 0;
int yPosition2 = 0;
int SW_state2 = 0;

int mapX2 = 0;
int mapY2 = 0;

int pin_f = 10;

int pin_1 = 9;
int pin_2 = 8;
int pin_3 = 7;
int pin_4 = 6;

int pin_e = 5;
int pin_q = 4;

void setup() {
   Keyboard.begin();
   Mouse.begin();
   Serial.begin(9600); 
  
   pinMode(VRx, INPUT);
   pinMode(VRy, INPUT);
   pinMode(VRx2, INPUT);
   pinMode(VRy2, INPUT);
   pinMode(pin_f, INPUT_PULLUP); 
   pinMode(SW, INPUT_PULLUP);
   pinMode(SW2, INPUT_PULLUP); 

   pinMode(pin_1, INPUT_PULLUP);
   pinMode(pin_2, INPUT_PULLUP);
   pinMode(pin_3, INPUT_PULLUP);
   pinMode(pin_4, INPUT_PULLUP);

   pinMode(pin_e, INPUT_PULLUP);
   pinMode(pin_q, INPUT_PULLUP);

}

void mouse_move(){
  butt1 = digitalRead(12); 
  butt2 = digitalRead(11); 
  xPosition = analogRead(VRx);
  yPosition = analogRead(VRy);
  
  SW_state = !digitalRead(SW);
  mapX = map(xPosition, 0, 1023, -512, 512);
  mapY = map(yPosition, 0, 1023, -512, 512);
  /*
  Serial.print("X: ");
  Serial.print(mapX);
  Serial.print(" | Y: ");
  Serial.print(mapY);
  Serial.print(" | Button: ");
  Serial.println(SW_state);
  delay(100);
   */
  
  
  
  if(mapY < 0){
    //Serial.println("X+");
    Mouse.move(0, -1, 0);
    }
  if(mapY > 38){
    //Serial.println("X-");
    Mouse.move(0, 1, 0);
    }
  if(mapX > 0){
    //Serial.println("Y+");
    Mouse.move(-1, 0, 0);
    }
  if(mapX < -10){
    //Serial.println("Y-");
    Mouse.move(1,0, 0);
    }
  if(butt1 == 1 && butt_flag1 == 0){
    butt_flag1 = 1;
    Mouse.press(MOUSE_LEFT);
    
      }
  if(butt1 == 0 && butt_flag1 == 1){
    butt_flag1 = 0;
    Mouse.release();
      }
  if(butt2 == 1 && butt_flag2 == 0){
    butt_flag2 = 1;
    Mouse.press(MOUSE_RIGHT);
      }
  if(butt2 == 0 && butt_flag2 == 1){
    butt_flag2 = 0;
    Mouse.release();
      }
}

void keyboard_press(){
  xPosition2 = analogRead(VRx2);
  yPosition2 = analogRead(VRy2);

  SW_state2 = !digitalRead(SW2);
  mapX2= map(xPosition, 0, 1023, -512, 512);
  mapY2 = map(yPosition, 0, 1023, -512, 512);
  
  
  if(!digitalRead(pin_f) == 1){
    if (millis()- last > 100){
      last = millis();
      Keyboard.press('f');
    }
    }
  if(!digitalRead(pin_2) == 1){
    if (millis()- last > 100){
      last = millis();
      Keyboard.press('1');
    }
    }
  if(!digitalRead(pin_1) == 1){
    if (millis()- last > 100){
      last = millis();
      Keyboard.press('2');
    }
    }
  if(!digitalRead(pin_3) == 1){
    if (millis()- last > 100){
      last = millis();
      Keyboard.press('3');
    }
    }
  if(!digitalRead(pin_4) == 1){
    if (millis()- last > 100){
      last = millis();
      Keyboard.press('4');
    }
    }
  if(!digitalRead(pin_q) == 1){
    if (millis()- last > 100){
      last = millis();
      Keyboard.press('q');
    }
    }
  if(!digitalRead(pin_e) == 1){
    if (millis()- last > 100){
      last = millis();
      Keyboard.press('e');
    }
    }   
  else{
    Keyboard.releaseAll();
   }
  }

void loop() {
  keyboard_press();
  mouse_move();
  /*
  Serial.println(!digitalRead(pin_f));
  Serial.println(!digitalRead(pin_1));
  Serial.println(!digitalRead(pin_2));
  Serial.println(!digitalRead(pin_3));
  Serial.println(!digitalRead(pin_4));
  delay(100);
  */
}

Неактивний

#2 2022-06-12 17:31:58

г0сть
Учасник
Зареєстрований: 2022-06-09
Повідомлень: 45

Re: не нажимается правая кнопка миши

Почитай что такое INPUT_PULLUP и как с ним работать

Неактивний

#3 2022-06-12 19:25:02

Cheburek
Учасник
Зареєстрований: 2022-05-17
Повідомлень: 24

Re: не нажимается правая кнопка миши

почитал, если изпользовать инпут пулап то идет инертиривание, на как мне его почить скажите пожалуйста

Неактивний

#4 2022-06-12 19:29:56

г0сть
Учасник
Зареєстрований: 2022-06-09
Повідомлень: 45

Re: не нажимается правая кнопка миши

Cheburek пише:

почитал, если изпользовать инпут пулап то идет инертиривание, на как мне его почить скажите пожалуйста

Какое инвертирование? Ты что читал? Журнал "Мурзилка"? Покажи схему (хоть на листочке от руки нарисуй) как ты кнопки подключаешь. Надеюсь не так как в этой теме?

Неактивний

#5 2022-06-12 19:40:45

Cheburek
Учасник
Зареєстрований: 2022-05-17
Повідомлень: 24

Re: не нажимается правая кнопка миши

https://wokwi.com/projects/334278822082904660 как то так

Неактивний

#6 2022-06-12 19:53:29

г0сть
Учасник
Зареєстрований: 2022-06-09
Повідомлень: 45

Re: не нажимается правая кнопка миши

Cheburek пише:

как то так

Блин, что за люди, неужели тяжело нормально нарисовать, чтобы ничего не сливалось !?
Ладно, если ты действительно читал за PULLUP, какой уровень у тебя на пине при не нажатой кнопке?

Неактивний

#7 2022-06-12 20:00:40

Cheburek
Учасник
Зареєстрований: 2022-05-17
Повідомлень: 24

Re: не нажимается правая кнопка миши

без ! 1 а так при инверции 0

Неактивний

#8 2022-06-12 20:04:48

г0сть
Учасник
Зареєстрований: 2022-06-09
Повідомлень: 45

Re: не нажимается правая кнопка миши

Cheburek пише:

без ! 1 а так при инверции 0

Чего?! А ну-ка поподробней, нормальными словами

Неактивний

#9 2022-06-12 21:03:05

г0сть
Учасник
Зареєстрований: 2022-06-09
Повідомлень: 45

Re: не нажимается правая кнопка миши

И тишина ...
Испугался что-ли? Так здесь не кусаются. Или не знаешь что ответить? Ок, пойдем наглядным путем. Вот твой код без лишнего "мусора", только кнопки. Запусти и попробуй разобраться что у тебя не так.

boolean butt_flag1 = 0;
boolean butt1;

boolean butt_flag2 = 0;
boolean butt2;

void setup() {
  Serial.begin(9600);
 pinMode(11,INPUT_PULLUP);
 pinMode(12,INPUT_PULLUP);
}

void mouse_move(){
  butt1 = digitalRead(12); 
  butt2 = digitalRead(11); 
  
  if(butt1 == 1 && butt_flag1 == 0){
    butt_flag1 = 1;
    Serial.println("MOUSE_LEFT_PRESS");
    //Mouse.press(MOUSE_LEFT);
          }

  if(butt1 == 0 && butt_flag1 == 1){
    butt_flag1 = 0;
    Serial.println("MOUSE_LEFT_NO PRESS");
    //Mouse.release();
      }

  if(butt2 == 1 && butt_flag2 == 0){
    butt_flag2 = 1;
    Serial.println("MOUSE_RIGHT_PRESS");
    //Mouse.press(MOUSE_RIGHT);
      }

  if(butt2 == 0 && butt_flag2 == 1){
    butt_flag2 = 0;
    Serial.println("MOUSE_RIGHT_NO PRESS");
    //Mouse.release();
      }
}

void loop() {
  mouse_move();
}

Неактивний

#10 2022-06-12 21:11:46

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 874

Re: не нажимается правая кнопка миши

Cheburek пише:

https://wokwi.com/projects/334278822082904660 как то так

и как по такой ерунде можно что то понять, да ещё и чайнику.
более фиговой схемы трудно представить.

Неактивний

#11 2022-06-13 10:46:36

Cheburek
Учасник
Зареєстрований: 2022-05-17
Повідомлень: 24

Re: не нажимается правая кнопка миши

г0сть пише:

И тишина ...
Испугался что-ли? Так здесь не кусаются. Или не знаешь что ответить? Ок, пойдем наглядным путем. Вот твой код без лишнего "мусора", только кнопки. Запусти и попробуй разобраться что у тебя не так.

boolean butt_flag1 = 0;
boolean butt1;

boolean butt_flag2 = 0;
boolean butt2;

void setup() {
  Serial.begin(9600);
 pinMode(11,INPUT_PULLUP);
 pinMode(12,INPUT_PULLUP);
}

void mouse_move(){
  butt1 = digitalRead(12); 
  butt2 = digitalRead(11); 
  
  if(butt1 == 1 && butt_flag1 == 0){
    butt_flag1 = 1;
    Serial.println("MOUSE_LEFT_PRESS");
    //Mouse.press(MOUSE_LEFT);
          }

  if(butt1 == 0 && butt_flag1 == 1){
    butt_flag1 = 0;
    Serial.println("MOUSE_LEFT_NO PRESS");
    //Mouse.release();
      }

  if(butt2 == 1 && butt_flag2 == 0){
    butt_flag2 = 1;
    Serial.println("MOUSE_RIGHT_PRESS");
    //Mouse.press(MOUSE_RIGHT);
      }

  if(butt2 == 0 && butt_flag2 == 1){
    butt_flag2 = 0;
    Serial.println("MOUSE_RIGHT_NO PRESS");
    //Mouse.release();
      }
}

void loop() {
  mouse_move();
}

нет, нас вчера бомбили, вот и не мог выйти на связь

Неактивний

#12 2022-06-14 20:44:36

Cheburek
Учасник
Зареєстрований: 2022-05-17
Повідомлень: 24

Re: не нажимается правая кнопка миши

г0сть пише:

И тишина ...
Испугался что-ли? Так здесь не кусаются. Или не знаешь что ответить? Ок, пойдем наглядным путем. Вот твой код без лишнего "мусора", только кнопки. Запусти и попробуй разобраться что у тебя не так.

boolean butt_flag1 = 0;
boolean butt1;

boolean butt_flag2 = 0;
boolean butt2;

void setup() {
  Serial.begin(9600);
 pinMode(11,INPUT_PULLUP);
 pinMode(12,INPUT_PULLUP);
}

void mouse_move(){
  butt1 = digitalRead(12); 
  butt2 = digitalRead(11); 
  
  if(butt1 == 1 && butt_flag1 == 0){
    butt_flag1 = 1;
    Serial.println("MOUSE_LEFT_PRESS");
    //Mouse.press(MOUSE_LEFT);
          }

  if(butt1 == 0 && butt_flag1 == 1){
    butt_flag1 = 0;
    Serial.println("MOUSE_LEFT_NO PRESS");
    //Mouse.release();
      }

  if(butt2 == 1 && butt_flag2 == 0){
    butt_flag2 = 1;
    Serial.println("MOUSE_RIGHT_PRESS");
    //Mouse.press(MOUSE_RIGHT);
      }

  if(butt2 == 0 && butt_flag2 == 1){
    butt_flag2 = 0;
    Serial.println("MOUSE_RIGHT_NO PRESS");
    //Mouse.release();
      }
}

void loop() {
  mouse_move();
}

ничего не понимаю, все нормально в коде

Неактивний

#13 2022-06-14 20:59:52

г0сть
Учасник
Зареєстрований: 2022-06-09
Повідомлень: 45

Re: не нажимается правая кнопка миши

Ты с PULLUP разобрался? Код запускал, что тебе пишет в сериал?

Неактивний

#14 2022-06-15 18:12:18

Cheburek
Учасник
Зареєстрований: 2022-05-17
Повідомлень: 24

Re: не нажимается правая кнопка миши

да, посмотрел подключил, понять не могу почему при нажатии столько раз нажимает на кнопки

Неактивний

#15 2022-06-15 18:43:37

г0сть
Учасник
Зареєстрований: 2022-06-09
Повідомлень: 45

Re: не нажимается правая кнопка миши

Cheburek пише:

да, посмотрел

Ну судя по всему смотрел не туда куда надо. Хотя на это

почему при нажатии столько раз нажимает на кнопки

тоже надо обратить внимание. Только проблема у тебя в другом. Если бы ты внимательно смотрел на сообщения, то заметил бы что у тебя сразу при старте идут сообщения что левая  и правая кнопка нажата хотя их никто не трогал. А когда ты нажимаешь любую из них, то идет сообщение что кнопка отжата.
Что касается большого количества нажатий - по умолчанию вокви симулирует реальную кнопку с ее дребезгом. Почитай как с этим бороться (только в реальности, а не в симуляторе, там это отключается в настройках).
Ну и вернемся к нашим баранам PULLUP. Объясни что ты делаешь в этой

if(!digitalRead(pin_f) == 1)

и подобных строках?

Неактивний

#16 2022-06-18 21:45:49

INDANTESITATL
Гість

Re: не нажимается правая кнопка миши

г0сть пише:
Cheburek пише:

да, посмотрел

Ну судя по всему смотрел не туда куда надо. Хотя на это

почему при нажатии столько раз нажимает на кнопки

тоже надо обратить внимание. Только проблема у тебя в другом. Если бы ты внимательно смотрел на сообщения, то заметил бы что у тебя сразу при старте идут сообщения что левая  и правая кнопка нажата хотя их никто не трогал. А когда ты нажимаешь любую из них, то идет сообщение что кнопка отжата.
Что касается большого количества нажатий - по умолчанию вокви симулирует реальную кнопку с ее дребезгом. Почитай как с этим бороться (только в реальности, а не в симуляторе, там это отключается в настройках).
Ну и вернемся к нашим баранам PULLUP. Объясни что ты делаешь в этой

if(!digitalRead(pin_f) == 1)

и подобных строках?


Я просто в _____е, зачем, он инвертировал цифровое чтение пина f? хаха это нобелевка полюбому, можно больше не использовать diхаха. Бляяя теперь ясно почему развитие стало в сторону инвертирования.

Думаю стоит напомнить
digitalRead()
Описание
Считывает уровень сигнала HIGH или LOW с указанного цифрового вывода.

Синтаксис
?
digitalRead(pin)
Параметры
pin: номер цифрового вывода, с которого необходимо считать значение (int)

Возвращаемые значения
HIGH или LOW

Пример
Программа устанавливает на выводе 13 тот же уровень сигнала, что и на выводе 7.

?
int ledPin = 13; // светодиод подсоединен к цифровому выводу 13
int inPin = 7;   // кнопка подсоединена к цифровому выводу 7
int val = 0;     // переменная для хранения считанного значения

void setup()
{
  pinMode(ledPin, OUTPUT);      // конфигурируем цифровой вывод 13 как выход
  pinMode(inPin, INPUT);      // конфигурируем цифровой вывод 13 как вход
}

void loop()
{
  val = digitalRead(inPin);   // считываем значение со входа
  digitalWrite(ledPin, val);    // выводим на светодиод уровень сигнала на кнопке
}

и по применению (!)

! (логическое отрицание)
True, если операнд false, и наоборот, например:

?
if (!x) {
  // ...
}
условие верно, если x - false (x равно 0).

Важно различать логический оператор "И" - && и битовый оператор "И" - &. Тоже самое относится к логическому оператору "ИЛИ" - || и битовому оператору "ИЛИ" - |.

У тебя отрецание чтения что за бред.

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму