Ejercicio del lunes pasado resuelto

12 views
Skip to first unread message

Syvic

unread,
Aug 7, 2011, 8:18:34 AM8/7/11
to arduino...@googlegroups.com
Buenas!

Como ma�ana continuamos con las clases, y creo que deber�a haber dado
tiempo a realizar el ejercicio propuesto, os paso el link a la
resoluci�n del ejercicio.

El enunciado era b�sicamente hacer un programa (y su hardware
correspondiente) que permitiera servir como interface para el t�pico
programa de la tele de preguntas y dos concursantes. Al jugador que
pulse primero el bot�n se le encender� su led durante 5 segundos,
indicando que ha sido m�s r�pido en pulsar el bot�n que el otro jugador.

En la p�gina de fritzing pod�is encontrar dos ficheros. El concurso1.gz
contiene tanto los dise�os en breadboard, como los esquem�ticos y la PCB
del proyecto. En concurso1.pde est� una de las posibles soluciones del
c�digo:

http://fritzing.org/projects/curso-arduino/

Si todav�a no ten�is el programa resuelto, os aconsejo que lo intent�is
por vuestra cuenta antes de mirar la soluci�n.

Nos vemos ma�ana a las 18h directamente en el Patio Maravillas (En
cuanto confirmen que podemos estar ah� ma�ana)

Ciao!

Fran Montes

unread,
Aug 7, 2011, 8:38:07 AM8/7/11
to arduino...@googlegroups.com
Hola,

Yo había hecho algo parecido, pero veo que tiene un problema, ya que se da prioridad a uno de los pulsadores sobre el otro. En este caso siempre se comprobaría el pulsador del jugador 1 antes que el pulsador del jugador 2 ¿Existe alguna instrucción para poder comprobar cual de los dos pulsadores ha sido apretado primero y que devuelva el id del pulsador que se ha apretado?

Un saludo.
Fran Montes

El 7 de agosto de 2011 14:18, Syvic <sy...@synusia.es> escribió:
Buenas!

Como mañana continuamos con las clases, y creo que debería haber dado tiempo a realizar el ejercicio propuesto, os paso el link a la resolución del ejercicio.

El enunciado era básicamente hacer un programa (y su hardware correspondiente) que permitiera servir como interface para el típico programa de la tele de preguntas y dos concursantes. Al jugador que pulse primero el botón se le encenderá su led durante 5 segundos, indicando que ha sido más rápido en pulsar el botón que el otro jugador.

En la página de fritzing podéis encontrar dos ficheros. El concurso1.gz contiene tanto los diseños en breadboard, como los esquemáticos y la PCB del proyecto. En concurso1.pde está una de las posibles soluciones del código:

http://fritzing.org/projects/curso-arduino/

Si todavía no tenéis el programa resuelto, os aconsejo que lo intentéis por vuestra cuenta antes de mirar la solución.

Nos vemos mañana a las 18h directamente en el Patio Maravillas (En cuanto confirmen que podemos estar ahí mañana)

Ciao!

Jorge Pintado

unread,
Aug 7, 2011, 8:58:15 AM8/7/11
to arduino...@googlegroups.com
Hola a todos,

muchos no me recordaréis, porque fui a la presentación, pero no estoy asistiendo al curso. Sin embargo, intentaré colaborar por aquí en lo que pueda.

Fran, tienes que tener en cuenta que la Arduino UNO (creo que es la que tenéis todo) creo recordar que tiene un reloj de 16 MHz, lo que significa que cada instrucción con retardo del orden de nanosegundos (~60ns si consideramos que cada instrucción se corresponde con una instrucción en ensamblador). Eso significa que por lo general, y en este caso en particular, no debes preocuparte por esto.

Sin embargo, sí existen formas de hacer lo que pretendes, mediante interrupciones. Te recomiento que leas esta pequeña entrada en la documentación de Arduino, en la que se explica cómo hacerlo con un ejemplo sencillo: http://www.arduino.cc/en/Reference/AttachInterrupt .

Un saludo,
Jorge Pintado.

Fran Montes

unread,
Aug 7, 2011, 9:01:19 AM8/7/11
to arduino...@googlegroups.com
Hola Jorge,

Gracias por tu respuesta. Tenía presente que la diferencia en tiempo entre pulsar uno y otro iba a ser mínima, pero estaba seguro que debía de existir algo como lo que has enlazado. Era justamente eso en lo que estaba pensando. Voy a echarle un vistazo a ver que tal.

Un saludo.


