ERRATAS

El ser humano comete errores y yo para no ser mucho menos, los cometo también. Voy a intentar añadir aquí las erratas que se han detectado tanto en manuales como en ejemplos para que todo esté lo más actualizado posible. Pido disculpas de antemano y si detectas algo que no esté, solo tienes que decírmelo para actualizarlo.

Página 41. LECTURA LDR.

El principal problema que hay aquí es que puede dar a error la declaración de pines para uso analógico y digital, ya que se ha definido el pin analógico como si fuera digital, fíjate que los pines analógicos si definen con una A delante y en el manual estaba mal, si tienes el último ejemplo deberías de tenerlo bien, sino puedes descargar de aquí el archivo .ino (lo puedes abrir con cualquier lector de texto plano, notepad, notepad++, sublimeText, Visual Studio...etc)

Aprovecho para recordar que los pines analógicos son solo de entrada y los digitales pueden ser de entrada/salida y debemos declarar en el setup como INPUT, OUTPUT...en principio. También que si queremos "simular" o usar salidas analógicas, usamos las que son PWM, ver en el manual la explicación

Archivo/código para arduino: Pincha aquí para descargar

Importante: No te vayas todavía, lo he dejado para el final, porque creo que es interesante, ¿si le quitas la A? ¿realmente pasa algo?... ¿por qué sigue funcionando? Pues muy sencillo, cuando Arduino usa la función analogRead(X) sabe que te estás refiriendo a la entrada analógica, no se va a ir a la digital, solo que es bueno hacer las cosas bien y poner el código correcto. De echo, cuando declarmos const int pinldr=A0...¿cómo que un entero que es numérico admite una letra?, pues porque el compilador de Arduino mira estas cosas y bueno, digamos que le digas una cosa u otra la entiende, pero para facilitar la lectura es mejor escribir la A delante si es analógica

Página 48. LECTURA TMP36.

En el manual pone lo siguiente
int valorLeido = analogRead(sensorPin);
float valorMilivoltios = (valorLeido / 1024.0) * 5000;
float valorCelsius = valorMilivoltios / 10;
Serial.print(valorCelsius);
Serial.println(“gracios Celsius”);

Para que la temperatura corresponda con lo que indica el sensor, aunque En la sección de inicio del curso venía una solución para esto que era lo siguiente


Los cálculos para la lectura real con el sensor TMP36 son los siguientes:
valorTemperatura= analogRead(pinTemperatura);
float voltaje = 5.0 /1024 * valorTemperatura;
float tempFinal = voltaje * 100 -50 ;
Serial.print("Valor Temperatura: ");
Serial.println(tempFinal);

Página 52. if(temp >= limiteInferior && temp <= limiteSuperior) .

Bueno, en el manual pone:
if(temp >= limiteInferior && temp <= limiteSuperior){
 digitalWrite(pinRadiador, HIGH);
 Serial.print(“ Pin a 1 “);
}else{
 digitalWrite(pinRadiador, LOW);
 Serial.print(“ Pin a 0 “);
}
Pongamos valores:
limite inferior= 12 grados
límite superior= 20 grados
Es decir, si la temperatura es MAYOR IGUAL que 12 Y MENOR IGUAL que 20, Entonces activamos radiador. Sino, Apagamos radiador.
Por tanto si en algún momento la temperatura es inferiro a 12 grados, ¡no se activa el radiador!
La idea principal que quería transmitir es no estar encendiendo y apagado cada dos por tres el radiador a una consigna y claro, cuando se llega a la temperatura límite podemos tener problemas. Imagina que queremos mantener la temperatura de la habitación a 22 grados.
Conforme la temperatura vaya subiendo el sensor va dando valores, es decir, cuando vaya llegando a 21 o 22 verás que siempre los valores pueden fluctuar un poco, es decir, 21-22, 22-21 y claro, si ponemos directamente que cuando llegue a 22 grados se pare, estaríamos encendiendo y apagando constantemente. Normalmente se llama histéresis u offset, es decir, tener un límite cuando llega a nuestra consigna, mantenga ese valor subiendo hasta que llegue al límite superior. Fíjate en las imágenes siguientes para que veas la diferencia, de acción directa o con histéresis u offset.

Ahora pongamos una banda diferencial o rango respecto a nuestra consigna, es decir, que no sea un valor solo sino un valor más/menos un rango, offset, diferencia...etc.


Bien, si queremos hacer la acción directa sería algo así:
if (temp < 22){
 digitalWrite(pinRadiadorSalon,HIGH);
}else
 digitalWrite(pinRadiadorSalon,LOW);
}
Si ahora pensamos en nuestra consigna de 22 grados vemos que la cosa cambia, ¿es bueno tener en cuenta esto para todos los sistemas? Pues no, pero a veces es mejor tener ese rango con el límite inferior y superior. Imagina, que pones que suba hasta 23 y que se active cuando esté en 21, tendríamos esos 2 grados de diferencia que nos da un tiempo de respiro a la bomba de calor, radiador...etc.

AYUDA EN LAS ACTIVIDADES

