27 November 2023

FINAL FANTASY VII Controller - Joseph Donnelly

 Controller:


 

Video:

     



    So, for my final controller, it ended up being a failure. This is primarily just due to the fact that I was completely unable to get an external sensor working, which then resulted in me not even bothering to make a good quality external for the controller, and just using a cardboard tube. That being said, there are still design elements in place here. The tube and circle at the bottom are supposed to be reminiscent of a sword hilt, evocative of the Buster Sword from the game I chose. For the mapping for the inputs, the way that the device is tilted impacts the way the character or menu input moves, while shouting or making an otherwise loud noise presses the confirm button. To cancel, the user swings the sword, like they are attacking the choice they were going to make. Initially, this was reversed, but since swinging the hilt is a more vague input, I decided to swap the two. As for the signifiers, there aren't too many, to be honest. The only input that is slightly hinted at by the shape of the controller is that of swinging it, and even that isn't hinted at too strongly. Feedback, meanwhile, is given by the game itself. Thus, movement and cancelling are rather easy to intuit. The only input that isn't easy to intuit is that of confirming, which must be explained beforehand. The main question I have about the base concept of my controller is this: in what way could I have signified the idea of shouting to confirm?

Schematics:

 

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIOnaUdIKYblMcfMxUcE7IEVBmhHwXi6hfrf6msf-1DiI-lf2uBpv72k5-NkWsoGb1yQZChV_4Q8c3fSEwYPdEMZ9lwxhCat0WXkmkqWXRe7sS5V9a_3bxxnMcRAS5vTiODSH-h2mQY4V6ooqgzhjkxgftZ1UYA2lNsu3oa-fjLYZVIoYBQ6rV15JB27k/s496/accel.png

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8rV5AqYb56ljeDiAuiwMuP9_tpqABq1e8qdStXPubKyLfo9Lf-ILSZTAgdyhSXn3MkMrTWrUdyr7ztPDU9r3H__6wucPkG8K9tSBQ9bmlJkkJhvY_jdKRs52jW7OycKD29tzK3p_V0P0fks9omfx9cpTKgvlRANvPmx2-80yaggfGfbrKU_0MOvaMWQM/s700/circuit.pnghttps://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDP_ACKxQSGshfxd17H3RhGXxYfMUu_mCzXWnr6A7eosmRoHdQPLu1MmGThfXJqPTSKruoi6FML2cBoNm_74xNHwxmrIfjBb9kEnMw1ku4aTsnC4gIOWTFYWeF0WfL-QQmqn0HXeF0ugtjlIIyD6p-58jgQjh3zjVCNyIH_58bUrP0AYeaQC9fHFG-0sI/s450/sound.png

Code:

#include <Keyboard.h>
#include <KeyboardLayout.h>
#include <Adafruit_CircuitPlayground.h>
#include <Adafruit_Circuit_Playground.h>

int swatch = 0;
int pulse = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(CPLAY_SLIDESWITCHPIN, INPUT);
pinMode(A2, OUTPUT);
pinMode(A1, INPUT);
delay(1000);
Keyboard.begin();
CircuitPlayground.begin();
}

void loop() {
// put your main code here, to run repeatedly:
swatch = digitalRead(CPLAY_SLIDESWITCHPIN);
if (swatch == 1){
float x = CircuitPlayground.motionX();
float y = CircuitPlayground.motionY();
float z = CircuitPlayground.motionZ();
float m = CircuitPlayground.mic.soundPressureLevel(10);
Serial.print("Z Level = ");
Serial.println(z);
if (z < 12 && z > -2){
if (y > 4){
Keyboard.press(KEY_DOWN_ARROW);
}
if (y < -4){
Keyboard.press(KEY_UP_ARROW);
}
if (x > 4){
Keyboard.press(KEY_LEFT_ARROW);
}
if (x < -4){
Keyboard.press(KEY_RIGHT_ARROW);
}
}
if(m > 85){
Keyboard.press('x');
}
else if(z > 12 || z < -2){
Keyboard.press('c');
}
if ( x < 4 && x > -4 && y < 4 && y > -4 && z < 12 && z > -2 && m < 85){
Keyboard.releaseAll();
}
}
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.