El domingo 7 de agosto de 2011, Jorge Pintado <j.pin...@gmail.com> escribió:
> Hola a todos,
> muchos no me recordaréis, porque fui a la presentación, pero no estoy asistiendo al curso. Sin embargo, intentaré colaborar por aquí en lo que pueda.
> Fran, tienes que tener en cuenta que la Arduino UNO (creo que es la que tenéis todo) creo recordar que tiene un reloj de 16 MHz, lo que significa que cada instrucción con retardo del orden de nanosegundos (~60ns si consideramos que cada instrucción se corresponde con una instrucción en ensamblador). Eso significa que por lo general, y en este caso en particular, no debes preocuparte por esto.
> Sin embargo, sí existen formas de hacer lo que pretendes, mediante interrupciones. Te recomiento que leas esta pequeña entrada en la documentación de Arduino, en la que se explica cómo hacerlo con un ejemplo sencillo: http://www.arduino.cc/en/Reference/AttachInterrupt .
> Un saludo,
> Jorge Pintado.
>
> El 7 de agosto de 2011 14:38, Fran Montes <fran...@gmail.com> escribió:
>>
>> Hola,
>> Yo había hecho algo parecido, pero veo que tiene un problema, ya que se da prioridad a uno de los pulsadores sobre el otro. En este caso siempre se comprobaría el pulsador del jugador 1 antes que el pulsador del jugador 2 ¿Existe alguna instrucción para poder comprobar cual de los dos pulsadores ha sido apretado primero y que devuelva el id del pulsador que se ha apretado?
>> Un saludo.
>> Fran Montes
>>
>> El 7 de agosto de 2011 14:18, Syvic <sy...@synusia.es> escribió:
>>>
>>> Buenas!
>>>
>>> Como mañana continuamos con las clases, y creo que debería haber dado tiempo a realizar el ejercicio propuesto, os paso el link a la resolución del ejercicio.
>>>
>>> El enunciado era básicamente hacer un programa (y su hardware correspondiente) que permitiera servir como interface para el típico programa de la tele de preguntas y dos concursantes. Al jugador que pulse primero el botón se le encenderá su led durante 5 segundos, indicando que ha sido más rápido en pulsar el botón que el otro jugador.
>>>
>>> En la página de fritzing podéis encontrar dos ficheros. El concurso1.gz contiene tanto los diseños en breadboard, como los esquemáticos y la PCB del proyecto. En concurso1.pde está una de las posibles soluciones del código:
>>>
>>> http://fritzing.org/projects/curso-arduino/ <http://fritzing.org/projects/curso-arduino/>

victorelec14

unread,
Aug 7, 2011, 9:04:57 AM8/7/11
to arduino...@googlegroups.com

fran nose si te refieres a algo como un switch ?? y luego de acuerdo al caso (case 1 o case 2) encender el led correspondiente ?

el Swich no tiene prioridades sino de a lo que salga va al case que corresponda ;)

El 07/08/2011 14:38, "Fran Montes" <fran...@gmail.com> escribió:
> Hola,
>
> Yo había hecho algo parecido, pero veo que tiene un problema, ya que se da
> prioridad a uno de los pulsadores sobre el otro. En este caso siempre se
> comprobaría el pulsador del jugador 1 antes que el pulsador del jugador 2
> ¿Existe alguna instrucción para poder comprobar cual de los dos pulsadores
> ha sido apretado primero y que devuelva el id del pulsador que se ha
> apretado?
>
> Un saludo.
> Fran Montes
>
> El 7 de agosto de 2011 14:18, Syvic <sy...@synusia.es> escribió:
>
>> Buenas!
>>
>> Como mañana continuamos con las clases, y creo que debería haber dado
>> tiempo a realizar el ejercicio propuesto, os paso el link a la resolución
>> del ejercicio.
>>
>> El enunciado era básicamente hacer un programa (y su hardware
>> correspondiente) que permitiera servir como interface para el típico
>> programa de la tele de preguntas y dos concursantes. Al jugador que pulse
>> primero el botón se le encenderá su led durante 5 segundos, indicando que ha
>> sido más rápido en pulsar el botón que el otro jugador.
>>
>> En la página de fritzing podéis encontrar dos ficheros. El concurso1.gz
>> contiene tanto los diseños en breadboard, como los esquemáticos y la PCB del
>> proyecto. En concurso1.pde está una de las posibles soluciones del código:
>>

Fran Montes

unread,
Aug 7, 2011, 9:20:59 AM8/7/11
to arduino...@googlegroups.com
Hola Victor,