En este curso se ven muchas tecnologías y cosas, y dependiendo de tu experiencia previa habrá algunas actividades que te cuesten más y otras que te cuesten menos, por tanto, voy a intentar exponer en esta sección los pasos o pistas que os ayuden a realizar las actividades, la idea no es teneros bloqueados, es que vayáis avanzando y aprendiendo

Módulo 1. Actividad 1

Aquí tendrás la primera toma de contacto con Arduino, por lo que te recomiendo encarecidamente que intentes repetir por ti mismo/a los ejercicios de ejemplos del curso. Además revisa y reproduce los siguientes vídeos:

Empecemos por crearnos una cuenta de google:

Luego nos identificamos en la plataforma Tinkercad:

Parpadeo de un diodo LED con Arduino usando la plataforma Tinkercad:

Como leer una entrada digital con Arduino usando la plataforma Tinkercad:

Módulo 1. Actividad 2

En esta actividad deberás usar parte de los conocimientos de la actividad anterior más los ejemplos del curso. Te recomiendo que realices esta actividad por partes, es decir, ¿cómo puedo activar un diodo led con un sensor de temperatura?.

Cuando tengas esa parte, realiza otro proyecto donde pruebes con unos interruptores, como accionar unas bombillas con unos relés. El fallo más usual en esta actividad es que intentamos poner el relé encima de una placa protoboard y claro, al estar cortocircuitadas las conexiones como se ve en el manual, no funciona. Para no tener problemas, deja los relés fuera de la placa o ponlos paralelos a la línea central para que no se unan las patillas de cada lado.

También fijate que hay varias posiciones en los relés y no se ve bien las patillas, pero si pasas el ratón por encima te aparece el número y posición. Revisa las especificaciones de la actividad donde se explica para qué es cada terminal o patilla del relé.

Módulo 1. Actividad 3

En esta actividad debes meditar sobre la implantación de proyectos tecnológicos. No es necesario que implementes nada de código, pero si realizar un esbozo o planing de cómo crees que abordarías la situación. Aquí se pide que se tarden al menos 3 días en realizarla, ya que hay que dejar que la idea vaya madurando y seguro que se ocurren mejoras u optimizaciones sobre la misma.

¿Tengo que realizar todos los planos, código y demás especificaciones?.

Deberás realizar un planteamiento del proyecto, investigues en las soluciones existentes y medites cual sería la que se adapta más en cada situación. Pero no es necesario que implementes nada de código.

¿Existe un mínimo o máximo número de hojas?.

No, no existe mínimo ni máximo mientras que quede bien especificada.

Módulo 2. Actividad 1

En esa ocasión tenemos que aprender dos cosas básicas: ¿cómo puedo resolver un problema? ¿cómo puedo representar gráficamente la solución a un problema?

Tenemos que empezar por investigar un poco en cómo funciona un algoritmo, al final es la secuencia de pasos a seguir para resolver un problema y tomar la decisión correcta en cada caso.

¿Porqué no se da el algoritmo directamente para que se implemente?.

He realizado muchos cursos en los que al final el usuario copiaba y pegaba los ejercicios y cuando salía por la puerta si se le propone que lo reproduzca por su cuenta, no lo sabe porque solo ha realizado el "copy+paste". Este ejercicio es una excusa de que investigues cómo se pueden resolver las cosas, y en caso de necesitar ayuda, siempre puedes ponerte en contacto con tu tutor, pero al menos, intenta pensar cómo lo harías.

¿Puedo usar cualquier lenguaje o programa para hacer el ejercicio?.

Si, por supuesto, puedes usar html, javascript, Scratch, java, C++...etc. El lenguaje que te resulte cómodo, lo que me tienes que demostrar es que has creado un flujograma (ya sea en papel escrito o cualquier programa para ello) y has sabido resolver el problema inicial.

En la actividad se habla de una actividad de ejemplo, descárgatela de aquí. y seguro que te viene bien como inicio.

Módulo 2. Actividad 2

Los pasos para resolver esta actividad serán los siguientes:

  • Pon Scrath en tu idioma
  • Abre un archivo nuevo
  • Añade dos personajes
  • Añade un fondo apropiado
  • Pulsa sobre un objeto y mira sus posibilidades, ¿qué hay en movimientos? ¿y en apariencia? ¿y en eventos?..sigue así con todos hasta que veas qué opciones tenemos.
  • A cada elemento se le puede asignar un evento, es decir, que cuando pulse la tecla "X" o la que quiera, "haga algo". Bien, cada personaje tiene una forma de recoger eventos, revisa que puedes "hacer algo" al pulsar la tecla que desees.
  • Tendrás que ir recogiendo cada evento para cada tecla. No olvides que debes elegir los eventos para un objeto, y luego pinchar en el otro y seguir agregando los eventos del resto de teclas
  • ¿Pero qué hago al pulsar una tecla? Bueno, lo más sencillo es "Avanzar X pasos" dependiendo de la velocidad. También hay otro efecto que es "apuntar en dirección" y el objeto apuntará en esa dirección, también puedes girar, mostrar, ocultar...etc.
  • ¿Y que pasa cuando cambio de dirección? El objeto se pone en otra dirección queda raro. Esto es porque, deberías añadir varios "disfraces". Ve al objeto, duplicar los disfraces y en cada disfraz duplicado pon la forma que creas conveniente. En la parte superior hay unos botones de ayuda para voltear/reflejar verticalmente u horizontalmente

