arduino,cursos,guias,manuales,tutoriales,ejemplos,ejercicios,codigos,electronica,circuitos,montajes,placas,componentes,noticias,actualidad,libros,descargas,pruebas,courses, guides,manuals,tutorials,examples,exercises,code,electronic,circuits,assemblies,boards,components,news, books,downloads,tests.

No puedo continuar con este proyecto

Supongo que muchos ya os habréis dado cuenta de que este blog está desactualizado desde hace unos años. No puedo seguir con el por muchos motivos, entre ellos, que ha pasado tanto tiempo que no toco arduino y la electronica que los pocos conocimientos que tenía los he ido olvidando. El trabajo y los estudios me tienen demasiado ocupado como para ponerme a montar circuitos y dedicar horas a diseñar lo que tenía en mente. No digo que lo deje para siempre, porque en el fondo me gustaría mucho terminar este proyecto, pero por el momento va a ser imposible. Dejo el blog en linea para aquellos que estáis empezando con arduino, pues creo que las pocas explicaciones que pude poner hace 2 años pueden servir de guía para empezar con esta maravillosa placa. Si algún día puedo retomar este proyecto, tener por seguro que lo pondré en este blog.

Saludos a todos/as.

Edito y agrego:

Gracias a la web de Taringa, un portal de compartir, se me han terminado de quitar las ganas que tenía de continuar con este proyecto. Si al poco tiempo que tengo le sumamos que un portal que no me merece respeto ninguno, se dedica a copiar el trabajo de los demás y si le pides que los borres te mandan a contactar con una empresa para que presentes pruebas de derechos de copyright, comprenderéis que a uno se le bajen los ánimos. Un visitante copió todas las páginas del blog y las subió al portal mencionado anteriormente. Ahora sale en Google la página de Taringa que contiene el contenido de mi blog en primera posición pasando el blog original a los últimos resultados de la primera página o a la segunda página. Una cosa es compartir y otra cosa es robar contenidos. Puedo comprender y comprendo que hay mucha gente que necesita software o libros para poder formarse, para avanzar en este mundo de la informática y pagar todas las licencias es difícil, por lo que puedo comprender que algunos usuarios pirateen. No es mi caso, pues siempre he comprado lo que he necesitado, aunque algunas veces haya descargado algún libro de internet, pero después he ido a la tienda y he comprado el libro cuanto que he tenido dinero. Ahora tengo una buena colección de libros y todo el software de mi ordenador legal, pues gracias al software libre no tengo necesidad de usar programas de pago y como el sistema operativo viene incluido en el ordenador puedo usar Windows. Volviendo al tema de lo que ha sucedido, me parece vergonzoso que un usuario se dedique a copiar una información de un lugar de libre acceso y la copie en Taringa con el descaro de decir en los comentarios que estaba cansado de hacer tutoriales de arduino toda la tarde, como diciendo que los había escrito el. Desde aquí un saludo al usuario, a Taringa y a todos los familiares de los mismos.

Ahora si puedo afirmar que no voy a continuar con el proyecto. Disculpar las molestias.

A LA IZQUIERDA DE LA PAGINA ESTAN TODOS LOS ENLACES QUE FORMAN ESTE BLOG PARA FACILITAR LA NAVEGACION


Buscar en este blog

jueves, 30 de julio de 2009

MIDI - CAPITULO 3 - ENVIANDO SEÑALES MIDI VARIABLES CON DOS POTENCIOMETROS


Hola de nuevo. He avanzado un poco mas y, por si no se te ocurre como colocar dos potenciómetros, en este ejercicio vamos a llevar la tarea a cabo.

Tengo que comentar que si he tardado tanto en ponerlo es porque yo he tenido problemas a la hora de recibir los datos en el ordenador, y en algunas ocasiones giraba el potenciómetro 0 y cuando veía los datos en el programa s2midi me salía entre medio una nota del potenciómetro 1. En este código que coloco mas adelante no me ha pasado, pero me extraña, porque he modificado varias veces los datos y siempre me pasaba lo mismo. No se, quizás me faltaba algo por cambiar en el código.

Edito: EL MOTIVO POR EL QUE ME SALIA UNA NOTA DEL POTENCIOMETRO 1 ENTRE MEDIO DE LA DEL POTENCIOMETRO 0 Y VICEVERSA, ES DEBIDO A LA TOLERANCIA DEL POTENCIOMETRO.

