Go Down

Topic: [Ayuda] Nuevo por aqui y con un proyecto: Trackpad + "Sintetizador" (Read 599 times) previous topic - next topic

Jul 24, 2011, 11:02 pm Last Edit: Jul 26, 2011, 03:21 am by Manuelalo Reason: 1
Hola, mi nombre es Manuel y soy de Mexico y pues he decidido unirme a esta comunidad, aunque ya me habia registrado antes no habia participado pero ahora que traigo un proyecto entre manos quisiera entrar aqui para pedir un poco de ayuda y tambien ver si puedo ser de ayuda para otros, ya he hecho otros proyectos con arduino pero muy basicos, le entiendo algo a la electronica, tambien me meto directamente con el hardware pero esto se me escapa un poco. Bueno basicamente mi proyecto es este (No soy muy bueno creando codigo pero si puedo mas o menos entender uno ya existente y modificarlo para integrarlo en otra parte, se que no es mucho pero por algo tengo que empezar :) ) :

Sintetizador manipulado mediante un trackpad
La idea principar de el proyecto es generar sonido tomando las coordenadas que me da el trackpad y pasarlas a un generador de sonido para que asigne tono y frecuencia dependiendo de las variables que le doy. Y pues le saque el trackpad a una laptop y anduve buscando los esquematicos y viendo de que es cada pin del integrado y pude conectarlo para que me diera lectura de las coordenadas con el siguiente codigo (ninguno de los codigos que pondre son propiedad mia, solo los modifique o fusione si acaso, tambien adjuntare las librerias adicionales para que quede mas claro):
Code: [Select]
/*
Grabs data from the trackpad, and sends it out down the serial line.

You also need the PS2 library, available from here:
http://www.arduino.cc/playground/ComponentLib/Ps2mouse
*/
#include <ps2.h>
#include <Trackpad.h>

//nasty but oh so convenient macro for debugging!
#define DUMP(d) Serial.print(#d ": ");\
Serial.print(d);Serial.print(" ");\
Serial.print(d);Serial.println()

/*
6 is the clock pin, 5 is the data pin. Use whatever you like.
*/
Trackpad t(6,5);

void setup()
{
Serial.begin(9600);
}

/*
The getNewPacket() function returns a pointer, so that we're not throwing big
structs around. Just get at the data using the packet->x syntax. If you want to
keep a packet, you'll have to copy it, because it'll have changed by the time you've
called getNewPacket() again.
*/
void loop()
{
packet_t * packet;
packet = t.getNewPacket();

DUMP(packet->x);
DUMP(packet->y);
DUMP(packet->z);
DUMP(packet->w);
       DUMP(packet->leftButtonDown);
       DUMP(packet->rightButtonDown);

Serial.print("\n\n");
}


Despues de eso lo que hice es que me mostrara en una LCD 16x2 las coordenadas de los 2 ejes y otras 2 variables que me entrega el trackpad:
Code: [Select]
#include <ps2.h>
#include <Trackpad.h>
#include <LiquidCrystal.h>

#define DUMP(d) Serial.print(#d ": ");\
Serial.print(d);Serial.print(" ");\
Serial.print(d);Serial.println()

Trackpad t(7,6);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{
       lcd.begin(16, 2);
Serial.begin(9600);
}


void loop()
{
packet_t * packet;
packet = t.getNewPacket();

DUMP(packet->x);
DUMP(packet->y);
DUMP(packet->z);
DUMP(packet->w);
       lcd.setCursor(0, 0);
       lcd.print("Eje x:");
       lcd.setCursor(6, 0);
       lcd.print(packet->x);
       lcd.setCursor(11, 0);
       lcd.print(packet->w);
       lcd.setCursor(0, 1);
       lcd.print("Eje y:");
       lcd.setCursor(6, 1);
       lcd.print(packet->y);
       lcd.setCursor(11, 1);
       lcd.print(packet->z);
Serial.print("\n\n");
}


Y ya teniendo las variables pense que seria sencillo implementarlas en un generador de sonido y vi este:
Code: [Select]
#include <arduinOSC.h>

int frequency = 100;
int startFrequency = 200;
int stopFrequency = 2000;
int maxDist = 500;
int minDist = 80;
int distance = 0;
int distanceMap = 0;
int frequencyStep = 10;

bool increasing = true;

void setup(void){
 arduinOSC::initOSC(WAVEFORM_SQUARE);
}

void loop(){
 distance = analogRead(0);
 if(distance>maxDist)maxDist = distance;
 if(distance<minDist)minDist = distance;
 stopFrequency = map(distance,minDist,maxDist,2000,220);
 if(stopFrequency>1600){
    arduinOSC::setOSCFrequency(0);
 }
 else
 {
     arduinOSC::setOSCFrequency(frequency);
   
     for(int i=0;i<1000;i++){
       __asm__("nop");
     }
     if(frequency>stopFrequency&&increasing)increasing=false;
     if(frequency<startFrequency&&!increasing)increasing=true;
     if(!increasing) frequency-=frequencyStep;
     else frequency+=frequencyStep;
 }
}


Y segun yo junte los 2 codigos, pero creo que meti la pata mucho xD (pense que tenia el codigo de cuando los junte pero no) y el caso es que no hacia nada, y todo lo anterior lo habia hecho hace meses y ahora volvi a tratar de hacerlo de nuevo pero ahora si pidiendo ayuda, y encontre este otro generador de sonido:
http://code.google.com/p/tinkerit/wiki/Auduino

Y ahora lo unico que hice es tratar de meter el codigo que me mostraba las coordenadas en la LCD junto con el codigo anterior sin que interactuaran pero lo unico que consigo es que por el lado del sintetizador solo lee el primer valor de la resistencia variable con la que lo manipulo, y por el lado de la LCD y del trackpad me muestra bien los valores por unos segundos y luego se queda pegado, lo que me hace ver que hay un conflicto y me imagino por donde va el problema pero como me falta mucho de programacion no veo bien como arreglarlo.

Pues en resumen seria eso  :smiley-sweat: y tambien quisiera saber si alguno de ustedes conoce algun buen tutorial para aprender a programar desde cero en arduino y que sea bueno. Saludos a todos y disculpen si dije muchas tonterias pero quiero aprender mas porque me gusta mucho la electronica (futuro Mecatronico :) ) :smiley-sweat:

Go Up