Módulo 2. Actividad 3

Lo primero que tenemos que hacer aquí es ir al ejemplo de processing que se llama "Bounce". Archivo --> Ejemplos --> Topics --> Bounce. Esta ejemplo es la base de lo que queremos hacer

primero tenemos que entender este ejemplo, ¿cómo funciona el código creado por otra persona?. Si no lo entendemos, será casi imposible modificar y crear cosas nuevas. Yo cogería papel y lápiz para ir anotando y ayudándome en la interpretación del código. Presta atención a lo siguiente:

  • ¿Dónde se crea la pelota o bola?
  • ¿Cómo puedo controlar la velocidad de la pelota?
  • ¿Cómo controlo el tamaño de la pelota y la pantalla? El valor de la pantalla size se tiene que poner en valor numérico, no le asignes variables ya que es una cosas especial de Processing
  • ¿Cómo controla la aplicación que ha llegado a un borde?
  • Una vez entendido todo esto, pregúntate: ¿cómo podemos crear un rectángulo? Revisa el ejemplo del curso. ¿Cómo podemos controlar que el usuario a pulsado una tecla? Si cada vez que pulse sobre una tecla me desplazo en un sentido, ¿cómo controlo que a llegado al final?

La mayoría de los problemas de la actividad es por no entender los pasos anteriores y descuidar que Fill() lo usemos justo antes de pintar/refrescar el elemento. ¿Sigues con dudas? Vayamos por parte viendo cómo resolver esta actividad.

¿Qué variables tengo en el programa?

Tengo que crear una pantalla, una bola o pelota y una pantalla

¿Cómo creo el rectángulo?

Primero tenemos que entender que un rectángulo tiene un alto y un ancho. Pero cuando lo queremos ubicar en un sitio necesitamos saber donde. Por tanto además de los parámetros ancho y alto, necesitaremos las coordenadas x e y para saber donde lo ponemos. Para ello, lo ideal es crearnos unas variables al inicio y luego crearlo.

Rectángulo: necesitamos alto, ancho, posicionX, posiciónY.

Pelota/bola: necesitamos el radio, posicionX y posiciónY, en verdad lo que hace es pintar una elipse, lo único que no está deformada, por eso el valor para crearlo es: ellipse(xpos, ypos, rad, rad); Fíjate que radio (rad) está igual, si quieres como primera toma de contacto, cambia del ejemplo lo siguiente:

ellipse(xpos, ypos, rad*2, rad); y si ponemos ellipse(xpos, ypos, rad, rad*2);

Bien, como habrás podido comprobar, con esto ponemos deformamos la pelota en el eje de la X(vertical) o en el eje de la Y(horizontal).Ahora vamos a comprobar que queremos una pantalla de 600x400 pixeles:

void setup(){
  size (600, 400);
  ellipseMode(RADIUS);
}

Ahora vamos a crear el rectángulo, vamos hacer una prueba, imagina que queremos un rectángulo de alto 50px y de largo 150px. Recuerda que las variables las solemos declarar arriba, añade este código en la parte superior:

	int anchoRect= 150;
	int altoRect= 10;

¿En qué posición lo ponemos?. Pues por ahora vamos a suponer que está en la mitad de la pantalla, es decir, la mitad del eje X y la mitad del eje Y. Esto sería 300, 200 ya que habíamos puesto size(600,400). ¿dónde "pintamos" el rectángulo? Por lo que deberíamos escribir el código dentro de la función "draw". Si tienes duda, busca donde en el ejemplo pinta la elipse (o pelota en este caso) y ponlo justo antes.

Pruébalo y ahora vamos hacer una prueba más. Escribe esto rectMode (CENTER);. ¿Qué ha pasado, se ha centrado justo en la pantalla, es decir el punto de referencia ahora es el centro del rectángulo.

	rect(300, 200, anchoRect, altoRect);  
	//Como si pusiéramos rect(300, 200, 150, 10); pero usando variables.
	//¿y si agrego dos variables más para las ubicaciones?,
	//Por ejemplo que se llame posXRect y posYRect para la posición del rectángulo. 
	//quedando así rect(posXRect, posYRect, anchoRect, altoRect);

Bien, sabiendo esto, si todo ha ido bien tendremos la pelota botando por la pantalla y el rectángulo justo en el centro. ¿es eso lo que queremos? No, por supuesto, ahora lo que tenemos que ubicar el rectángulo en la parte inferior, ¿cómo sabemos las coordenadas? La X estaría bien, ya que está centrada horizontalmente, pero tendríamos que modificar la coordenada Y, es decir, la vertical. pero ojo, tenemos que ponerlo abajo, pero tenemos que restarle el ancho de la variable. Podríamos poner las variables en la siguiente posición

	int anchoRect= 150;
	int altoRect= 10;
	int posXRect = 300;
	int posYRect = 400-altoRect;

