Author Topic: Nuevo bloque... Espero que esté bien  (Read 3389 times)

agrgal

  • Newbie
  • *
  • Posts: 19
    • View Profile
Nuevo bloque... Espero que esté bien
« on: 2016-February-20 06:14:01 pm »
Dejo una compilación de roboblocks con un nuevo bloque. Espero que me haya salido bien. He hecho algunas pruebas y va. Se trata de poder escribir en un pin de forma digital pero por valor, bien escribiendo un 0, un 1, o una variable; el bloque que hace eso sólo permite escribir "en modo diseño". Si se escribe un número mayor que cero, le calcula el resto de la división entre 2 (0 ó 1) y si es negativo lo convierte a cero.

Espero vuestras opiniones. Un saludo. Anexo también la carpeta de lenguas porque he creado una nueva variable,         LANG_ADVANCED_INOUT_DIGITAL_WRITE_GET_VAR: 'el valor', y la he puesto en todos los idiomas... También los ficheros en javascript y en c.

agrgal

  • Newbie
  • *
  • Posts: 19
    • View Profile
Re: Nuevo bloque... Espero que esté bien
« Reply #1 on: 2016-February-20 06:14:38 pm »
Y el resto...

Por cierto. Que después de leer un poco supongo que hay que mandar las modificaciones a través de github, pero no sé cómo hacerlo. Otra cosa que he estado intentando es crear un bloque, de prueba, en una categoría nueva, pero no encuentro la forma. Simplemente añadiendo un nombre nuevo a la categoría de un elemento, se incluye uno nuevo en la lista, pero ni le asigna imagen, ni sé asignar el color, etc.

Perdona mi ignorancia. Siempre quedan cosas por aprender...  ;D
« Last Edit: 2016-February-21 08:25:29 pm by agrgal »

Víctor R. Ruiz

  • Administrator
  • Jr. Member
  • *****
  • Posts: 91
    • View Profile
Re: Nuevo bloque... Espero que esté bien
« Reply #2 on: 2016-February-21 11:13:12 pm »
¡Ala! Ya veo que te has lanzado, ¡felicidades! :) Le echo un vistazo lo antes posible y comento.

Víctor R. Ruiz

  • Administrator
  • Jr. Member
  • *****
  • Posts: 91
    • View Profile
Re: Nuevo bloque... Espero que esté bien
« Reply #3 on: 2016-February-23 04:10:26 pm »
Dejo una compilación de roboblocks con un nuevo bloque. Espero que me haya salido bien. He hecho algunas pruebas y va. Se trata de poder escribir en un pin de forma digital pero por valor, bien escribiendo un 0, un 1, o una variable; el bloque que hace eso sólo permite escribir "en modo diseño". Si se escribe un número mayor que cero, le calcula el resto de la división entre 2 (0 ó 1) y si es negativo lo convierte a cero.

Pues acabo de revisarlo. ¡Felicidades, ya es usted un hacker de Visualino! :) El código que has enviado tiene comentada la línea donde calcula el módulo, pero se corrige fácilmente.

¿Tienes un caso de uso particular para este bloque? Se parece mucho al que tiene las opciones HIGH/LOW.

agrgal

  • Newbie
  • *
  • Posts: 19
    • View Profile
Re: Nuevo bloque... Espero que esté bien
« Reply #4 on: 2016-February-24 10:19:42 pm »
Gracias Víctor. Pero no creo que llegue ni a la "h" de hacker...  :) Siempre queda mucho por aprender...   ;)

Te mando un par de ejemplos. A mí me parece un bloque fundamental porque no podía escribir en un pin en función de una variable. No podía, por ejemplo, escribir el resultado de una función lógica (al menos sin tener que escribir un engorroso "if" en algún lado). Te dejo un par de ejemplos. En el segundo, se consigue el parpadeo sin función delay, lo cual permite realizar otra operación "en paralelo".