- ¿QUE QUIERE DECIR? PUES QUE SI EL POTENCIOMETRO TIENE UNA TOLERANCIA DEL 5% SIGNIFICA QUE SU RESISTENCIA PUEDE VARIAR LIGERAMENTE EN CUALQUIER MOMENTO.

- ¿COMO ME AFECTA ESTO? PUES AFECTA PORQUE AL VARIAR LIGERAMENTE CAMBIA EL VALOR Y EL PROGRAMA ENTIENDE QUE HEMOS GIRADO EL POTENCIOMETRO, POR ESO ENVIA ESA NOTA.

- ¿COMO SE PUEDE ARREGLAR? PUES LIGERAMENTE SE PUEDE ARREGLAR AL ESTILO CHAPUZA, VARIANDO EL VALOR DE LAS VARIABLES analogSmoothx = 2; por analogSmoothx = 6; CON ESTO ES MAS DIFICIL DE QUE SALGA ESA NOTA, PERO TIENE UNA DESVENTAJA, TENEMOS QUE GIRAR MAS EL POTENCIOMETRO PARA QUE SE DETECTE EL CAMBIO.

- ¿HAY OTRA SOLUCION? SI, PUEDES GASTARTE MAS DINERO EN COMPRAR POTENCIOMETROS DE MAS CALIDAD, O PUEDES ESPERAR A QUE ENCUENTRE UN CODIGO QUE EVITE ESTO, PERO DE MOMENTO NO SE ME OCURRE NINGUNO.

ES TODO.

Bien, la colocación de dos potenciómetros es igual que cuando colocamos uno, solo que la patilla central del segundo potenciómetro tiene que ir a 1 analógico.


Después subimos el siguiente código a la placa y listo.

int midiChannel0 = 1;
int analogPin0 = 0;
int lastAnalog0 = 0;
int analogSmooth0 = 2;

int midiChannel1 = 1;
int analogPin1 = 1;
int lastAnalog1 = 0;
int analogSmooth1 = 2;

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

void loop()
{
Potenciometro0();
Potenciometro1();
}

void Potenciometro0()
{
int reading0 = 0;
reading0 = analogRead(analogPin0)/8;
if (abs(reading0-lastAnalog0) > analogSmooth0)
{
lastAnalog0 = reading0;
controlChange(midiChannel0,10,reading0);
}
}

void Potenciometro1()
{
int reading1 = 0;
reading1 = analogRead(analogPin1)/8;
if (abs(reading1-lastAnalog1) > analogSmooth1)
{
lastAnalog1 = reading1;
controlChange(midiChannel1,127,reading1);
}
}

void controlChange(byte channel, byte controller, byte value)
{
midiMsg(channel+0xB0, controller, value);
}

void midiMsg(byte cmd, byte data1, byte data2)
{
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
}

Cualquier programador normalito sabrá que este código se puede reducir mucho, pero después de lo que he sudado para llegar aquí no tengo muchas ganas de ponerme a recortarlo. Se que es muy importante recortar código para que tengamos espacio suficiente en la placa donde meterlo, pero por el momento no tengo ganas de complicarme mas la existencia. Por suerte, la versión duemilanove con el ATMEGA 328 tiene mucho espacio, y Serra cuestión de tiempo que tengamos placas con mucho mas donde almacenar, de hecho, ya hay placas arduino con muchísimo mas espacio y mucha mas velocidad de procesamiento, pero no podemos comprarnos una cada dos por tres.

Seguimos. He puesto en color rojo el código que forma parte del potenciómetro 0 (que es el 1º potenciómetro) y en verde el del potenciómetro 1 (que es el 2º potenciómetro). El resto del código es común a los dos y creo que con esto deberías saber como conectar mas de dos.

Ahora pasamos a describir el código.

Como puedes observar, al principio del código tenemos las cuatro variables que son del potenciómetro 0 y después las otras cuatro que son del potenciómetro 1.

A continuación configuramos el puerto serial a 31250.

Seguimos con el código y entramos en la función loop(), donde llamamos primero a la función Potenciometro0(). Una vez allí leemos el potenciómetro y si lo hemos variado llamamos a la función controlChange y le pasamos el canal (1), la nota (10) y por ultimo el valor del potenciómetro. La función controlChange() hace una pequeña modificación de los datos recibidos y llama a midiMsg() pasándole los datos y esta ultima coloca los 3 datos en el puerto usb uno detrás de otro. Aquí es donde S2Midi entra en acción, convirtiendo los 3 datos en señal midi y enviándolos al puerto midi virtual.