Bien, si ejecutas esto, verás que el rectángulo ha empezado o puesto su esquina superior en las coordenadas que hemos dicho. Pero hay como una especie de "claro" en la parte inferior, te preguntarás ¿porqué no está al fondo del todo si hemos dicho que era el alto de la pantalla menos el alto del rectángulo...

Recuerda que hemos puesto en el modo de rectángulo CENTER, y claro, eso hace que lo ponga en el centro tanto vertical como horizontal, si ahora coges y borras o comentas eso con "//" verás que si se va al fondo.

¿Cómo controlo que el usuario a pulsado una tecla?

Bien, para esto tenemos que crearnos una función (ve al final del código y ponlo justo al final) para detectar que se ha presionado la tecla, y ver si ha pulsado la fecha hacia la derecha o izquierda. Dependiendo de lo que pulse, lo que tendremos que hacer sería mover el rectángulo hacia la derecha (recuerda que teníamos una variable para la posición X del rectángulo) y mover hacia la izquierda.

	void keyPressed() {
		if (key == CODED) {
	   		if (keyCode == LEFT) {
	   			posXRect -= 5;
	   		} else if (keyCode == RIGHT) {
	      		posXRect += 5;
	   		}  
		} 
	}

Recuerda que para que funcione, debes hacer click en la pantalla que ha creado processing para que pueda capturar el evento del teclado, en caso contrario el evento lo coge el sistema operativo. Con esto ya tenemos la pelota botando, y el rectángulo. Además sabemos que el rectángulo se mueve a la derecha o izquierda. ¿Cómo controlo la velocidad del movimiento del rectángulo? Pues fíjate que pone: Si pulso el "keyCode" LEFT, posXRect-=5. Esto significa que la posición ahora donde tiene que pintar el rectángulo es 5 píxeles menos que antes. ¿Y si queremos darle velocidad? Pues solo tendríamos que avanzar en vez de 5px, avanzar 10px.

¿Y sí queremos cambiar el color a la pelota o al rectángulo?

Podemos usar la función fill(). Pero no debemos olvidar que tenemos que poner un fill por cada objeto. Si solo ponemos un fill() solo existirá un color. Prueba el siguiente código ahora

 	fill(0,255,0); //RGB- Ponemos Green al máximo 255
  	rect(posXRect, posYRect, anchoRect, altoRect);
  
  	fill(0,0,255); //RGB- Ponemos Blue al máximo 255
  	ellipse(xpos, ypos, rad, rad);

¿Qué nos quedaría por hacer?

Realmente ya tenemos casi todo lo que se pide en la actividad, solo nos falta: controlar qué hace cada elemento en cada iteración. Es decir, coge papel cuadriculado y bolígrafo y busca los estremos, es decir, ¿cómo rebota la pelota? ¿y si rebota en la parte inferior si coincide con el rectángulo y en caso contrario cuando toque sin dar en la paleta o rectángulo cambie el color de la pelota a rojo, o que pare el juego?

Si has realizado los pasos correctamente tendrías que tener una imagen parecida a esta:

Ayuda actividad M2_3

Es posible que algún paso se nos haya pasado, es muy importante entender la actividad, ya que sino nos va a resultar difícil hacer cosas con processing. Te puedes descargar el ejemplo que se ha hablado en esta ayuda y por supuesto, debes retomar esta actividad y ver qué paso se nos ha pasado. Recuerda lo importante es aprender.

Descarga la ayuda que hemos visto para esta actividad aquí.

Módulo 3. Actividad 1

A continuación podrás ver unos vídeos de ejemplo para que te sirvan para realizar la actividad.

Primer ejemplo: Hola Mundo

Se recomiendo encarecidamente que realices por ti mismo este vídeo, ya que sino no te acostumbraras a la metodología de esta aplicación. En caso que no consigas reproducirlo, aquí tienes el archivo .aia para que lo importes a tus proyectos: Descargar fichero HolaMundo.aia aquí

¿Cómo puedo coger el dato de un usuario para recoger la opción correcta?

Aquí podemos usar muchas técnicas, ya sea usando casillas de verificación, usando botones, label...etc. En el siguiente vídeo puede ver una forma de crear una pregunta y comprobar que es lo que ha respondido el usuario.

Se recomiendo encarecidamente que realices por ti mismo este vídeo, ya que sino no te acostumbraras a la metodología de esta aplicación. En caso que no consigas reproducirlo, aquí tienes el archivo .aia para que lo importes a tus proyectos: Descargar fichero usuarioPregunta.aia aquí

¿Cuál es la forma más fácil de hacer esta actividad?

La forma más sencilla para resolver el problema de la actividad, es agregar las 10 preguntas en la misma pantalla en un Screen o ventana, y cuando le des al botón de COMPROBAR, mirar el número de aciertos y ya decir un mensaje u otro. Simplemente es coger el ejemplo que se da arriba y en vez de buscar hacer una pregunta, hacer 10. Recorrer las preguntas, coger un contador de aciertos, ir aumentado este si es correcta y al final simplemente hacer la cuenta.

