Author Topic: Nuevos bloques  (Read 1144 times)

pacomus

  • Newbie
  • *
  • Posts: 3
    • View Profile
Nuevos bloques
« on: 2016-December-05 09:27:10 pm »
Hola a todos

Publico este mensaje porque quiero contribuir al desarrollo de este proyecto como agradecimiento a lo mucho que me ha ayudado esta herramienta en el trabajo con mis alumnos. He hecho algunos bloques adicionales y otros que tengo en desarrollo y me gustaría ofrecerlos para que sean añadidos a Visualino, si es que consideráis que son útiles.

Los bloques que ahora mismo tengo ya terminados tienen que ver con la gestión básica de interrupciones en Arduino. Estos bloques implementan las funciones interrupts(), noInterrupts(), attachInterrupts() y detachInterrupts() de la librería estándar de Arduino. También he incluido un bloque para poder definir variables globales de tipo volatile, ya que deben declararse así cuando se cambian dentro de una función de tratamiento de interrupciones. A mí me resultan muy útiles las interrupciones porque gracias a ellas se pueden hacer programas en los que Arduino debe controlar varias cosas, por ejemplo la pulsación de interruptores sin riesgo a que estas pulsaciones sean ignoradas, además me permite explicar a mis alumnos una aproximación básica al concepto de gestión de interrupciones en los microcontroladores. También he hecho un sencillo manual donde se explica cómo utilizar estos bloques.

Puesto que nunca he utilizado github, me gustaría saber cómo puedo incorporar estos bloques al proyecto o dónde los tengo que enviar para que podáis incorporarlos vosotros.

Un saludo y enhorabuena por el trabajo realizado.

Víctor R. Ruiz

  • Administrator
  • Jr. Member
  • *****
  • Posts: 91
    • View Profile
Re: Nuevos bloques
« Reply #1 on: 2016-December-06 04:47:02 pm »
¡Hola! Qué bueno, los nuevos bloques siempre son bienvenidos :-D

El proyecto donde están alojados es http://github.com/vrruiz/roboblocks Prueba a crearte una cuenta en Github y a hacer una copia de ese proyecto. Luego subes los cambios y tienes que hacer un "pull request" al original. Suena difícil pero sólo la primera vez. A mi me gusta porque queda claro quién envió qué.

De ahí se "compilan" los bloques (que ya no es tan trivial) y el fichero JavaScript generado se mueve al proyecto de Visualino, en formato comprimido.

pacomus

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: Nuevos bloques
« Reply #2 on: 2016-December-06 09:08:09 pm »
Hola de nuevo

Bien, he hechado un vistazo a la documentación de github y creo que ya se cómo se hace, a primera vista no parece complicado. El problema que me he encontrado ahora y no le veo solución es que, como he tenido que crear una nueva categoría de bloques y asignarle un color nuevo, resulta que ese color nuevo me aparece en los bloques, pero en la categoría me aparece un color diferente. También me pasa lo mismo en la categoría Servo, se me han cruzado los colores con la nueva categoría que he creado. He puesto imagen donde se ve el problema:



He revisado todo y no se dónde está el problema. En roboblocks/src/constants.js he añadido las dos últimas líneas con el color de la categoría:

