아두이노 레오나르도로 2개를 이용해서 유무선 조이스틱을 만들려고 하는데 어떻게 해야할까요?
우선 유선쪽은 프로그램을 짰는데 받는쪽에서 어떻게 해야 받아올지 모르겠습니다
디지털 4~13까지는 버튼 1번~10번이고
아날로그 A0~A3(디지털 18~21)는 상하좌우로 했습니다
2,3은 송수신용으로 설정하고요
제 생각에는 우선 디지털 핀으로 받은 값은 조이스틱으로 출력하고 그 값을 송신해서
수신받는쪽에서 그값을 다시 조이스틱으로 출력하게해서
1. 유선으로 연결하면 일반적인 유선조이스틱으로 쓰고
2. 조이스틱에 연결된 아두이노는 배터리로 연결하고
수신받는쪽을 컴터에 연결해서 조이스틱으로 인식해서
무선으로 쓰고 싶습니다
/////////////////////////////////////////////////////////////////////////////
#include <Joystick.h> // 조이스틱관련
#include <SPI.h> // 송수신 통신관련
#include <nRF24L01.h> //
#include <RF24.h> //
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
10, 0, // Button Count, Hat Switch Count
true, true, false, // X and Y, but no Z Axis
false, false, false, // No Rx, Ry, or Rz
false, false, // No rudder or throttle
false, false, false); // No accelerator, brake, or steering
RF24 radio(2, 3);
const byte address[6] = "00001";
void setup() {
// Initialize Button Pins
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, 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(18, INPUT_PULLUP);
pinMode(19, INPUT_PULLUP);
pinMode(20, INPUT_PULLUP);
pinMode(21, INPUT_PULLUP);
// Initialize Joystick Library
Joystick.begin();
Joystick.setXAxisRange(-1, 1);
Joystick.setYAxisRange(-1, 1);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
// Last state of the buttons
int lastButtonState[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
void loop() {
// Read pin values
for (int index = 0; index < 18; index++) {
int currentButtonState = !digitalRead(index + 4);
if (currentButtonState != lastButtonState[index]) {
switch (index) {
case 0: // Button 1
Joystick.setButton(0, currentButtonState);
break;
case 1: // Button 2
Joystick.setButton(1, currentButtonState);
break;
case 2: // Button 3
Joystick.setButton(2, currentButtonState);
break;
case 3: // Button 4
Joystick.setButton(3, currentButtonState);
break;
case 4: // Button 5
Joystick.setButton(4, currentButtonState);
break;
case 5: // Button 6
Joystick.setButton(5, currentButtonState);
break;
case 6: // Button 7
Joystick.setButton(6, currentButtonState);
break;
case 7: // Button 8
Joystick.setButton(7, currentButtonState);
break;
case 8: // Button 9
Joystick.setButton(8, currentButtonState);
break;
case 9: // Button 10
Joystick.setButton(9, currentButtonState);
break;
case 10: // Button
break;
case 11: // Button
break;
case 12: // Button
break;
case 13: // Button
break;
case 14: // UP
if (currentButtonState == 1) {
Joystick.setYAxis(-1);
} else {
Joystick.setYAxis(0);
}
break;
case 15: // DOWN
if (currentButtonState == 1) {
Joystick.setYAxis(1);
} else {
Joystick.setYAxis(0);
}
break;
case 16: // RIGHT
if (currentButtonState == 1) {
Joystick.setXAxis(-1);
} else {
Joystick.setXAxis(0);
}
break;
case 17: // LEFT
if (currentButtonState == 1) {
Joystick.setXAxis(1);
} else {
Joystick.setXAxis(0);
}
break;
}
lastButtonState[index] = currentButtonState;
radio.write(&index, sizeof(index));
Serial.println(index);
}
}
delay(20);
}
|