logo

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,


Hola amigos!

Hoy traemos un tutorial donde aprenderemos a modificar S4A para adaptarlo a nuestras necesidades en caso de que necesitemos, por ejemplo, más salidas digitales.

Además, si tenéis alguna duda acerca de este tutorial, podéis debatirla en el nuevo foro de Arduteka, el cual aspira a convertirse en medio generador de una auténtica comunidad de S4A en habla hispana.

EN ESTE ENLACE podéis postear todas vuestras dudas!! Y si tenéis interés por otras artes, también hay apartados para dudas de Arduino, Impresión 3D, Procressing, Robótica y Minigeeks entre otros!

Poco a poco, y con vuestra ayuda, le iremos dando la forma adecuada. ;)

Pero antes que nada, veamos por que es posible!

¿Que es S4A?

S4A es una aplicación de software libre desarrollada en Squeack, que a su vez está basado en Smaltalk.

Como es software libre puede modificarse y así obtener una aplicación derivada que se adapte mejor a nuestras necesidades.

S4A es la aplicación que corre en nuestro PC que a su vez está conectado con la placa Arduino, normalmente, a través de un cable USB.

En la placa Arduino está corriendo un programa, llamado firmware, escrito en lenguaje Arduino.

El código escrito en S4A (el script) está en constante comunicación con la placa Arduino, cada 75 milisegundos se intercambian información:

  • S4A informa a la placa las salidas que deben estar activas: digitales, analógicas, de servo-motor, etc.
  • Arduino (el firmware) informa a S4A del estado de los sensores: pines “entrada analógica”, “entrada digital”, etc.

En este tutorial veremos cómo modificar S4A y cómo modificar el firmware para que la comunicación funcione.

El software original S4A tiene definidos unos pines como salidas digitales, otros como salidas analógicas y otros como salidas motor y servo-motor.

En la placa Ardunio podemos definir las 12 salidas como queramos: por ejemplo podríamos definir todos los pines como salidas digitales, o como entradas digitales, o cualquier otra combinación.

Ejemplo de  modificación de S4A

Como ejemplo de proyecto que necesita una configuración de pines diferente a la que ofrece S4A originalmente, podemos imaginar que queremos hacer un script que, dado un número active un conjunto de leds que corresponda con la representación binaria de ese número.

Con la versión actual de S4A, sólo podemos usar las tres salidas digitales y las tres salidas analógicas con las que podemos representar un número con valor entre 0 y 63.

Imaginemos que queremos poder representar un número entre 0 y 1000, para esto necesitaríamos 10 leds.

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,

En la modificación que vamos a mostrar  transformaremos las tres salidas analógicas y las cuatro salidas motor en salidas digitales.

En este vídeo podemos ver como queda.

Código S4A

Para modificar el código S4A necesitamos conocer como movernos entre las clases y sus métodos.

Acceso al código:

Para ver el código fuente de S4A arrancaremos S4A y manteniendo pulsada la tecla mayúsculas pulsaremos con el ratón en el menú Archivo, la penúltima opción es salir de modo usuario, la seleccionamos y aparecerá una recuadro blanco alrededor de la ventana S4A.

Haciendo click con el botón adecuado (normalmente el botón derecho) del ratón aparecerá este menú desplegable:

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,

Seleccionando la opción open y dentro de esta la opción browser, llegamos al código fuente que tiene esta pinta:

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,

Vemos cuatro cajas, en la izquierda están las clases, en la siguiente están los Sprites (que como no se lo que son mejor no digo nada), la tercera contiene los grupos de métodos y la cuarta (la de la derecha) contiene los métodos de la clase.


En este caso tenemos seleccionada la clase S4A (casi todo el código de modificación de Scratch para crear S4A está en este clase).

En la caja de la derecha está seleccionado el método digitalOn y en la parte inferior vemos el código de este método.

Este método activa una salida digital de la placa Arduino.

Podemos comprobar que recibe un argumento (t1 que es el pin seleccionado en S4A el 13 el 11 o el 10) y lo que hace es llamar al método actuatorStateAt pasando dos argumentos: t1 y el número 1, esto en Arduino pondrá un 1 en la posición del array states asignada al pin 13 (o al 11 o al 10 según t1).

States  es el array donde se guardan los estados de los pines.

Los pines que se utilizan en Arduino con S4a van del 4 al 13 que se corresponden con las posiciones 0 a 9 en el array states.

Todo muy fácil!

En el tutorial sobre el código fuente de Scratch  tenéis más información sobre las clases y métodos.

Modificar el código

Para modificar el código sólo hay que editarlo cambiando lo que queramos.

Una vez modificado el método deberemos comprobar que no hay errores de sintaxis, para esto haremos click con el botón adecuado en la caja de código para obtener el menú desplegable:

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,

Y pulsaremos sobre la opción accept. Si hay errores nos los mostrará y habrá que corregirlos.