Y ¿Cómo controlamos el orden de las preguntas en esta opción? Pues la verdad que en esta opción es muy difícil cambiar el orden de las preguntas, ya que tendríamos que tener por un lado las preguntas anotadas y luego por otro el ordena de salida en pantalla.

¿Qué opción puedo elegir si quiero hacer la actividad completa?

La forma más sencilla en caso que no estés muy acostumbrado/a a usar App Inventor 2 sería coger el ejemplo anterior y crear 10 ventanas/Screen una por pregunta, pero claro, por un lado me interesa que hagas esta opción para que pruebes la navegabilidad de una aplicación a través de varias pantallas, pero por otro, existen opciones más óptimas.

Si usas la opción de "pasar datos por pantalla" debes tener una forma de ir almacenando las respuestas y pasárselas a la siguiente pantalla, de modo que vas pasando el "testigo" de una pantalla a otra. También se puede usar una base de datos de preguntas o un archivo para guardar las cosas.

Las mejores opciones (para un futuro) para usar este tipo de acciones es el uso de listas, base de datos usando una forma de almacenamiento de las preguntas, en App Inventor 2 tenemos varias opciones como son: Ayuda actividad M3_1

¿Cómo puedo crear/usar listas en App Inventor 2?

Imagina que quieras hacer una aplicación que lleve el control de los alumnos que han asistido a un evento, los que han venido a clase (o los que han faltado), una lista de compra...etc. Al final, todos los elementos tienen en común un elemento muy usado en todas las aplicaciones y es las listas. Estas listas sirven para almacenar cosas, y bueno, aunque son de forma temporal, ya que si queremos que permanezca en el tiempo debemos usar bases de datos, archivos u otros medios, nos son útiles para representar los datos indistintamente.

Mira el siguiente ejemplo e intenta reproducirlo por ti mismo/a una vez que lo entiendas. Es vital que te fijes en los pequeños detalles y como verás en el módulo de Sketchware, hay cosas que se hacen de forma distinta. Descargar fichero listaCompra.aia aquí

¿Es posible poner mi aplicación en dos idiomas?

Por supuesto, existen varias formas de hacerlo, aquí vamos a ver una en la que usamos una pantalla inicial, en la primera pantalla preguntamos el idioma. Dependiendo del que elija el usuario guardamos "es" o "en" y lo que hacemos es que ese valor lo vamos pasando por nuestra aplicación, para ello usamos una cosa que se llama [tomar el valor inicial], y si es "es" ponemos el texto en español y si es "en" lo ponemos en inglés.

Puedes descargar el ejemplo de una Calculadora Bilingüe en App Inventor 2: Pulsando aquí para descargar Calculadora_bilingue

¿No hay una forma más fácil de hacerlo?

Si, existen otros métodos que usando el API de google, podemos usar su traductor, el problema de esto, es que en todo momento la aplicación necesita de internet y sino hay internet o este es lento, puede "aburrir" al usuario. Eso sí, como ventaja, podremos traducirlo al idioma que queramos.

Módulo 3. Actividad 2

