Youtube Channel
scrivimi: fraranux@gmail.com
chiamami: 345 04.22.\pi

mercoledì 18 giugno 2014

Nuovo Game Controller con Arduino Micro, sensori capacitivi e play-doh

Ho costruito un paio di anni fa un controller per questo gioco al museo, richiedeva i caratteri QWERT, con Arduino Duemilanove è stato un pasticcio, inviao i caratteri sulla seriale e poi li leggevo con il monitor e poi il gioco in qualche modo (ma per me è ancora un mistero) se li ciucciava.
Poi è arrivato il Leonardo, carichi la libreria giusta ed il gioco è fatto.
Poi è arrivao il micro, idem come sopra.
Il Micro lo colleghi direttamente all'USB, lo programmi come un Arduino normale, i pin sono gli stessi. Fine.
In questo post pubblico semplicemente qualche foto del lavoro, i pochi componenti li ho saldati direttamente sulla scheda, un lavoro veloce veloce. Pubblico in fondo anche il codice.

Sulla sinistra in alto le 5 resistenze di elevato valore, in alto a destra i led che indicano la "pressione" del pulsante.



il collegamento dei pin verso l'esterno è affidato ad una serie di 5 coccodrilli (che verranno presumibilmente collegati ad oggetti modellati con il play doh)


questi i comandi inviati al PC

E qui sotto il lavoro completo e chiuso



Il circuitino a Fritzing:

Altre importanti informazioni in merito al circuito ed al sistema in quest'altro post.


Lo sketch:
#include <CapacitiveSensor.h>

CapacitiveSensor Q = CapacitiveSensor(13, 12);
CapacitiveSensor W = CapacitiveSensor(13, 11);
CapacitiveSensor E = CapacitiveSensor(13, 10);
CapacitiveSensor R = CapacitiveSensor(13, 9);
CapacitiveSensor T = CapacitiveSensor(13, 8);

int soglia = 100;

int ledQ= 6;
int ledW= 5;
int ledE= 4;
int ledR= 3;
int ledT= 2;

boolean QTouch = false;
boolean WTouch = false;
boolean ETouch = false;
boolean RTouch = false;
boolean TTouch = false;

void setup()
{
pinMode(ledQ, OUTPUT);  
pinMode(ledW, OUTPUT);  
pinMode(ledE, OUTPUT);  
pinMode(ledR, OUTPUT);  
pinMode(ledT, OUTPUT);  

 
  Keyboard.begin();

Q.set_CS_AutocaL_Millis(0xFFFFFFFF);
W.set_CS_AutocaL_Millis(0xFFFFFFFF);
E.set_CS_AutocaL_Millis(0xFFFFFFFF);
R.set_CS_AutocaL_Millis(0xFFFFFFFF);
T.set_CS_AutocaL_Millis(0xFFFFFFFF);

Serial.begin(9600);
}

void loop()
{
long start = millis();
long totaleQ = Q.capacitiveSensor(30);
long totaleW = W.capacitiveSensor(30);
long totaleE = E.capacitiveSensor(30);
long totaleR = R.capacitiveSensor(30);
long totaleT = T.capacitiveSensor(30);


if(totaleQ > soglia && !QTouch){
//Serial.println("Q");
Keyboard.write('Q');
QTouch = true;
digitalWrite(ledQ, HIGH);
delay(100);
}
else{QTouch = false;}
digitalWrite(ledQ, LOW);
if(totaleW > soglia && !WTouch){
//Serial.println("W");
Keyboard.write('W');
WTouch = true;
digitalWrite(ledW, HIGH);
delay(100);
}
else{WTouch = false;}
digitalWrite(ledW, LOW);

if(totaleE > soglia && !ETouch){
//Serial.println("E");
Keyboard.write('E');
ETouch = true;
digitalWrite(ledE, HIGH);
delay(100);
}
else{ETouch = false;}
digitalWrite(ledE, LOW);
if(totaleR > soglia && !RTouch){
Serial.println("R");
Keyboard.write('R');
RTouch = true;
digitalWrite(ledR, HIGH);
delay(100);
}
else{RTouch = false;}
digitalWrite(ledR, LOW);
if(totaleT > soglia && !TTouch){
//Serial.println("T");
Keyboard.write('T');
TTouch = true;
digitalWrite(ledT, HIGH);
delay(100);
}
else{TTouch = false;}
digitalWrite(ledT, LOW);

}


Nessun commento:

Posta un commento