| Per començar | Elements d'entrada | Programació CircuitPython | Recursos CITCEA | |
| Elements no electrònics | Elements de sortida | Programació Arduino | ||
| Projectes | Elements de control | Dades pràctiques | Inici |
Els Pantambor són uns pantalons interactius que permeten fer sons quan es toquen determinats punts i també permeten jugar al conegut Simon. El programa incorpora els dos modes de funcionament que es poden triar segons quin polsador tàctil es toca al començament del programa.
La llista de materials principals és la següent:
1 Resistència de 100 Ω
5 Resistències de 10 MΩ
5 Resistències de 1000 Ω
La peça de teixit conductor es va tallar en sis trossos. Cinc dels trossos es van posar a la part del davant dels pantalons cobrint l'espai dels cinc estrips que aquests tenien, tal com mostra la fotografia següent. El sisè tros es va situar a la part interior dels pantalons on un lloc on sempre pugui fer contacte amb la pell. Aquest sisè tros actuarà com a referència de les tensions.

La figura següent mostra l'esquema del circuit. Les cinc resistències que apareixen a la part central del costat dret són de 10 MΩ, la del brunzidor és de 100 Ω i les altres cinc són de 1000 Ω. El tros de teixit marcat amb una franja vermella és el de referència i els altres cinc són els polsadors tàctils.