En esta ocasión debemos usar una aplicación creada en Processing para crear la aplicación de Android. Los pasos a seguir serían los siguientes:

  • Sigue los pasos del manual para instalar el modo Android en Processing. Te recomiendo encarecidamente que uses las versiones que hay en el curso en la sección recursos, ya que hay cosas que cambian de una versión a otra.
  • Una vez termines asegúrate que te funciona el modo Android
  • No consigo poner el modo Android ¿qué hago?. Usa el modo Java, y no te quedes atascado en ninguna actividad, y por supuesto ponte en contacto con tu tutor, seguro que te orientará.
  • ¿Cómo empiezo?. Primero tenemos que entender la actividad, y buscar una solución aproximada, es decir, existe un ejemplo que vimos en el módulo anterior, en la que se mostraban unos cuadrantes "detectaCuadrante" y a partir de ahí debes pensar que lo que se pretende es que lancemos una secuencia de cuadrantes y el usuario detecte esa secuencia. Comparamos lo que ha pulsado el usuario con lo que hemos generado y si coincide, ¡ha acertado! y sino, ¡ha perdido!
  • Otro punto importante que no debes pasar por alto es que al ser un juego debe haber una secuencia a seguir, es decir, existirá un momento de inicio, un momento que muestra la secuencia, otro momento que esperamos que el usuario pulse, otro momento que comprobamos y mostramos el resultado. Dependiendo de este resultado, aumentamos el nivel o no.
  • Bien, una vez que tenemos eso claro tenemos que ir atacando la actividad por partes, es decir, ¿cómo genero un vector? ¿cómo compruebo donde ha pulsado el usuario? ¿cómo creo el orden del juego?
  • ¿Cómo genero un vector?.
    int[] listaParaAcertar = {};
    int[] intentoUsuario={};
    				
  • ¿Cómo relleno/genero el vector inicial que tendrá que repetir el usuario?.
    //Preparamos el vector
    listaParaAcertar=append(listaParaAcertar, int(random(1, 4)));
    				
  • ¿Cómo compruebo donde ha pulsado el usuario?.
    
    //Tenemos que coger el evento del ratón cuando hace click y ver en el cuadrante que lo ha realizado
    //Una vez que lo hemos capturado, añadir al vector o lista de intentos del usuario el valor. Así se el orden
    void mouseClicked() {    
    
        if (mouseX < width/2 && mouseY < height/2) {
    		//Estoy en el primer cuadrante
    		background(255);
    		cuadrante1();
    		intentoUsuario=append(intentoUsuario, 1);	
    
        } else if (mouseX > width/2 && mouseY < height/2) {
    
    		//Estoy en el segundo cuadrante
    		background(255);
    		cuadrante2();
    		intentoUsuario=append(intentoUsuario, 2);
    
      	}// Y así con el resto de los cuadrantes
    	
    	
    }
    				
  • Lo ideal es definir funciones para lo que se repita mucha y así el código es más sencillo
    
    /****************************    FUNCIONES AUXILIARES   **************************/
    //Definimos el Cuadrante 1 como funcion para no repetir
    void cuadrante1() {
    	fill(colorCuad1);
    	rect(0, 0, width/2, height/2);
    }
    
    //Definimos el Cuadrante 2 como funcion para no repetir
    void cuadrante2() {
    	fill(colorCuad2);
    	rect(width/2, 0, width/2, height/2);
    }
    
    //Definimos el Cuadrante 3 como funcion para no repetir
    void cuadrante3() {
    	fill(colorCuad3);
    	rect(0, height/2, width/2, height/2);
    }
    
    //Definimos el Cuadrante 4 como funcion para no repetir
    void cuadrante4() {
    	fill(colorCuad4);
    	rect(width/2, height/2, width/2, height/2);
    }
    				
    
    							
  • Lo ideal es crearte alguna funciones más, del tipo muestraSecuenca(lista)...etc. Es decir, que lo que haga sea mostrar en pantalla la secuencia que ha introducido. Si por ejemplo tengo una lista rellena con 4 cuadrantes aleatorios. Imagina listaParaAcertar={c1, c2, c1, c3}, tendré que hacer:
    • Mostrar c1 (cuadrante 1)
    • Esperar 1 segundo
    • Mostrar c2 (cuadrante 2)
    • Esperar 1 segundo
    • Mostrar c1 (cuadrante 1)
    • Esperar 1 segundo
    • Mostrar c3 (cuadrante 3)
    • Esperar 1 segundo
    • Si metes esto en un for, es recorrer el listado de la longitud que tenga y mostrar el cuadrante correspondiente, esperar un segundo y a por el siguiente...
  • Con esta ayuda creo que ya puedes comenzar ha realizar la actividad por ti mismo. Respecto para probar la actividad y demás, creo que inicialmente es mejor que uses el modo Java en tu ordenador y ya una vez te funcione, lo ejecutes en el smartphone con Android. Es decir, no interesa perder el tiempo en hacer que la aplicación funcione para Android, si no funciona para PC.
  • Puedes usar un emulador o tu propio dispositivo debes tener los drivers del movil instalados, luego tendrás que poner el móvil en modo de purador, autorizar la firma...(tal y como hemos comentado antes con App Inventor 2).
  • ¿Has terminado la aplicación en modo Java y sigue sin funcionar o no consigues instalar el modo Android? No te preocupes, la mayoría de las veces que falla es por temas de incompatibilidades, y bueno incluso a mí me da error cuando uso el programa de la pantalla, llegar a esa conclusión me costó trabajo, ya que normalmente instalamos muchos programas y claro, puede ser que al usar las mismas librerías entren en conflicto. Saber que programa es el que hace que falle es muy difícil. En estos casos, te recomiendo que hagas la aplicación en modo JAVA* y no en Android. La verdad que la única diferencia es el tamaño de pantalla y que se ejecuta en un dispositivo con Android, pero lo importante es el código en Processing, yo es lo que voy a probar, así que sino te funcione, no pierdas demasiado tiempo*.
  • En la carpeta recursos hay un ejemplo que se llama "detectaCuadrante". Partiendo de este ejemplo, tendrás que hacer el "memory". Es decir, necesitarás un orden aleatorio c1 (cuadrante 1), c2 (Cuadrante 2)...etc.
  • Ahora tendrás que almacenar ese orden en una lista, array o vector. Luego grabarás los cuadrantes que ha introducido el usuario. Finalmente lo que haces es comparar un vector o lista con el otro.
  • ¿Cómo hacemos que suba de nivel conforme vaya acertando el usuario?. cuando se usan juegos se suele usar una función o método que sea: reiniciavalores() o subeNievel(). Ahí deberíamos agregar un número más recordar, es decir, si antes hemos generado 4 cuadrantes aleatorios: c1,c2,c1,c3. Ahora generaremos cinco, por ejemplo: c3,c1,c3,c4,c2...y así hasta que queramos. Te puedes ayudar de una variable que sea "nivelUsuario" y así sabes hasta donde ha llegado.
  • * Existe una forma que podemos probar para usar el modo Android con Processing. Si tienes suficiente tiempo para probar, te comento un método alternativo al que hay. Para este paso tendrás que tener un poco de manejo con la instalación de programas. La idea es, descárgate la última versión de Android Studio. Esta versión es con la que se desarrollan aplicaciones para Android de forma nativa. Una vez lo tengas, abre el SDK Manager y asegúrate de tener la versión 4.2 instalada. Una vez que la tengas, créate al menos un ADV (Android Device Virtual) con la versión 4.2. En verdad lo que estamos haciendo es preparando todo el ordenador para hacer aplicaciones con Android Studio. Ahora, la idea es, una vez que tengas esto funcionando correctamente, desinstala y te vuelves a bajar la versión del curso de Processing. Si recuerdas, en uno de los pasos te pedía si queríamos instalar el SDK o localizarlo (es decir, ponerle la ruta). El truco es eso, usar la parte de Android oficial y funcionando; después decirle a Processing donde está (Locale SDK) y ya debería funcionar.

