Turai Botond
Created March 10, 2019 © Apache-2.0

REAW the Arduino Game Controller

Self-made game controller. This project under development.

IntermediateWork in progress165
REAW the Arduino Game Controller

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
×1
Analog joystick (Generic)
×1
RGB Backlight LCD - 16x2
Adafruit RGB Backlight LCD - 16x2
×1
Jumper wires (generic)
Jumper wires (generic)
×1
LED (generic)
LED (generic)
×3
Resistor 221 ohm
Resistor 221 ohm
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Schematics

Prototype

Code

Project REAW

Arduino
Arduino code
/* Reaw
   version: 1.0
   Device list:
      Joystick
      2x2 keypad
      16x2 LCD + I2C
      3 Leds
      Vibration motor
      Shake sensor
*/

//Set up sensor pins____________________________________
byte joy[] = {A0, A1, 3}; //x,y,z

byte key[] = {9, 8, 7, 6};
byte button[2][2] = {{4, 1}, {8, 2}};

byte shake = 4;

//set up outputs________________________________________
byte leds[] = {10, 11, 12};

byte vib = 5;

//status
int sensors[3];

void setup()
{
  pinMode(key[0], OUTPUT);
  pinMode(key[1], OUTPUT);
  pinMode(key[2], INPUT_PULLUP);
  pinMode(key[3], INPUT_PULLUP);
  pinMode(shake, INPUT_PULLUP);
  pinMode(joy[2], INPUT_PULLUP);
  pinMode(vib, OUTPUT);
  for (int k = 0; k < 3; k++)
  {
    pinMode(leds[k], OUTPUT);
    digitalWrite(leds[k], 1);
  }
  digitalWrite(key[0], 1);
  digitalWrite(key[1], 1);
  Serial.begin(9600);
  digitalWrite(vib, 1);
  delay(500);
  digitalWrite(vib, 0);
  for (int k = 0; k < 3; k++)
    digitalWrite(leds[k], 0);
}

void loop()
{
  sensor_read();
  Serial.print(String(sensors[0])); Serial.print("\t"); Serial.print(String(sensors[1])); Serial.print("\t"); Serial.print(String(sensors[2]));Serial.println("\t");
}

void sensor_read()
{
  for (int del = 0; del < 3; del++)
    sensors[del] = 0;
  sensors[0] = analogRead(joy[0]);
  sensors[1] = analogRead(joy[1]);

  for (int i = 0; i < 2; i++)
  {
    digitalWrite(key[i], 0);
    for (int j = 0; j < 2; j++)
    {
      if (digitalRead(key[j + 2]) == 0)
        sensors[2] += button[i][j];
    }
    digitalWrite(key[i], 1);
  }
  if (digitalRead(shake) == 0)
    sensors[2] += 16;
  if (digitalRead(joy[2]) == 0)
    sensors[2] += 32;
}

Processing REAW

Processing
To simulate keystrokes
import processing.serial.*;
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.awt.*; 

Robot robot;
int mx=500,my=500;
Serial myPort;  // The serial port
int[] sensors=new int[3];

void setup() {
  try 
  { 
    robot = new Robot();
  } 
  catch (AWTException e) 
  {
    e.printStackTrace();
    exit();
  }
  myPort = new Serial(this, "/dev/ttyUSB0", 9600);  
  //enter the Arduino COM port or Serial.list () [0] instead of "/dev/ttyUSB0"
  robot.mouseMove(500,500);
}

void draw() 
{
  //mx=mouseX;
  //my=mouseY;
  int mpx=int(floor(map(sensors[0],530,1023,1,8)));
  int mnx=int(floor(map(sensors[0],0,470,8,1)));
  int mpy=int(floor(map(sensors[1],530,1023,1,8)));
  int mny=int(floor(map(sensors[1],0,470,8,1)));
  //print(str(mpx)+"\t"+str(mnx)+"\t"+str(mpy)+"\t"+str(mny)+"\n");
  if(mpx>0)
  {
    for(int l=0;l<mpx;l++)
      robot.mouseMove(mx+l,my);
    mx+=mpx;
  }
  if(mnx>0)
  {
    for(int l=0;l<mnx;l++)
      robot.mouseMove(mx-l,my);
    mx-=mnx;
  }
  if(mpy>0)
  {
    for(int l=0;l<mpy;l++)
      robot.mouseMove(mx,my-l);
    my-=mpy;
  }
  if(mny>0)
  {
    for(int l=0;l<mny;l++)
      robot.mouseMove(mx,my+l);
    my+=mny;
  }
  int jz=sensors[2]<<26;
  jz = jz >>31;
  if(jz==-1)
    robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
}

void serialEvent(Serial myPort) 
{ 
  String buffer = myPort.readStringUntil('\n');
  if (buffer != null) {
    sensors=int(split(buffer, '\t'));
  }
} 
/*
robot.keyPress(KeyEvent.VK_SPACE);
 //If we want a delay here, that gets a little bit more complicated...
 robot.keyRelease(KeyEvent.VK_SPACE);
 */

Credits

Turai Botond
5 projects • 21 followers
Check out my youtube channel for exciting projects: www.youtube.com/@botondturai
Contact

Comments

Please log in or sign up to comment.