Ayuda Sketch

Hola gente de Yaeltex, me podrian ayudar con la modificación de este sketch que me sirve solo para usar 16 digitales, me gustaria usar un arduino MEGA Y agregarle 16 analogicos, y si me pueden explicar un poco que era lo que se tenia que hacer, les adjunto el Sketch, gracias.
Saludos!

Comments

  • edited October 2016
    Hola Arturo!

    Para que podamos ayudarte, estaría bueno que acotes y expliques mejor el problema o los problemas que tuviste para avanzar. Un foro no es un servicio, si no lugar de ayuda. Quienes te pueden ayudar en el foro no somos solo las personas de Yaeltex, si no cualquier otro miembro de la comunidad. Las reglas del foro están acá.

    Antes que nada, la mejor práctica para participar de un foro es que investigues por tu cuenta y te acerques con dudas puntuales que necesitás resolver para poder avanzar. La autonomía es clave. 

    A su vez, hay otros foros (por ejemplo, de donde sacaste ese código, aunque no ponés la referencia) donde los problemas que tenés pueden ya estar resueltos. ¿Lo buscaste? 

    Estos comentarios absolutamente constructivos, sirven para que el foro sirva como debe ser y para ayudarte a entender como esperamos interactuar acá. 
  • Listo hermano especificare bien el problema que tengo y los intentos que hice, como la discusión que publique anteriormente con la ayuda del hiduino, jamas los vi como un servicio, saludos 
  • Gracias por entender Arturo! :D Saludos!
  • edited November 2016
    Bueno acercandome al problema pude modificar el Sketch sacado de la pagina instructables http://www.instructables.com/id/Arcade-Button-MIDI-Controller/step7/Programming/   
    para poder tener 16 potenciometros en el arduino MEGA, todo marchaba bien, logre habilitar los 16 analogicos hasta que llego la hora de probar en el programa traktor, a la hora de mapear los potenciometros como que no tienen fuerza y se regresan a 0, modifique estas lineas del sketch original

    32 #define ARDUINO
    40 #define ARDUINO_MEGA
    141 #define NUM_AI
    190 #define ANALOGUE_PIN_ORDER A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15
    291 pinMode(analogueInputMapping[i], OUTPUT);

    les adjunto el sketch modificado y las fotos de los problemas que me salen, muchas gracias espero que me puedan ayudar, saludos.
  • edited November 2016
    Hola Arturo,

    No logro entender porque modificaste esas líneas del código.

    Por lo que veo en el original, el código ya está preparado para detectar automáticamente la arduino a partir de tu selección en el IDE (Herramientas -> Placa -> Arduino Mega2560), y con eso definir el numero de entradas digitales y analógicas.

    El codigo original es:
    #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    #define ARDUINO_MEGA
    #elif defined(__AVR_AT90USB646__)
    #define TEENSY_PLUS_PLUS
    #elif defined(__AVR_ATmega32U4__)
    #define TEENSY_2
    #elif defined(__AVR_AT90USB1286__)
    #define TEENSY_PLUS_PLUS_2
    #else
    #define ARDUINO
    #endif
    y vos intercambiaste las líneas 32 por la 40. ¿Por qué hiciste esto? La línea 32 sirve cuando el micro corresponde al de una arduino mega 1280 o 2560, y la línea 40 cuando corresponde a una arduino UNO, o leonardo, por ejemplo, entre otras.

    Lo mismo con la 141. Esa línea en el sketch original define el nro de entradas analógicas para el segundo caso que mencione antes, el de una Arduino UNO.

    Si quisieras modificar el número de entradas digitales o analógicas en una Arduino Mega, lo harías modificando los números en las línes 119 o 121.

    Y en la línea 291, cambiaste el original que define todas las entradas analógicas, justamente como entradas, y vos por lo que veo la modificaste para setearlas como salidas. Tampoco entiendo este cambio.

    Con estos cambios, me parecería extraño que algo funcione de manera correcta.

    Según lo que veo en el instructable, lo que te indica es que lo pruebes tal cual lo descargas, y si seleccionas la placa correcta, debería funcionar, sin tener que modificarlo.

    Con respecto al comportamiento que mencionás, que vuelve a 0 el valor, lo que se me ocurre es que el pin de señal de los potenciómetros esté de alguna manera cortocircuitado a GND.

    Revisa las conexiones, y revisá que lo que hiciste con el código sea correcto, y sino, revertilo y proba de nuevo con el código original.

    Espero que sirva mi comentario.
    Saludos
  • Hola que tal, gracias por la ayuda a las finales logre programar el arduino para que tenga 16 analogicos y 16 digitales, el unico problema que tengo es a la hora que uso traktor los potenciometros  bajan al 100% y suben hasta un 98%, ese problema se podria solucionar cargando Hiduino o tengo que ponerle el valor exacto en la linea 406? ahorita lo tengo asi

    linea 406     tempAnalogueInput = analogRead(analogueInputMapping[i]) / 8;


    cuando uso el programa Hairless midiserial, el value es de 1 hasta el 127 cuando deberia ser de 0 al 127, cual podria ser el problema?

    Saludos!
  • edited November 2016
    Arturo, esa línea hace la conversión del rango de valores que captura el conversor analógico-digital (10 bits de resolución) de la Arduino (0 a 1023) y lo lleva a la resolución de 7 bits que maneja el protocolo MIDI (0 a 127).
    Para eso, lo que hace es directamente dividir por 8.

    Si el valor que lee la Arduino es 0, la división da 0, y si es 1023 -> 1023/8 = 127.8 y el redondeo lo lleva a 127 (porque son enteros).

    Por lo tanto, dudo que el problema sea de software, o al menos no está en esa línea.

    Para descartarlo por completo, yo probaría forzar los pines analógicos a GND. Por ejemplo, cortocircuitando con un cablecito entre las patitas de señal y de GND de los potenciómetros. Si al hacer esto, te llega un mensaje MIDI con valor 0, podemos descartar un problema de software.

    Si no llega 0, y pensando que el software está bien, porque está probado por otras personas a las que les funciona, podría haber un problema en las soldaduras, que hiciera que el contacto entre el GND de la arduino y el de los potenciómetros no sea de buena calidad, por lo que las masas de uno y otro serían distintas, y podría causar un problema como este.

    Otro motivo podría ser el de una falla mecánica en los potenciómetros, que no les permita barrer hasta el extremo. Podés probar otro potenciómetro distinto, si tenés.
  • Cuando realizo el cortocircuito me arroja 1 y nunca el 0
  • edited November 2016
    Eso nos deja con la posibilidad de que sea una mala conexión a masa de los potenciómetros, por alguna soldadura floja o un cable que no hace buen contacto, o, que sea un problema del código.
    En el primer caso, se prueba repasando las soldaduras o cambiando los cables.
    En el segundo, probá comentando el define ANALOGUE_FILTER (línea 208), ya que introduce cierto código que podría estar generando el problema...
    Si sigue tirando 1 después de todo esto, te sugiero que te contactes con quien hizo el código, o que comentes tu problema en el instructable. Ya no se me ocurren más opciones.


Sign In or Register to comment.