Módulo 3. Actividad 3

Se han creado varios vídeos en la unidad 16 para que te acostumbres al uso de Sketchware. Te recomiendo que primero veas esos vídeos y posteriormente vuelvas aquí. Si lo has realizado, ten en cuenta los siguientes consejos:

El primer problema que nos podemos encontrar en esta actividad es, ¿qué pasa sino tengo un dispositivo en Android?. Se podrían usar emuladores para intentar hacerlo, pero realmente costaría mucho trabajo. En tal caso que no puedas realizar esta aplicación con Sketchware porque no dispongas un dispositivo con Android, realiza la aplicación en App Inventor 2. La ayuda que hay aquí es para Sketchware, pero revísala ya que te vendrá muy bien para resolverla en App Inventor 2.

¿Cómo afrontar esta actividad?

  • Revisa todos los vídeos existentes en esta sección. Intenta hacerlo por tu parte, así cogerás soltura.
  • Piensa primero qué elementos vas a necesitar
  • Busca un ejemplo donde encuentres aquel componente que no sepas como funciona
  • Organiza los elementos de una forma que te sea cómoda. Muchas veces pensamos en aplicaciones complejas y luego vemos que se pueden desarrollar de una forma sencilla.
  • Añade antes de agregar nada un Scroll Vertical y le pones de parámetros/propiedades Layout_Width--> Match_parent (se ajuste al elemento padre) y Layout_heigth --> wrap content (se ajuste al contenido)
  • Agrega una disposición vertical y selecciona Layout_Width--> Match_parent (se ajuste al elemento padre), dentro arrastra un imageView, ve a propiedades y elige las mismas opciones
  • Deberás agregar disposiciones o Layout (vertical/horizontal) según necesites. Si te fijas en la imagenes de los layout verás si los elementos de dentro se organizan de forma horizontal o vertical
  • ¿Cómo hago la parte de las imágenes? Lo más fácil, es decir, tengo varias imágenes: imagenInicio.jpg, imagenError1.jpg, imagenError2.jpg, imagenError3.jpg...etc. Así con los distintos errores. Este trabajo te requiere que cojas una imagen y a partir de ella crees varias. Es más fácil de lo que parece y con el propio editor de imágenes del sistema operativo puedes hacerlo. De todas formas, sino estas muy acostumbrado/a a usar este tipo de programa, puedes descargarte estas imágenes: Descargar imágenes ahorcado aquí
  • Descomprime las imágenes anteriores y pásalas a tu smartphone con Android. Así podrás subirlas al programa desde el gestor de imágenes o Image Manager. Una forma fácil de hacerlo es usar Drive de Google, incorporarlas a tu Galería y manejar las imágenes desde ahí.

    Ayuda actividad M3_3 parte 1 Ayuda actividad M3_3 parte 2 Ayuda actividad M3_3 parte 3

  • Después del imageView que será un contenedor de imágenes, necesitaremos varios textview para mostrar el contenido, por ejemplo: un TextView para la palabra que tiene que adivinar, otro TextView para las palabras que vaya diciendo (para que no se repita), y otro más para mostrar el número de errores acumulados, un EditText, para que el usuario vaya introduciendo las palabras que el crea. Puedes tener una apariencia parecida a esta:

    Ayuda actividad M3_3

  • ¿Cómo creo las palabras? Lo más correcto es usar una lista de elementos
  • Crea una lista de palabras, estás serán las que se les pedirá al usuario. Si esta parte la ves muy complicada, hazlo solo con una palabra. Créate una variable que contenga la palabra a buscar
  • Decide si se le da una pista (primera letra) o no.
  • Puedes crear una lista para cada cosa, es decir, una lista para el listado de palabras que vas a tener, otra lista para el listado de letras acertadas, otra para el listado de letras erróneas. Existe una función que devuelve la longitud de la lista (lenght), por tanto, la longitud de cada lista representa el error/acierto del usuario
  • Dentro de la sección texto, hay una forma de unir y buscar palabras
  • Tendremos que crear varias lista y jugar con ellas, por ejemplo, la lista de palabras, la lista de letras, de guiones, variables para llevar las cuentas...etc