Por otra parte, sí, la línea está comentada pero porque el módulo se calcula en un bloque if posterior. No se calcula aquí:

Quote
    /* value_num = b['pin'] + '%2';  /* Permite asegurar valores entre 0 y 1 */ 

Sino aquí (lo que sí creo es que a lo mejor debería escribir algún paréntesis por claridad??) ...

Quote
    /* Comprobar si es o no número, y actuar en consecuencia */
    if (parseInt(value_num)>0) {
      value_num = (parseInt(value_num) % 2).toString();
   } else if ((value_num == "0") || parseInt(value_num)<0)  {
      value_num="0";
   } else {
      value_num = b['pin'] + '%2';
                /* Quizás sería mejor....  value_num = '(' + b['pin'] + ')%2';  */
   }

La función reconoce si es un número positivo y calcula el módulo 2 (0 ó 1), si negativo lo deja en cero, y si es una variable le añade "%2".

Además comentarte que acabo de impartir un curso de robótica (robot PRINTBOT EVOLUTION) a compañeros profesores de tecnología en el CEP de Jerez y han halagado mucho el programa. Les parece una buena opción para "quitarle hierro" a la programación de Arduino cara a los chavales de 4º ESO. Mejor que el IDE de Arduino.

Si puedo, me gustaría hacer algunos bloques más (con tu permiso y aprobación); pero sí me gustaría que me comentaras cómo añadir una nueva categoría de bloques. Lo estuve tanteando y no doy con la tecla. Si me guías, te lo agradecería.

Y en otro hilo, tengo que mandarte un problema que he tenido al instalar Visualino 0.7 con Ubuntu 14.04 64 bits.

Saludos. Gracias de nuevo.

Víctor R. Ruiz

  • Administrator
  • Jr. Member
  • *****
  • Posts: 91
    • View Profile
Re: Nuevo bloque... Espero que esté bien
« Reply #5 on: 2016-March-09 01:25:46 am »
Siento la tardanza. Gracias por comentar los casos de uso, me convenciste de su utilidad :)

Ya tengo el bloque en el repositorio de Roboblocks. Hice solo unas pequeñas modificaciones. Simplifiqué la generación de código. Moví la operación de módulo a la plantilla, así que se hace siempre (¡a ver si aprendes a manejarte en github!). Además, te pegaste un currele, que vi las traducciones del bloque a todos los idiomas. Yo suelo hacer las de español e inglés, y dejo las otras a los traductores (marcando las líneas como pendientes para traducir).

En fín, enhorabuena. Y reitero mis disculpas por el retraso en incluir el bloque.

Víctor R. Ruiz

  • Administrator
  • Jr. Member
  • *****
  • Posts: 91
    • View Profile
Re: Nuevo bloque... Espero que esté bien
« Reply #6 on: 2016-March-09 02:04:26 am »
Si puedo, me gustaría hacer algunos bloques más (con tu permiso y aprobación); pero sí me gustaría que me comentaras cómo añadir una nueva categoría de bloques. Lo estuve tanteando y no doy con la tecla. Si me guías, te lo agradecería.

Como habrás visto, cada bloque tiene asignada un campo de categoría, así que, en teoría, con asignarle ahí un valor, debería valer. Por ejemplo category: RoboBlocks.locales.getKey('LANG_CATEGORY_NUEVA'). A partir de esas definiciones, la lista de categorías se genera en tiempo de ejecución en src/blockly.extensions.js. Una parte que no tengo clara es cómo se ordenan. Esta es una parte.

Además de las categorías hay una matriz que define sus colores en roboblocks/src/roboblocks.js. Échale un ojo a RoboBlocks.setColors = function(colorArray) en ese fichero. Y hay otra matriz similar en el src/index.html. Los colores se asignan por orden, así que es importante que haya concordancia entre el número de categorías y el número de colores.

Si tienes alguna duda más al respecto, te la intento resolver.