(En el código del articulo anterior olvide comentaros que la división entre 8 que se hace en la línea "reading0 = analogRead(analogPin0)/8;" es para convertir el valor del potenciómetro en un numero entre 0 y 127, es decir, en el volumen de la nota)

¿Por donde íbamos? Si, ya me acuerdo, habíamos terminado de comentar lo que pasaba si se había movido el potenciómetro 0. Si no lo hubiéramos movido sencillamente hubiéramos vuelto a la función loop() y seguiríamos por la segunda instrucción, que llama a la función Potenciometro1() y hace exactamente lo mismo que en la anterior, es decir, si varia, llama a controlChange pasándole los datos, después controlChange llama a midiMsg tras hacer una modificación de los datos y esta por ultimo envía las tres señales al puerto usb.

Todo esto sucede a una velocidad bastante alta y se estaría ejecutando constantemente para comprobar si hay algún cambio en los potenciómetros.

Por ultimo quiero indicaros que en este código estamos mandando los datos del siguiente modo:

Potenciometro0 -- Canal 1 -- Nota 10 -- Valor del potenciometro0/8
Potenciometro1 -- Canal 1 -- Nota 127 -- Valor del potenciometro1/8

Por esto, podemos observar que en la línea controlChange(midiChannel0,10,reading0); de la función Potenciometro0() estamos mandando la nota 10, en cambio, en la de la función Potenciometro1() mandamos la nota 127.

Es todo por hoy. Saludos y por favor, si alguien me lee que me deje un comentario, aunque sea un saludo o algo para saber que no estoy escribiendo para que nadie me lea :D

9 comentarios:

  1. ¡Hola! Acabo de encontrar tu blog por casualidad. Soy nuevo en esto del arduino (apenas hace una semana que lo tengo) y estoy intentando aprender un poco sobre la marcha, ya que no tengo ni idea de electrónica y muy poca idea de programación. Simplemente quería animarte a que sigas escribiendo este fantástico blog que seguro que me ayuda a mí a otros más a aprender a sacarle partido a este aparatito. Tengo muchos proyectos pensados para el mío, si quieres ya te comentaré.

    Un saludo

    Tory

    ResponderEliminar
  2. Muchas gracias Tory por tu comentario, no te preocupes, la programacion parece complicada al principio, pero basicamente todos los lenguajes de programacion acaban siendo variables, funciones e instrucciones y cuando le cojas el truco seras capaz de hacer cosas bastante interesantes. Saludos.

    ResponderEliminar
  3. Vaya, que respuesta más rápida!. Si, más o menos entiendo los códigos, pero escribirlos desde cero me resulta muy complicado.

    Saludos de nuevo

    Tory

    ResponderEliminar
  4. hola q tal
    oie si kiero hacer
    q se vea en la pc
    seria mejor con matlap o labview?

    ResponderEliminar
  5. Agradezco Muchísimo tu trabajo con este Blog:D
    Gracias de antemano.!

    Una pregunta; como hago para que me funcionen en el mismo montaje y Sketh un potenciómetro y un botón.. no e podido..:S Te agradecería si me respondieras :D

    ResponderEliminar
  6. Gracias por tu Blog
    Un saludo

    ResponderEliminar
  7. Buenas!! primero felicitaciones por la explicación!
    Soy novatillo en esto y despues de conseguir que apretando un boton desde arduino, pudiera hacer como si apretase un boton del programa Zulu dj, inmediatamente quise encontrar la manera de modificar el volumen mediante un potenciometro, pero no lo consiguo, con tu codigo del capitulo 2 tengo que cambiar :
    Serial.print(cmd, BYTE);
    Serial.print(data1, BYTE);
    Serial.print(data2, BYTE);
    por:
    Serial.write(cmd);
    Serial.write(data1);
    Serial.write(data2);
    porque no me deja compilar.
    hecho esto en el MIDI-OX por ejemplo me sale:
    1 2 F9 -- -- -- --- undefined
    1 2 FD -- -- -- --- undefined
    solo me sale estas lineas moviendo el potenciometro...
    alguna idea?

    ResponderEliminar
    Respuestas
    1. Yo también tuve qué cambiar a Serial.write, ésto se cambió a partir del Arduino 1.0, creo. Sí me funcionó, pero en lugar de MidiYoke y S2Midi, usé LoopBe1 y Hairless MIDI. Prueba con esos, igual y te funciona también.

      Eliminar
  8. Hola. A mi me estaba pasando lo mismo, entonces baje el arduino 0023 y cargue el codigo sin problema y sin cambiar nada.

    ResponderEliminar