Te sientes preparado/a. Es normal que al inicio creas que es difícil, pero partiendo de saber cómo funciona el juego, solo es buscar la forma de intentar reproducirlo. ¿Necesitas más ayuda? En caso que necesites más ayuda se ha elaborado un documento guía para realizar esta actividad, lo importante es que al final se haga el trabajo y sobre todo que practiques, en este caso con Sketchware.Descargar aquí una ayuda adicional

Módulo 4. Actividad 1

Los pasos del manual están bien, pero viendo la última versión se amplia un poco la información. Lo ideal es instalar virtual box y cargar la última máquina de raspbian para que vaya mucho mejor. Quemu es un emulador fácil de usar, ya que es llegar, pinchar y ya lo tienes, pero no es el mejor. Si quieres ampliar más cosas y probar por ejemplo cómo enviar correos sigue los pasos que te explicaremos a continuación.

Puedes ver este vídeo que lo explica paso a paso. INSTALAR RASPBIAN EN VIRTUAL BOX

Lo primero que quiero decirte es que esta actividad no podemos ejecutarla tal cual como en los ejemplos si no tenemos una placa física, no tenemos un emulador como pasa con Arduino y Tinkercad, por lo que nos tendremos que resignar a:

  1. Probar el uso de una máquina vírtual y un gestor, Virtual Box, VMWare..etc.
  2. Ver los elementos que nos ofrece y si estás usando la última versión que tienes Scratch 2
  3. Si te gustan los retos, prueba a mandar los correos con mutt, eso sí, no te leerán los valores de los sensores, pero al menos podrás comprobar que con tu raspberry podrías mandar mensajes, pero recuerda, al no tener nada conectado a los puertos GPIO, no recibiras mensajes, por lo que solo se aconseja usar el comando mutt así:

sudo apt-get update
sudo apt-get upgrade
sudo reboot
sudo dpkg --configure -a

------------------------------------
Vamos a isntalar las VBox Additions, que tiene opciones de configuración, pantalla completa, copiar y pegar entre la máquina host y la creada...etc. Hay que hacer unos pasos.
Apago la máquina, selecciono la máquina -> Configuración -> Sistema -> Almacenamiento -> Selecciono en Controlador IDE el Cdroom -> Me voy a la derecha y selecciono en el icono que aparece un CDROOM -> luego en el desplegable -> Seleccionar un archivo de disco y busco donde tengo el archivo ISO de la imagen, básicamente lo que hacemos así es meter un ISO dentro del CDROOM virtual, ¿para qué? para que cuando esté dentro de la máquina esté ese CD metido y así pueda instalarlo.
------------------------------------
sudo apt-get install build-essential 
sudo apt-get install linux-headers-$(uname -r) dkms 
sudo apt-get install module-assistant 
sudo apt-get install xserver-xorg xserver-xorg-core
sudo m-a prepare
sudo reboot
sudo apt-get install mutt
mkdir –p ~/.mutt/cache/headers
touch ~/.mutt/certificates
sudo sh ./VBoxLinuxAdditions.run
sudo apt-get install gpgsm
sudo geany /home/pi/.muttrc

------------------------------------
Ahora debemos asegurarnos que tenemos puesto en ese fichero lo siguiente:
------------------------------------
set from = "tucorreo@gmail.com"
set realname = "Notificacion Raspberry Casa"
set imap_user = "tucorreo@gmail.com"
set imap_pass = "XXXXXX"
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set postponed = "+[Gmail]/Drafts"
set header_cache =~/.mutt/cache/headers
set message_cachedir =~./mutt/cache/bodies
set certificate_file =~/mutt/certificates
set smtp_url = "smtp://tucorreo@gmail.com@smtp.gmail.com:587"
set smtp_pass = "XXXXXX"

-----------------------------------
¡¡Ojo!! Revisa esta línea es tu correo completo seguido de @smtp.gmail.com:587
-----------------------------------
Luego si has usado el correo de gmail, tenemos que configurar el acceso de aplicaciones menos seguras. Para activar esta configuración de manera sencilla solo tendrás que seguir el siguiente enlace: Activar cuenta

Ya podríamos hacer:
echo "Hola soy la raspberry de tu casa" | mutt -s "probando" aquiCorreoDestinatario@tudominio.es

Módulo 4. Actividad 2

Usando los ejemplos del curso, el manual y las actividades realizadas deberías poder abordar esta actividad sin problemas, en caso que tuvieras cualquier duda, ponte en contacto con tu tutor.

Módulo 4. Actividad 3

Usando los ejemplos del curso, el manual y las actividades realizadas deberías poder abordar esta actividad sin problemas, en caso que tuvieras cualquier duda, ponte en contacto con tu tutor.

Esta web utiliza cookies, puedes ver nuestra la política de cookies, aquí Si continuas navegando estás aceptándola. Pulsa para quitar este mensaje
Política de cookies +