A continuació tenim el llistat del programa:
//biblioteques #include <Adafruit_NeoPixel.h> #include <CapacitiveSensor.h>
bool joc =false; //Variables booleanes de control
bool decisio = false;
bool joc_simon = false;
int bru = 6;
int to[]={523,659,783,987,1046};
int x = 0;
int si =0;
int simon[] = {random(0,5), random(0,5),random(0,5),random(0,5),random(0,5)};
//Generem una seqüància aleatòria de 5 nombres
Adafruit_NeoPixel cadena = Adafruit_NeoPixel(5, 1, NEO_GRB + NEO_KHZ800);
CapacitiveSensor c1 = CapacitiveSensor(9,10); // La pota D9 és l'emissor i la D10 el receptor
CapacitiveSensor c2 = CapacitiveSensor(9,12);
CapacitiveSensor c3 = CapacitiveSensor(9,12);
CapacitiveSensor c4 = CapacitiveSensor(9,12);
CapacitiveSensor c5 = CapacitiveSensor(9,12);
void seleccionador() { //Modifiquem les variables de control per accedir als diferents jocs
bool l1 = c1.capacitiveSensor(30) > 4000;
bool l2 = c2.capacitiveSensor(30) > 4000;
if(l1){
tone(bru, 523,150);
decisio=true;
}
if(l2){
decisio=true;
joc_simon=true;
}
}
void piano() { //Donem una resposta sonora i lluminosa a les lectures dels polsadors
bool l1 = c1.capacitiveSensor(30) > 4000;
bool l2 = c2.capacitiveSensor(30) > 4000;
bool l3 = c3.capacitiveSensor(30) > 4000;
bool l4 = c4.capacitiveSensor(30) > 4000;
bool l5 = c5.capacitiveSensor(30) > 4000;
if(l1){
tone(bru, 523,150);
cadena.setPixelColor(0, 255, 0, 0);
cadena.setPixelColor(1, 0, 0, 0);
cadena.setPixelColor(2, 0, 0, 0);
cadena.setPixelColor(3, 0, 0, 0);
cadena.setPixelColor(4, 0, 0, 0);
}
if(l2){
tone(bru, 659, 150);
cadena.setPixelColor(0, 0, 0, 0);
cadena.setPixelColor(1, 255, 255, 0);
cadena.setPixelColor(2, 0, 0, 0);
cadena.setPixelColor(3, 0, 0, 0);
cadena.setPixelColor(4, 0, 0, 0);
}
if(l3){
tone(bru, 783, 150);
cadena.setPixelColor(0, 0, 0, 0);
cadena.setPixelColor(1, 0, 0, 0);
cadena.setPixelColor(2, 0, 255, 0);
cadena.setPixelColor(3, 0, 0, 0);
cadena.setPixelColor(4, 0, 0, 0);
}
if(l4){
tone(bru, 987, 150);
cadena.setPixelColor(0, 0, 0, 0);
cadena.setPixelColor(1, 0, 0, 0);
cadena.setPixelColor(2, 0, 0, 0);
cadena.setPixelColor(3, 0, 255, 255);
cadena.setPixelColor(4, 0, 0, 0);
}
if(l5){
tone(bru, 1046, 150);
cadena.setPixelColor(0, 0, 0, 0);
cadena.setPixelColor(1, 0, 0, 0);
cadena.setPixelColor(2, 0, 0, 0);
cadena.setPixelColor(3, 0, 0, 0);
cadena.setPixelColor(4, 0, 0, 255);
}
}
void partida(){ //Llegim les lectures dels polsadors i mirem que es compleixi la seqüència del Simon
bool l1 = c1.capacitiveSensor(30) > 4000;
bool l2 = c2.capacitiveSensor(30) > 4000;
bool l3 = c3.capacitiveSensor(30) > 4000;
bool l4 = c4.capacitiveSensor(30) > 4000;
bool l5 = c5.capacitiveSensor(30) > 4000;
bool lectures[] = {l1,l2,l3,l4,l5};
si=simon[x];
if (lectures[si]){
tone(bru, to[si],150);
x++;
}
bool trobat =false; //Busquem si s'apreta algun polsador que no toca
int a=0;
while(!trobat && a < sizeof(lectures)){
if (!a==si){
trobat = lectures[a];
}
}
if (trobat){
tone(bru, 120,1500);
joc=true;
}
}
void mostra(){ //Es mostra la seqüència del Simon
si=simon[x];
if (si==0){
tone(bru, 523,1500);
cadena.setPixelColor(0, 255, 0, 0);
cadena.setPixelColor(1, 0, 0, 0);
cadena.setPixelColor(2, 0, 0, 0);
cadena.setPixelColor(3, 0, 0, 0);
cadena.setPixelColor(4, 0, 0, 0);
}
if (si==1){
tone(bru, 659, 1500);
cadena.setPixelColor(0, 0, 0, 0);
cadena.setPixelColor(1, 255, 255, 0);
cadena.setPixelColor(2, 0, 0, 0);
cadena.setPixelColor(3, 0, 0, 0);
cadena.setPixelColor(4, 0, 0, 0);
}
if (si==2){
tone(bru, 783, 1500);
cadena.setPixelColor(0, 0, 0, 0);
cadena.setPixelColor(1, 0, 0, 0);
cadena.setPixelColor(2, 0, 255, 0);
cadena.setPixelColor(3, 0, 0, 0);
cadena.setPixelColor(4, 0, 0, 0);
}
if (si==3){
tone(bru, 987, 1500);
cadena.setPixelColor(0, 0, 0, 0);
cadena.setPixelColor(1, 0, 0, 0);
cadena.setPixelColor(2, 0, 0, 0);
cadena.setPixelColor(3, 0, 255, 255);
cadena.setPixelColor(4, 0, 0, 0);
}
if (si==4){
tone(bru, 1046, 1500);
cadena.setPixelColor(0, 0, 0, 0);
cadena.setPixelColor(1, 0, 0, 0);
cadena.setPixelColor(2, 0, 0, 0);
cadena.setPixelColor(3, 0, 0, 0);
cadena.setPixelColor(4, 0, 0, 255);
}
cadena.show();
if(x==4){
x=0;
joc =true;
} else {
x++;
}
delay(1000);
}
void setup() {
cadena.begin();
cadena.show();
c1.set_CS_AutocaL_Millis(0xFFFFFFFF); //Assignem un temps de calibració alt
c2.set_CS_AutocaL_Millis(0xFFFFFFFF);
c3.set_CS_AutocaL_Millis(0xFFFFFFFF);
c4.set_CS_AutocaL_Millis(0xFFFFFFFF);
c5.set_CS_AutocaL_Millis(0xFFFFFFFF);
pinMode(bru, OUTPUT);
}
void loop() { //Triem una funció a partir de les variables de control
if (decisio){
if(joc_simon){ //Si es tria el Simon hi ha l'estat mostra i l'estat partida
if (joc){
partida();
} else {
mostra();
}
} else {
piano();
}
} else {
seleccionador();
}
}
En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.