我正在使用Arduino制作自己的控制器,并且正在使用2个操纵杆。第一个操纵杆是四处移动,第二个是环顾四周。因此,当我使用使我走动的第一个操纵杆然后又想环顾四周时,却不允许我同时做这两种事情。
我将两个操纵杆的“控制器”都置于一个空循环中,这就是为什么它不起作用的原因。
这是我得到的第一个视图:
#include <Mouse.h>
#include <Keyboard.h>
int Button1 = 7; // øverste knap
int Button2 = 9; // højre knap
int Button3 = 8; // venstre knap
int Button4 = 10; // nederste knap
//joystick
int horzPin = A1; // For x pin
int vertPin = A2; // For y pin
int selPin = 2; // For knap pin
int vertZero, horzZero; // Gemmer den indledende værdi for hver akse, normalt omkring 512
int vertValue, horzValue; // Gemmer den nuværende værdi af akserne.
int mouseClickFlag = 0; // For musens knap Sprint
int MushorzPin = A3; // For x pin
int MusvertPin = A4; // For y pin
int MusselPin = 3; // For knap pin
int MusvertZero, MushorzZero; // Gemmer den indledende værdi for hver akse, normalt omkring 512
int MusvertValue, MushorzValue; // Gemmer den nuværende værdi af akserne.
const int sensitivity = 200; // Jo højere sensitivity der er jo langsommere er musen. Skulle være omkring 300
int MusmouseClickFlag = 0; // For musens knap
void setup() {
Serial.begin(9600);
pinMode(Button1,INPUT);
joyMovSetup();
joystickMouseSetup();
}
void loop() {
btnHIGH();
btnLOW();
joyStickMouseEngine();
joyMovEngine();
}
这是给鼠标的:
bool isPressed = false;
void joystickMouseSetup() {
pinMode(MushorzPin, INPUT); // Sætter pinsene til input
pinMode(MusvertPin, INPUT);
pinMode(MusselPin, INPUT); // sætter knappen pin til input
digitalWrite(MusselPin, HIGH); // Sætter knap pin til høj fordi den ikke er trykket
delay(1000); // Lille kort pause for at få tingene til at fungere
MusvertZero = analogRead(MusvertPin); // Får start positionernes input
MushorzZero = analogRead(MushorzPin); // Joystikket skulle være neutralt når dette forekommer
}
void joyStickMouseEngine() {
MusvertValue = analogRead(MusvertPin) - MusvertZero; // Læser y aksens position
MushorzValue = analogRead(MushorzPin) - MushorzZero; // Læser x aksens position
if (MusvertValue != 0)
Mouse.move(0, MusvertValue/sensitivity, 0); // Rykker musen på y aksen
if (MushorzValue != 0)
Mouse.move(MushorzValue/sensitivity, 0, 0); // Rykker musen på x aksen
if ((digitalRead(MusselPin) == LOW)) // Hvis joystick knappen er trykket
{
if (isPressed == true) {
// Slukker knappen
Keyboard.begin();
Keyboard.release(KEY_LEFT_SHIFT); // Slipper shift
delay(300);
isPressed = false;
return;
} if (isPressed == false) {
Keyboard.begin();
Keyboard.press(KEY_LEFT_SHIFT); // Slipper shift
delay(300);
isPressed = true;
return;
}
}
}
这是为了移动播放器:
void joyMovSetup() {
pinMode(horzPin, INPUT); // Sætter pinsene til input
pinMode(vertPin, INPUT);
pinMode(selPin, INPUT); // sætter knappen pin til input
digitalWrite(selPin, HIGH); // Sætter knap pin til høj fordi den ikke er trykket
delay(1000); // Lille kort pause for at få tingene til at fungere
vertZero = analogRead(vertPin); // Får start positionernes input
horzZero = analogRead(horzPin); // Joystikket skulle være neutralt når dette forekommer
}
void joyMovEngine() {
int sensorValueX = analogRead(horzPin);
int sensorValueY = analogRead(vertPin);
if (sensorValueY < 20){
Keyboard.press('w');
delay(20);
Keyboard.release('w');
}
else if(sensorValueX < 20){
Keyboard.press('a');
delay(20);
Keyboard.release('a');
}
else if(sensorValueY > 1000){
Keyboard.press('s');
delay(20);
Keyboard.release('s');
}
else if(sensorValueX > 1000){
Keyboard.press('d');
delay(20);
Keyboard.release('d');
}
if ((digitalRead(selPin) == 0) && (!mouseClickFlag)) // Hvis joystick knappen er trykket
{
mouseClickFlag = 1;
Keyboard.begin();
Keyboard.press(KEY_LEFT_CTRL); // Trykker på shift
}
if ((digitalRead(selPin))&&(mouseClickFlag)) // Hvis joystick knappen ikke er trykket
{
mouseClickFlag = 0;
Keyboard.begin();
Keyboard.release(KEY_LEFT_CTRL); // Slipper shift
}
}
答案 0 :(得分:0)
您可以尝试使用中断。为此,点击操纵杆的模拟输出并将其连接到Arduino上的中断使能引脚。然后将中断设置为在检测到输入上升或下降时工作。
您还可以尝试使用FreeRTOS,这将使您一次读取两个操纵杆。 p>