// RGB block colors
RoboBlocks.LANG_COLOUR_BQ = '#D04141';
RoboBlocks.LANG_COLOUR_ZUM = '#CC7B44';
RoboBlocks.LANG_COLOUR_SERVO = '#CECE42';
RoboBlocks.LANG_COLOUR_LCD = '#ACCE42';
RoboBlocks.LANG_COLOUR_CONTROL = '#44CC44';
RoboBlocks.LANG_COLOUR_LOGIC = '#42CE91';
RoboBlocks.LANG_COLOUR_MATH = '#42CBCE';
RoboBlocks.LANG_COLOUR_TEXT = '#42A3CE';
RoboBlocks.LANG_COLOUR_COMMUNICATION = '#4263CE';
RoboBlocks.LANG_COLOUR_ADVANCED = '#9142CE';
RoboBlocks.LANG_COLOUR_VARIABLES = '#B244CC';
RoboBlocks.LANG_COLOUR_PROCEDURES = '#CE42B3';
RoboBlocks.LANG_COLOUR_INTERRUPTS = '#ACCE42';
RoboBlocks.setColors = function(colorArray) {
    RoboBlocks.LANG_COLOUR_BQ = colorArray[0];
    RoboBlocks.LANG_COLOUR_ZUM = colorArray[1];
    RoboBlocks.LANG_COLOUR_SERVO = colorArray[2];
    RoboBlocks.LANG_COLOUR_LCD = colorArray[3];
    RoboBlocks.LANG_COLOUR_CONTROL = colorArray[4];
    RoboBlocks.LANG_COLOUR_LOGIC = colorArray[5];
    RoboBlocks.LANG_COLOUR_MATH = colorArray[6];
    RoboBlocks.LANG_COLOUR_TEXT = colorArray[7];
    RoboBlocks.LANG_COLOUR_COMMUNICATION = colorArray[8];
    RoboBlocks.LANG_COLOUR_ADVANCED = colorArray[9];
    RoboBlocks.LANG_COLOUR_VARIABLES = colorArray[10];
    RoboBlocks.LANG_COLOUR_PROCEDURES = colorArray[11];
    RoboBlocks.LANG_COLOUR_INTERRUPTS = colorArray[12];

En roboblocks/src/index.html también he añadido la categoría:

            var colors = [
                "",
                RoboBlocks.LANG_COLOUR_PROCEDURES,
                RoboBlocks.LANG_COLOUR_CONTROL,
                RoboBlocks.LANG_COLOUR_LOGIC,
                RoboBlocks.LANG_COLOUR_MATH,
                RoboBlocks.LANG_COLOUR_VARIABLES,
                RoboBlocks.LANG_COLOUR_TEXT,
                RoboBlocks.LANG_COLOUR_COMMUNICATION,
                RoboBlocks.LANG_COLOUR_ZUM,
                RoboBlocks.LANG_COLOUR_BQ,
                RoboBlocks.LANG_COLOUR_ADVANCED,
                RoboBlocks.LANG_COLOUR_LCD,
                RoboBlocks.LANG_COLOUR_SERVO,
                Roboblocks.LANG_COLOUR_INTERRUPTS
            ];

En todos los archivos de la carpeta roboblocks/lang he añadido también el nombre a la categoría (ejemplo de es-ES.js):

        //interrupt blocks :
        LANG_CATEGORY_INTERRUPTS: 'Interrupciones',
        LANG_INTERRUPTS_STATE: 'Establece estado de las interrupciones a ',
        LANG_INTERRUPTS_STATE_ENABLED: 'HABILIADO',
        LANG_INTERRUPTS_STATE_DISABLED: 'DESHABILITADO',
        LANG_INTERRUPTS_STATE_TOOLTIP: 'Habilita o deshabilita las interrupciones. Algunas funciones no podrán usarse mientras que las interrupciones estén deshabilitadas. Utilizar solo para secciones críticas del programa.',
        LANG_INTERRUPTS_ATTACH: 'Asociar la función ',
        LANG_INTERRUPTS_ATTACH_PARAM2: 'en el modo ',
        LANG_INTERRUPTS_ATTACH_PARAM3: 'con la interrupción del pin digital',
        LANG_INTERRUPTS_ATTACH_LOW: 'BAJO',
        LANG_INTERRUPTS_ATTACH_CHANGE: 'CAMBIO',
        LANG_INTERRUPTS_ATTACH_RISING: 'SUBIENDO',
        LANG_INTERRUPTS_ATTACH_FALLING: 'BAJANDO',
        LANG_INTERRUPTS_ATTACH_PROCEDURE: 'func_sin_retorno',
        LANG_INTERRUPTS_ATTACH_TOOLTIP: 'Especifica la función que se va a ejecutar cuando se produzca la interrupción en el pin especificado.',
        LANG_INTERRUPTS_DETACH: 'Desasociar la interrupción del pin digital',
        LANG_INTERRUPTS_DETACH_TOOLTIP: 'Desactiva la asociación de la interrupción especificada en el pin. Cuando se active ese pin, ya no se ejecutará la función asociada.'

 Y en los archivos de los bloques he puesto también el nombre a la categoría (ejemplo de roboblocks/src/blocks/interrupt_attach):

...
Blockly.Blocks.interrupt_attach = {
    // Variable getter.
    category: RoboBlocks.locales.getKey('LANG_CATEGORY_INTERRUPTS'), // Variables are handled specially.
    helpUrl: RoboBlocks.URL_INTERRUPTS,
    init: function() {
...

Sospecho que el problema viene del archivo roboblocks/src/constants.js, donde en el atributo setColors los valores de los colores están en un array que tiene un orden diferente, pero no entiendo cuál es el lugar en el que debo colocar la nueva categoría.

Víctor, a ver si me puedes aclarar esto o alguien que haya creado nuevas categorías.

Gracias!

EDITO:

Ya he encontrado el problema, he tenido que cambiar el orden en el archivo roboblocks/src/index.html y se queda de la siguiente forma. He solucionado el problema, pero todavía sigo sin entender por qué tengo que poner ese valor en ese lugar!!!

            var colors = [
                "",
                RoboBlocks.LANG_COLOUR_PROCEDURES,
                RoboBlocks.LANG_COLOUR_CONTROL,
                RoboBlocks.LANG_COLOUR_LOGIC,
                RoboBlocks.LANG_COLOUR_MATH,
                RoboBlocks.LANG_COLOUR_VARIABLES,
                RoboBlocks.LANG_COLOUR_TEXT,
                RoboBlocks.LANG_COLOUR_COMMUNICATION,
                RoboBlocks.LANG_COLOUR_ZUM,
                RoboBlocks.LANG_COLOUR_BQ,
                RoboBlocks.LANG_COLOUR_ADVANCED,
                RoboBlocks.LANG_COLOUR_INTERRUPTS,
                RoboBlocks.LANG_COLOUR_LCD,
                RoboBlocks.LANG_COLOUR_SERVO,
            ];

« Last Edit: 2016-December-06 09:33:04 pm by pacomus »

Víctor R. Ruiz

  • Administrator
  • Jr. Member
  • *****
  • Posts: 91
    • View Profile
Re: Nuevos bloques
« Reply #3 on: 2016-December-06 10:48:00 pm »
¡Menudo curro! Enhorabuena. Para que a los bloques se les asigne color, hay que añadirlos a esa matriz manualmente.  Por cierto, ten cuidado en esta línea, hay un error ortográfico:

LANG_INTERRUPTS_STATE_ENABLED: 'HABILIADO',

En cuanto eso lo tengas, me envías un "pull request" para poner el código en el repositorio principal :)

pacomus

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: Nuevos bloques
« Reply #4 on: 2016-December-08 09:35:56 am »
Hola

Gracias por la corrección, la verdad es que estaba un poco "habiliado" con tanto código!

Ya he subido los cambios y he realizado el pull-request.

He incluido en el código el enlace a un pdf con ayuda sobre el uso de los bloques de interrupciones. Dejo también aquí el enlace directo:

https://drive.google.com/open?id=0B8SXZjdcc9F9ZjBVTDRtOV8wd2s

Chao!

Víctor R. Ruiz

  • Administrator
  • Jr. Member
  • *****
  • Posts: 91
    • View Profile
Re: Nuevos bloques
« Reply #5 on: 2016-December-08 06:41:45 pm »
Gracias. Reviso y fusiono los cambios lo antes posible :)