Cuando la modificación ha sido aceptada podemos guardar el código (haciendo click en la ventana blanca que rodea la ventana de S4A para obtener el menú desplegable) y seleccionando la opción save.

Esta opción nos generará un par de Warnings al no encontrar el fichero de fuentes (Squeak cannot locate the sources file…) ni el fichero de cambios (Squeak cannot locate the changes file…).

Pulsando sobre OK continua el proceso.

Ahora ya podríamos acceder a otro método (otra clase) para seguir con las modificaciones.

Finalmente, cuando terminemos todas las modifiaciones, pulsaremos (con la tecla mayúsculas pulsada) sobre el menú Archivo para ir a la opción Entrar a modo usuario y cerrar S4A.

Si todo ha ido bien tendremos una versión de S4A modificada con funcionalidades diferentes.

Al grano

Queremos modificar S4A para que podamos utilizar 10 salidas digitales y quitar las 4 de motor y las tres salidas analógicas.

Lo primero utilizaremos una copia de S4A para mantener el original y actuaremos sobre esta copia. A esta copia la llamaremos S4A-sd.

Abrimos S4A-sd, salimos de modo usuario (Mayúsculas – Archivo), entramos en browser (botón adecuado-en margen blanco-open-browser).

Las modificaciones que tenemos que hacer son pocas y sencillas:

  • Eliminar las salidas (analógicas y de motor) que no se podrán emplear. Empezamos por el método blockSpecs del Sprite ArduinoScratchSpriteMorph de la clase S4A (hay que pulsar sobre el botón class y no sobre el instance) como se ve en la imagen:

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,

  • Este método es el encargado de mostrar las piezas de puzzle, aquí borraremos las líneas correspondientes a analog, motor y servomotor (marcadas en color en la imagen). Una vez guardados los cambios podemos ver que si en el menú desplegable elegimos la opción open-S4A ya no veremos las piezas de salida analógica ni las de motor.
  • Ampliar el listado de salidas en las opciones digital encendido y digital apagado. Esto lo encontramos en el método digitalPinNumbers del Sprite ArduinoScratchSpriteMorph de la clase S4A:

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,

  •  Escribiremos en la caja inferior todos los pines que faltan para estén del 4 al 13.

 

Una vez aceptados y guardados los cambios podemosver que S4A tiene la apariencia de la imagen.

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,

No es necesario hacer más cambios, si recordamos el código del método digitalOn lo único que hacia es pasar los argumentos t1  y el número 1 para digitalOn y el número 0 para el método digitalOff.

Con esta modificación este método tiene más opciones  en el primer argumento (ahora puede pasar 10 valores diferentes frente a los 3 de antes).

Ahora queda modificar el firmware de Arduino para que pueda reconocer estos nuevos valores de este método.

El proceso de cambio se pueden ver en este vídeo.

This movie requires Flash Player 9

Modificación del firmware Arduino

Las modificaciones que vamos a hacer dentro en el código del firmware son muy pocas.

Primero veremos la parte del código que gestiona las salidas digitales:

Tenemos la función configurePins, en la que vamos a cambiar la configuración de los pines del array outputs que están como: “a (analógico)” , “c (motor)” o “s (servo)”, vamos a cambiarlas a  “d (digital)”

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,

Como vemos, hemos convertido todos los pines desde el 4 hasta el 13 en digitales.

S4A_code, S4A, Arduino, Firmware, Modificar, Salidas, digitales, analógicas, Scratch, Tutorial, proyecto, ejemplo, cambiar, código, foro, Español,

Podríamos modificar las funciones que controlan las salidas para eliminar los condicionales de las salidas a, c y s (analógicas, motor y servo) pero no es necesario, esas condiciones no se cumplirán nunca y no hace falta modificar nada.

Con esto ya tenemos todas las modificaciones necesarias para utilizar la versión S4A con 10 salidas digitales.

Espero que os haya servido!!

Te esperamos en el foro!!

http://www.arduteka.com/foro

 

  1. Borja Responder

    Oso ondo! Muchas gracias… Vaya tela…
    Magnífico post… Aunque no sé si sere capaz!

  2. Roberto Responder

    Hola Borja, no tengo palabras para agradecerte este interesante documento.
    Este tutorial va a dar mucho juego.
    Gracias+++

  3. Pato Acevedo Responder

    Menudo tutorial te has mandado hombre, te lo agradezco mucho. Si pudieras dar un poco de luz sobre el manejo de servomotores con s4a te estaría muy agradecido, ya que los chavales se me están aburriendo de encender y apagar leds,

  4. Kannan Responder

    when i start to run the two servo motor , S4A says”Board disconnected or Battery run off”. i tried to disconnected , updated drivers and connected again but it showed again same problem. Pls tell some solutions .

  5. German.toro Responder

    Muchas gracias, muy bueno el documento.
    Saludos.

Déjanos un comentario!

*

captcha *