Con un switch tendría el mismo problema, seguiría teniendo prioridad uno de los casos sobre otro. Ya que después de entrar en un case se hace break para continuar con la ejecución del programa.

Lo que tenía en mente era más bien una interrupción como ha indicado Jorge, que se escuche una señal en un pin y sea capaz de lanzarse la ejecución de una función.



El domingo 7 de agosto de 2011, Fran Montes <fran...@gmail.com> escribió:
> Hola Victor,
>
> Con un switch tendría el mismo problema, seguiría teniendo prioridad uno de los casos sobre otro. Ya que después de entrar en un case se hace break para continuar con la ejecución del programa.
>
> Lo que tenía en mente era más bien una interrupción como ha indicado

Fernando F. Gallego

unread,
Aug 7, 2011, 9:24:15 AM8/7/11
to arduino...@googlegroups.com

Chicos,  es la primera clase, tampoco os compliqueis.

--
Enviado desde mi nexus one

Syvic

unread,
Aug 7, 2011, 10:06:46 AM8/7/11
to arduino...@googlegroups.com
Totalmente de acuerdo con lo que comenta Jorge.

A las velocidades a las que se ejecuta el código es realmente indiferente qué comprobación se hace primero, podemos asumir que es virtualmente simultánea (en caso de que ningún jugador presione nada, claro)

Pero si queremos que sea realmente simultáneo tenemos dos opciones:

1.- La que propone Jorge, el uso de interrupciones y
2.- Lectura completa del PORTB

La primera opción es muy válida, pero las interrupciones son un recurso muy escaso. Sólo hay dos fuentes externas de interrupción en estas placas y para este desarrollo las habríamos utilizado las dos. (http://arduino.cc/es/Reference/Interrupts)

La segunda opción (polling del puerto completo) es muy similar a la que se emplea en el código de ejemplo pero en lugar de evaluar el estado de un pin, miras 8 a la vez. Con unas sencillas operaciones booleanas y un par de comparaciones puedes evaluar qué botón se pulsó primero. (http://www.arduino.cc/en/Reference/PortManipulation)

De cualquier forma, tanto la opción de interrupciones, como la de lectura del puerto completo, se escapan del objetivo de esta primera práctica, así que asumiremos que todo transcurre simultáneamente...

Ciao!

Syvic

unread,
Aug 7, 2011, 10:09:38 AM8/7/11
to arduino...@googlegroups.com
Exactamente,

Además hay que tratar de seguir la filosofía KISS (http://es.wikipedia.org/wiki/Principio_KISS)

Si un problema se puede resolver de forma sencilla, no lo compliquemos.

Para desarrollos posteriores si que nos veremos obligados a emplear cosas más complejas pero mientras tanto... KISS

Ciao!

Fernando F. Gallego

unread,
Aug 7, 2011, 4:47:22 PM8/7/11
to arduino...@googlegroups.com
Yo veo que voy a necesitar mas cables porque ya tenía un kit y solo tengo 5 cables, ¿hay alguna tienda en Madrid para comprar mas cablecitos de esos? Gracias

2011/8/7 Syvic <sy...@synusia.es>



--
--

victorelec14

unread,
Aug 7, 2011, 5:06:56 PM8/7/11
to arduino...@googlegroups.com
las mas cerca a sol son Conectrol http://www.conectrol.com/  que esta por principe de vergara, y en la calle del barquillo (por banco de españa) , lo que nose es si estan abiertas en agosto pero alguna creo que si ;)



2011/8/7 Fernando F. Gallego <ferd...@gmail.com>



--
Victor Moscoso Lembcke

Twitter: @victorelec14


Syvic

unread,
Aug 7, 2011, 5:07:23 PM8/7/11
to arduino...@googlegroups.com
Yo te recomiendo que vayas a cualquier tienda de electrónica y pidas un par de metros de cable unifilar negro y otro par de metros de rojo. Con eso tendrás más que suficiente para todas las prácticas y te vas a ahorrar un pastón (Eso si, te tocará cortar y pelar los cables durante el aula.

Si los prefieres ya hechos, sé que en diotronic venden las mismas cajitas de cables que ya tenéis. Está en Juan Bravo 58, pero llama antes por si estuvieran de vacaciones.

Nos vemos mañana. Ciao!

victorelec14

unread,
Aug 7, 2011, 5:07:36 PM8/7/11
to arduino...@googlegroups.com
en la calle del barquillo hay varias tiendas (me olvide de poner esto) xD



2011/8/7 victorelec14 <victor...@gmail.com>
Reply all
Reply to author
Forward
0 new messages