Está en la página 1de 32

random[arq]

Tutorial
(Versin en espaol work in progress)

Por Juanma Sarri

ARDUINO +
[P5, GRASSHOPPER, F REF!"#

Arduino open source hard are $e%elope$ &' (assi)o *an+i, ,a%i$ -.ar/ielles, 0o) goe, Gianl.1a (ar/ino 2 ,a%i$ (ellis3 http!"" #arduino#cc $rocessin% $e%elope$ &' *en Fr' 2 -ase' Reas3 http!""processin%#or% &rasshopper $e%elope$ &' ,a%i$ R.//en3 http!"" #%rasshopper'd#com (ire)l* $e%elope$ &' An$' Pa'ne 2 4ason 5 4o6nson3 http!"" #)ire)l*e+periments#com"

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

EJEMPL S !"S#$ S %E A&%'#( )


*+)!lin,
Esquema en Fritzing

Abrimos Arduino y una vez dentro de l, pulsamos el botn arriba), vamos al submen %#G#TAL y abrimos el e!emplo !L#(-" $di.o del e/em0lo !lin, de Arduino int led#in $ %&' 11 LE% conectado en el 0in di.ital +2

PE( (El que tiene la flechita hacia

11 El Setu0 34 5lo 5e lee '(A 6e7 3como en Proce55in.48 6oid 5etu0() ( 0inMode(led#in, 'TP'T)' 11 %eclaramo5 el 0in donde tenemo5 el Led como SAL#%A ) 11 El *oop () se lee constantemente" 6oid loo0() ( di.ital9rite(led#in, H#GH)' 11 Encendemo5 el LE% 3H#GH : Le 0a5amo5 lo5 5 6oltio54 delay(%+++)' 11 E50eramo5 +*** mili5e.undo5 3+ 5e.4 di.ital9rite(led#in, L 9)' 11 A0a.amo5 el LE% 3L 9 : Le 0a5amo5 * 6oltio54 delay(%+++)' 11 E50eramo5 +*** mili5e.undo5 3+ 5e.4 ) El uso de *eds es muy til para monitorizar acciones y comprobar que funcionan cone,iones o sensores" En este e!emplo, el *E- slo tiene dos posiciones, o encendido o apagado, ya que lo estamos controlando con un pin %#G#TAL (que slo admite esas dos posiciones)" .in embargo, un *E- puede adoptar m/s estados como veremos m/s adelante"

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

*;)!utton
Esquema en Fritzing

#ulsamos el botn PE( (El que tiene la flechita hacia arriba), vamos al submen abrimos el e!emplo !'TT (" $di.o del e/em0lo !utton de Arduino int button#in $ 0' int led#in $ %&' int button.tate $ +' 11 !otn conectado al 0in %#G#TAL ; 11 LE% conectado al 0in %i.ital +2 11 <aria=le >ue leer? el e5tado del !otn 3 * @ L 9 A + @ H#GH4

%#G#TAL y

6oid 5etu0() ( 0inMode(led#in, 'TP'T)' 11 %eclaramo5 el LE% como SAL#%A 0inMode(button#in, #(P'T)' 11 %eclaramo5 el !otn como E(T&A%A ) 6oid loo0()( 11 Leemo5 3di.italmente4 el e5tado del =otn y lo .uardamo5 en la 6aria=le =uttonState button.tate $ di.ital&ead(button#in)' 11 Si el =otn e5t? 0ul5ado 3H#GH4 888 if (button.tate $$ H#GH) ( di.ital9rite(led#in, L 9)' 11 Encendemo5 el LE% 3H#GH : 5 <oltio54 ) 11 888en ca5o contrario 3el =otn no e5t? 0ul5ado : L 94 el5e ( di.ital9rite(led#in, H#GH)' 11 A0a.amo5 el LE% 3L 9 : * <oltio54 ) ) 1omo vemos, en este s2etch, no sucede nada, salvo que apretemos el botn y cambiemos el estado del botn, y a su vez, el de la variable button.tate"
;

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

*2)$ocBe Fant?5tico
Esquema en Fritzing

#ulsamos el botn PE( (El que tiene la flechita hacia arriba), vamos al submen abrimos el e!emplo A&&ACS"

$ (T& L y

$di.o del e/em0lo Array5 de Arduino int timer $ %++' 11 <aria=le 0ara controlar el retardo del loo0 3+** mili5e.undo54 int led#ins34 $ ( 0, 5, 6, 7, 8, & )' 11 Array de lo5 0ine5 donde conectaremo5 lo5 LE%5 int pin1ount $ 7' 11 Lon.itud de la Array 6oid 5etu0() ( int this#in' 11 <aria=le tem0oral 11 La Array e5t? numerada de5de * Ba5ta 30in$ount D +4, e5 decir de * a 5 11 '5amo5 un =ucle F & 0ara iniciali7ar cada 0in como SAL#%A for (int this#in $ +' this#in 9 pin1ount' this#in::) ( 0inMode(led#ins3this#in4, 'TP'T)' ) ) 6oid loo0() ( 1E !ucle F & 0ara ir encendiendo de uno en uno lo5 led58 Funciona a5F Para el P&#ME& led888lo enciendo durante lo5 mili5e.undo5 >ue Be indicado con la 6aria=le timer888y lo a0a.o888enciendo el SEG'(% led, etc888
2

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

E1 for (int this#in $ +' this#in 9 pin1ount' this#in::) ( di.ital9rite(led#ins3this#in4, H#GH)' delay(timer)' di.ital9rite(led#ins3this#in4, L 9)' ) 1E !ucle F & 0ara ir encendiendo de uno en uno lo5 led58 Funciona a5F Para el GLT#M led888lo enciendo durante lo5 mili5e.undo5 >ue Be indicado con la 6aria=le timer888y lo a0a.o888enciendo el PE(GLT#M led, etc888 E1 for (int this#in $ pin1ount ; %' this#in <$ +' this#in;;) ( 11 Encendemo5 el LE% di.ital9rite(led#ins3this#in4, H#GH)' delay(timer)' 11 A0a.amo5 el LE% di.ital9rite(led#ins3this#in4, L 9)' ) ) Este es el primer s2etch donde podemos inspirarnos para realizar una instalacin (o parte de ella)" #osteriormente, veremos cmo poder introducir una interaccin con este s2etch y que ya no est =todo> programado, si no que reaccione ante determinada luz, sonido, vibracin, temperatura, presencia de obst/culos,"""

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

*H)Sen5or Anal.ico
Esquema en Fritzing

?na vez dentro de Arduino, *H)Sen5or)Anal.ico)Potencimetro)SerialPrintln"

abriremos

el

e!emplo

$di.o del e/em0lo *H)Sen5or)Anal.ico)Potencimetro)SerialPrintln int pot#in $ +' 11 Potencimetro en el 0in A(ALIG#$ * int led#in $ @' 11 LE% en el 0in P9M J 3lo5 0ine5 P9M 0ermiten 0a5ar un ran.o como un tren de 0ul5o5 P9M : Pul5e 9idtB Modulation4 int valor' 11 6aria=le 0ara almacenar el 6alor ca0turado de5de el 0otencimetro int valorAapeado' 11 6aria=le 0ara almacenar el 6alor ma0eado 6oid 5etu0() ( Serial8=e.in(@7++)' 11 A=rimo5 el 0uerto Serie de Arduino a una 6elocidad de JK** =audio5 0inMode(led#in, 'TP'T)' 11 %eclaramo5 el LE% como SAL#%A ) 6oid loo0() ( 11 Leemo5 anal.icamente el 0otenciometro y lo .uardamo5 en la 6aria=le 6alor valor $ analo.&ead(pot#in)' 11 Ma0eamo5 el 6alor de la 6aria=le 6alor entre el ran.o ori.inal del 0otenciometro 3* : +*;24 y lo 0a5amo5 al ran.o del LE% 3 * : ;55 como en la definicin de colore5 de Proce55in.48 valorAapeado $ ma0(valor,+,%+0&,+,088)' 11 E5cri=imo5 anal.icamente el 6alorMa0eado en el LE% analo.9rite(led#in,valorAapeado)'
5

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

11 A=rimo5 el Serial Monitor de Arduino y aB 0odremo5 6er >uL 6alore5 le 6amo5 0a5ando al LE% Serial80rintln(valorAapeado)' )

En este e!emplo, vamos a empezar a ver como monitorizar operaciones o eventos en Arduino, gracias al Puerto Serie" Esta tcnica nos permitir/, posteriormente mandar datos o acciones a otros programas como #rocessing, Brasshopper, #ure -ata, Flash, o incluso a un CphoneD Cpad o similar E para dotar de mayor interactividad a nuestra instalacin"

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

*5)Pie7oelLctrico 3Mum=ador4
Esquema en Fritzing

int led#in $ %&' 11 LE% en el 0in %i.ital +2 int 2noc2.ensor $ +' 11 Pie7oelLctrico en el 0inAnal.ico * int threshold $ %++' 11 <alor lmite a 0artir del cual decidimo5 >ue 5e Ba detectado un .ol0e o no int sensorFeading $ +' 11 <aria=le >ue .uarda la lectura del 0ie7oelLctrico int led.tate $ L 9' 11 <aria=le >ue .uarda el Nltimo e5tado del LE% y >ue decide (1 FF 6oid 5etu0() ( 0inMode(led#in, 'TP'T)' 11 %eclaramo5 el 0in como SAL#%A Serial8=e.in(@7++)' 11 A=rimo5 el Puerto Serie a JK** =audio5 ) 6oid loo0() ( 11 Leemo5 anal.icamente el 0ie7o y .uardamo5 la lectura en 5en5or&eadin. sensorFeading $ analo.&ead(2noc2.ensor)' 1E Entramo5 en un =ucle #F888 Si la lectura .uardada en 5en5or&eadin. e5 MAC & #G'AL >ue el lmite >ue Bemo5 fi/ado con la 6aria=le tBre5Bold O8 E1 if (sensorFeading <$ threshold) ( led.tate $ Gled.tate' 11 #n6ertimo5 el 6alor de ledState 3de L 9 a H#GH4 di.ital9rite(led#in, led.tate)' 11 E5cri=imo5 di.italmente e5e 6alor en el LE% 11 E5cri=imo5 en el Puerto Serie la 0ala=ra 3e5 una Strin. de tePto4 0ara 5a=er >ue 5e Ba cum0lido la accin Serial80rintln(Q-noc,RQ)' ) delay(%++)' 11 &etra5amo5 +** mili5e.undo5 >ue el 0ro.rama 6uel6a a em0e7ar otro =ucle del loo0 348 E5ta orden e5 muy Ntil 0ara e6itar >ue =lo>ueemo5 el Puerto Serie8 ) *os piezoelctricos son unos elementos muy tiles, ya que son micrfonos de contacto" .i le pasamos una vibracin, nos puede devolver un volta!e, y si le pasamos volta!e, nos puede devolver un sonido" .on actuadores fundamentales en las instalaciones sonoras caseras, como veremos posteriormente, como puede ser un TBeremin"

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

*K)Fotore5i5tencia 3L%&4
Esquema en Fritzing

int *-FHpin $ +' 11 L%& en el 0in Anal.ico * int *E-Hpin $ 7' 11 LE% en el 0in %i.ital P9M K int *-FHval' 11 <aria=le >ue almacena la lectura del L%& int *-FHmapeado' 11 <aria=le ma0eada 0ara encender el LE% 6oid 5etu0() ( Serial8=e.in(@7++)' 11 A=rimo5 el Puerto Serie a JK** =audio5 0inMode(*E-Hpin, 'TP'T)' 11 Aun>ue no e5 nece5ario declarar lo5 0ine5 A(AL G S como #(P'TS, lo Baremo5 0inMode(*-FHpin,#(P'T)' ) 6oid loo0()( *-FHval $ analo.&ead(*-FHpin)' 11 leemo5 el 6alor del L%& *-FHmapeado $ con5train(*-FHval,+,088)'11 limitamo5 el 6alor del L%& al ran.o T*U;55V 0ara el LE% analo.9rite(*E-Hpin,*-FHmapeado)' 11 Le 0a5amo5 al LE% el 6alor ma0eado Serial80rint(I*-F mapeado $ I)'11 e5cri=imo5 en el Puerto Serie el 6alor con >ue 5e enciende el LE% Serial80rintln(*-FHmapeado)' ) En este e!emplo se puede ver claramente la disposicin de un di6i5or re5i5ti6o" ?n divisor de tensin es una configuracin de un circuito elctrico que reparte la tensin de una fuente entre una o m/s impedancias conectadas en serie" ?n divisor resistivo es un caso especial de divisor de tensin, en el que ambas impedancias son puramente resitivas" 1omo Arduino slo puede leer 6olta/e5, y muchos sensores son resistivos, (varJan la resistencia)
W

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

usamos estos divisores resistivos para leer este tipo de sensores" Funcionamiento de un %i6i5or &e5i5ti6o

Este e!emplo funciona e,actamente igual si cambiamos la *-F por un TBermi5tor (KL1) (una resistencia por calor)" En este e!emplo podemos observar cmo funcionan las funciones con5train() y la diferencia entre Serial80rint () y Serial80rintln ()" *as *-Fs son muy tiles para construir instalaciones sensibles a la luz (o a la oscuridad) y tambin se pueden emplear para fabricar =arrera5 de lu7 (colocamos un puntero l/ser enfocando constantemente a la *-F y cuando =algo> interrumpa la luz del l/ser, la *-F dispara un evento para detectar esa accin")

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

*S)Sen5or de #nclinacin 3T#LT4


int led#in $ %&' int in#in $ 5' int value $ +' 11 P#( del LE% 11 P#( del 5en5or 11 <alor del 5en5or 11 #niciali7a el 0in +2 como 5alida di.ital 11 #niciali7a el 0in S como entrada di.ital 11 Lee el 6alor de la entrada di.ital

6oid 5etu0() ( 0inMode(led#in, 'TP'T)' 0inMode(in#in, #(P'T)' ) 6oid loo0() ( value $ di.ital&ead(in#in)' di.ital9rite(led#in, value)' )

Esquema en Fritzing ?n sensor de inclinacin es un componente que puede detectar la inclinacin de un ob!eto" .in embargo, no de!a de ser un pulsador activado por un mecanismo fJsico" Este tipo de sensor es la versin b/sica de un interruptor de mercurio" El sensor tilt ( tiene polaridad" Este sensor contiene una bola met/lica en su interior que conmuta los dos pines del dispositivo de encendido a apagado, y viceversa, si el sensor alcanza un cierto /ngulo" Es decir, detecta si algo est/ arriba o aba!o" 1uando el sensor detecta una vibracin, enciende el *E-" Este actuador est/ presente en muchos !uguetes infantiles, en los que se activan eventos cuando se acaricia o se golpea" #osteriomente, veremos cmo hac2ear un (uncBuc, de una Mii para conectarlo a Arduino y ver el funcionamiento de sus & acelermetros"
+*

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

*W)MN5ica con el T#LT


11El ArcBi6o Q0itcBe58BQ contiene la5 frecuencia5 de la5 nota5 >ue >ueramo5 utili7ar Ninclude I0itcBe58BI int led#in $ %&' 11 LE% en el 0in +2 int altavoz $ @' 11 Alta6o7 o 0ie7oelectrico en el 0in P9M J 11 Array de =yte5 com0ue5to 0or caractere5 0ara indicar >uL nota de=e 5onar =yte letras3 4 $(XaX, X5X, XdX, XfX, X.X)' 11 nota5 de la meloda de Encuentro5 en la 2Y Fa5e 5e.Nn el arcBi6o Q0itcBe58BQ int notas3 4 $ (KOLEHA.6, KOLEH16, KOLEHB.&, KOLEHB.0, KOLEH-.&)' =yte valor' 11 <alor en el >ue .uardamo5 lo >ue le 0a5amo5 0or Puerto Serie 11 !yte >ue le 0a5amo5 de5de el 0uerto Serie888 int bytePueCntroducimos#or#uerto.erie $ ;%' int estado*E- $ L 9' 11 Al 0rinci0io el LE% e5t? FF int contador' 11 <aria=le contador 0ara recorrer la Array de nota5 6oid 5etu0() ( 0inMode(led#in, 'TP'T)' 0inMode(altavoz, 'TP'T)' Serial8=e.in(@7++)' 11 A=rimo5 Puerto Serie a JK** =audio5 ) 6oid loo0() ( 11 E5tamo5 atento5 a la lectura de5de el 0uerto 5erie 0ara 6er >ue letra e5cri=imo5 bytePueCntroducimos#or#uerto.erie $ Serial8read()' 11 Si e5cri=imo5 cual>uier letra888 if (bytePueCntroducimos#or#uerto.erie G$ ;%) ( 11 .uardamo5 e5a letra en la 6aria=le 6alor valor $ bytePueCntroducimos#or#uerto.erie' 11 E5cri=imo5 la letra en el 0uerto Serie Serial80rintln(valor,!CTE)' 11 $am=iamo5 el E5tado del LE% de FF a ( o de ( a FF estado*E- $ Gestado*E-' 11 Pa5amo5 el nue6o e5tado al LE% di.ital9rite(led#in, estado*E-)' ) 11 %e5de * Ba5ta recorrer toda la Array 3de * a H4888 for (contador $ +' contador 9$ 6' contador ::) ( 11 888y 5i a la letra * le corre50onde el 6alor *888 11 e5 decir8885i letra * @ XaX 888 if (letras3contador4 $$ valor) ( 11 Le 0a5amo5 al 0in del alta6o7 el tono de la letra * 888 tone(altavoz,notas3contador4)' ) ) )

++

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

Esquema en Fritzing En este e!emplo, podemos ver la utilidad de la funcin Serial8read (), que nos permite introducir par/metros dentro de Arduino para disparar eventos"

+;

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

*J)TBeremin
Esquema en Fritzing

11 P#(ES SE(S &ES int *-F $ &' int altavoz $ @' int potenciometro $ +'

11 L%& en el 0in analo.ico 2 11 Alta6o7 en el 0in P9M J 11 Potenciometro en el 0in analo.ico *

11 <A&#A!LES PA&A ALMA$E(A& <AL &ES int valor $ +' int valorHmapeado $ +' int valorHtiempo $ +' 6oid 5etu0()( 0inMode(*-F, #(P'T)' 0inMode(altavoz, 'TP'T)' 0inMode(potenciometro, #(P'T)' Serial8=e.in(@7++)' ) 6oid loo0()( 11 Guardamo5 la lectura de la L%& en la 6aria=le 6alor valor $ analo.&ead(*-F)' 11 Ma0eamo5 la lectura del 0otenciometro entre un 6alor de +** UUUZ 5** mili5e.undo5 valorHtiempo $ ma0(analo.&ead(potenciometro),+,%+0&,%++,%+++)' 11 Ma0eamo5 la lectura del L%& con un ran.o de tono5 de nota5 determinado valorHmapeado $ ma0(valor,+,%+0&,@87,%@%8)' 11 #ntroducimo5 una funcin creada 0or no5otro5 0ara Bacer 5onar el alta6o7 playLone(valorHmapeado,valorHtiempo)' 11 #m0rimo5 el 6alor de la lectura de la L%& Serial80rintln(valor,%E$)' 11 +* mili5e.undo5 de retra5o 0ara e6itar 5aturar el 0uerto 5erie delay(%+)' ) 11 E5ta e5 la funcin >ue Bemo5 creado8 Hay >ue 0a5arle do5 ar.umento5F
+2

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

11 el tono 3la5 nota54 y duration 3el ran.o entre +* y +*** mili5e.undo54 6oid playLone(int tono, int duration) ( for (lon. i $ +' i 9 duration Q %+++*' i :$ tono Q 0) ( di.ital9rite(altavoz, H#GH)' delayMicro5econd5(tono)' di.ital9rite(altavoz, L 9)' delayMicro5econd5(tono)' ) )

+H

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

+*)Ser6omotor
11 Para controlar nue5tro Ser6o, 0odemo5 u5ar la li=rera Ser6o 11 >ue ya tiene funcione5 0redeterminada5 Ninclude 9.ervo"h< 11 $reamo5 un o=/eto Ser6o 0ara controlar nue5tro 5er6o Ser6o mi.ervo' 11 Potenciometro en el Pin Analo.ico * int potenciometro $ +' 11 <aria=le 0ara .uardar la lectura del 0otenciometro int valor' 6oid 5etu0() ( 11 $onectamo5 el 5er6o en el Pin P9M J mi.ervo"attacB(@)' ) 6oid loo0() ( 11 Leemo5 el 6alor del 0otenciometro valor $ analo.&ead(potenciometro)' 11 Ma0eamo5 5u 6alor al ran.o del 5er6o T*[U+W*[V valor $ ma0(valor, +, %+0&, +, %5@)' 11 Le 0a5amo5 al 5er6o el 6alor e5calado mi.ervo"\rite(valor)' 11 &etra5o de +5 mili5e.undo5 0ara refre5car el 5er6o delay(%8)' ) E5>uema en Frit7in.

+5

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

++)Motor %$ controlado con el cBi0 L%;J2


Esquema en Fritzing

*os chips, generalmente, suelen tener una muesca ( 5emicrculo) que nos indica la orientacin de sus pines" El pin nR % de este chip ser/ el que se encuentre a la izquierda de la muesca" El resto de la numeracin ser/ antihoraria, como se puede ver en la imagen inferior que muestra en detalle las cone,iones del chip *-0@&"

Al pin #MA @ Al pin #MA & #ata % Aotor Lierra Lierra #ata 0 Aotor Al pin -igital 6 A los 8 Soltios

9;;;;;;;;; 9;;;;;;;;; 9;;;;;;;;; 9;;;;;;;;; 9;;;;;;;;; 9;;;;;;;;; 9;;;;;;;;; 9;;;;;;;;;

;;;;;;<

A los 8 Soltios

;;;;;;< ;;;;;;<

Lierra Lierra

1on este chip podemos conectar 0 motores -1, tan slo con conectar el segundo motor de manera an/loga al primero, pero en la parte derecha del chip"
+K

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

int boton#in $ 0' int motor#in% $ &' int motor#in0 $ 6' int speed#in $ @' int led#in $ %&'

11 !oton al 0in di.ital ; 11 Pata + del motor al 0in di.ital 2 11 Pata ; del motor al 0in di.ital H 11 Ha=ilitamo5 el 0in + del L%;J2 y 6a al P9M J 11 LE%

6oid 5etu0() ( 0inMode(boton#in, #(P'T)' 11 !otn como E(T&A%A 0inMode(motor#in% , 'TP'T)' 11 El re5to, como SAL#%A 0inMode(motor#in0 , 'TP'T)' 0inMode(speed#in, 'TP'T)' 0inMode(led#in, 'TP'T)' di.ital9rite(speed#in, H#GH)' 11 Arrancamo5 el motor de5de el 0rinci0io 11 Si el led 0ar0adea 2 6ece5 de50uL5 de arrancar el motor, >uiere 11 decir >ue Arduino 5e Ba reiniciado de=ido a un cortocircuito blin2*E-(led#in, &, %++)' ) 6oid loo0() ( if (di.ital&ead(boton#in) $$ H#GH) ( DD El motor gira en sentido horario di.ital9rite(motor#in%, L 9)' di.ital9rite(motor#in0, H#GH)' ) el5e ( di.ital9rite(motor#in%, H#GH)' di.ital9rite(motor#in0, L 9)' ) ) 11 Si 0re5ionamo5 el =otn 888

11 En ca5o contrario 888 el motor .ira en 5entido antiBorario

11 E5te mLtodo no5 informa del cortocircuito 6oid blin2*E-(int que#in, int cuantasSeces, int mili.eg) ( int i $ +' for ( i $ +' i 9 cuantasSeces' i::) ( di.ital9rite(que#in, H#GH)' delay(mili.egD0)' di.ital9rite(que#in, L 9)' delay(mili.egD0)' ) )

+S

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

+;)Motor %$ controlado con el cBi0 L%;J2 y con ; Potencimetro5 >ue controlan 5u 5entido de .iro y 5u5 &PM
Esquema en Fritzing

int valor' int valor%' int valorHmapeado' int motor3 4 $ (@, %+)' int pot% $ +' int pot0 $ %'

11 6aria=le 0ara leer el 0ot + 11 6aria=le 0ara leer el 0ot ; 11 6aria=le 0ara ma0ear el 0ot ; 11 Array de Pine5 P9M 0ara el motor 11 Pot + al Pin * analo.ico 11 Pot ; al Pin + analo.ico

6oid 5etu0() ( Serial8=e.in(@7++)' 0inMode(pot%, #(P'T)' 11 Potenciometro5 como E(T&A%A 0inMode(pot0, #(P'T)' 11 %eclaramo5 una 6aria=le tem0oral y recorremo5 la array del Motor como SAL#%A int i' for(i $ +' i 9 0' i::)( 0inMode(motor3i4, 'TP'T)' ) ) 6oid loo0() (

+W

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

valor $ analo.&ead(pot%)' 11 leemo5 el 0ot+ valor% $ analo.&ead(pot0)' 11 leemo5 el 0ot; 11 ma0eamo5 el 0ot; 0ara adecuarlo al ran.o del motor valorHmapeado $ ma0(valor%,+,%+0&,+,088)' 11 Si el 6alor de 0ot+ e5 ME( & >ue 5+; 3+1; del 0ot4888 if(valor 9$ 8%0)( Serial80rint(QGiro F AntiBorarioQ)' 11 El motor &ET& $E%E 5e.Nn la lectura ma0eada del 0ot ; motorAtras(valorHmapeado)' ) 11 Si el 6alor de 0ot+ e5 MAC & >ue 5+; 888 if(valor < 8%0)( Serial80rint(QGiro F HorarioQ)' 11 El motor A<A(MA 5e.Nn la lectura ma0eada del 0ot ; motorAdelante(valorHmapeado)' ) Serial80rint(Q1tQ)' Serial80rint(Q&PM F Q)' Serial80rintln(valorHmapeado)' delay(8+)' ) 11 Funcin AuPiliar 0ara el A<A($E del Motor8 11 Ponemo5 una 0ata del Motor a $E& y la otra con la lectura del 0ot ; 6oid motorAdelante(int F#AH%)( analo.9rite(motor3+4, F#AH%)' analo.9rite(motor3%4, +)' ) 11 Funcin AuPiliar 0ara el &ET& $ES del Motor8 11 Ponemo5 la 0ata contraria 3la >ue e5ta=a a $E& en el ca5o de a6ance del Motor4 con la lectura del 0ot ; y la otra a $E& 6oid motorAtras(int F#AH0)( analo.9rite(motor3+4, +)' analo.9rite(motor3%4, F#AH0)' ) Tay que destacar que en las dos funciones au,iliares, hemos incorporado una variable (F#AH% y F#AH0, respectivamente) que, en el loo0 ( ) se completan con la lectura del potencimetro 0" 1omo se puede ver, la sinta,is de Arduino, es pr/cticamente idntica a la de #rocessing" Cncluso, para de!ar el cdigo m/s limpio, podrJamos haber colodado las dos funciones au,iliares en una nueva pestaUa"

+J

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

+2)<Nmetro con Micrfono Electret y ++ LE%5


Esquema en Fritzing

int val' int microfono $ +' int i'

11 <aria=le 0ara la lectura del micro 11 Micro en el 0in Analo.ico * 11 <aria=le 0ara recorrer la array de LE%5

int leds 3 4 $ ( 11 Array de lo5 Pine5 de lo5 LE%5 0,&,6,8,7,5,V,@,%+,%%,%0)'

;*

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

11 En e5te ca5o, el total e5 ++ LE%5 3la array em0ie7a en T*V4 int longArray*E-. $ %+' 6oid 5etu0()( Serial8=e.in(@7++)' 0inMode(microfono, #(P'T)' for(i $ +' i 9 longArray*E-.' i::)( 0inMode(leds3i4, 'TP'T)' ) ) 6oid loo0() ( val $ analo.&ead(microfono)' val $ ma0(val,7%+,%+0&,+,088)'

11 Micro como SAL#%A 11 Todo5 lo5 LE%5 como SAL#%AS

11 Leemo5 el micro 11 Ma0eamo5 0ara >uitar el ruido

11 Si el 6alor e5 ME( & >ue +5888a0a.amo5 todo5 lo5 led5 if(val 9 %8)( for(i $ +' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue +5 y ME( & >ue ;2888encendemo5 el +er led y el re5to a0a.ado5 if(val < %8 WW val 9 0&)( for(i $ +' i 9$ longArray*E-. ; %+' i::)( di.ital9rite(leds3i4,H#GH)' ) for(i $ %' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue ;2888encendemo5 lo5 ; 0rimero5 led5 y el re5to a0a.ado5 if (val <$ 0&)( for(i $ +' i 9$ longArray*E-. ; @' i::)( di.ital9rite(leds3i4,H#GH)' ) for(i $ longArray*E-. ; @' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue HK888encendemo5 lo5 2 0rimero5 led5 y el re5to a0a.ado5 if(val <$ 67)( for(i $ +' i 9$ longArray*E-. ; V' i::)( di.ital9rite(leds3i4,H#GH)' ) for(i $ longArray*E-. ; V' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue KJ888encendemo5 lo5 H 0rimero5 led5 y el re5to a0a.ado5 if(val <$ 7@)( for(i $ +' i 9$ longArray*E-. ; 5' i::)( di.ital9rite(leds3i4,H#GH)' ) for(i $ longArray*E-. ; 5' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)'
;+

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

) ) 11 Si el 6alor e5 MAC & >ue J;888encendemo5 lo5 5 0rimero5 led5 y el re5to a0a.ado5 if(val <$ @0)( for(i $ +' i 9$ longArray*E-. ; 7' i::)( di.ital9rite(leds3i4,H#GH)' ) for(i $ longArray*E-. ; 7' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue ++5888encendemo5 lo5 K 0rimero5 led5 y el re5to a0a.ado5 if(val <$ %%8)( for(i $ +' i 9$ longArray*E-. ; 8' i::)( di.ital9rite(leds3i4,H#GH)' ) for(i $ longArray*E-. ; 8' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue +2W888encendemo5 lo5 S 0rimero5 led5 y el re5to a0a.ado5 if(val <$ %&V)( for(i $ +' i 9$ longArray*E-. ; 6' i::)( di.ital9rite(leds3i4,H#GH)' ) for(i $ longArray*E-. ; 6' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue +K+888encendemo5 lo5 W 0rimero5 led5 y el re5to a0a.ado5 if(val <$ %7%)( for(i $ +' i 9$ longArray*E-. ; &' i::)( di.ital9rite(leds3i4,H#GH)' ) for(i $ longArray*E-. ; &' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue +WH888encendemo5 lo5 J 0rimero5 led5 y el re5to a0a.ado5 if(val <$ %V6)( for(i $ +' i 9$ longArray*E-. ; 0' i::)( di.ital9rite(leds3i4,H#GH)' ) for(i $ longArray*E-. ; 0' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue ;*S888encendemo5 lo5 +* 0rimero5 led5 y el Nltimo a0a.ado if(val <$ 0+5)( for(i $ +' i 9$ longArray*E-. ; %' i::)( di.ital9rite(leds3i4,H#GH)' )
;;

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

for(i $ longArray*E-. ; %' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,L 9)' ) ) 11 Si el 6alor e5 MAC & >ue ;2*888encendemo5 todo5 lo5 led5 if(val <$ 0&+)( for(i $ +' i 9$ longArray*E-.' i::)( di.ital9rite(leds3i4,H#GH)' ) ) Serial80rintln(val, %E$)' )

;2

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

$ (E]#I( %E A&%'#(

$ ( P& $ESS#(G

Este es un e!emplo muy sencillo de cmo enviar un Nnico dato, a partir de la lectura analgica de un Potencimetro, desde Arduino a #rocessing" ?na vez que tengamos la seUal disponible en #rocessing, la podremos usar para lo que nos interese, siempre teniendo en cuenta el rango de la variable, el tipo, """ Seamos el s2etch de ArduinoX int pot#in $ +' int led#in $ @' int valor' int valorAapeado' 11 Pot en el 0in A(ALIG#$ * 11 LE% en el 0in P9M J 11 6aria=le 0ara almacenar el 6alor 5el 0ot 11 6aria=le 0ara almacenar el 6alor ma0eado

6oid 5etu0() ( Serial8=e.in(@7++)' 11 A=rimo5 el 0uerto Serie de Arduino a una 6elocidad de JK** =audio5 0inMode(led#in, 'TP'T)' 11 %eclaramo5 el LE% como SAL#%A ) 6oid loo0() ( 11 Leemo5 anal.icamente el 0otenciometro y lo .uardamo5 en la 6aria=le 6alor valor $ analo.&ead(pot#in)' 11 Ma0eamo5 el 6alor de la 6aria=le 6alor entre el ran.o ori.inal del 0otenciometro 3* : +*;24 y lo 0a5amo5 al ran.o del LE% 3* : ;554 valorAapeado $ ma0(valor,+,%+0&,+,088)' 11 E5cri=imo5 anal.icamente el 6alorMa0eado en el LE% analo.9rite(led#in,valorAapeado)' 11 A=rimo5 el Serial Monitor de Arduino y aB 0odremo5 6er >uL 6alore5 le 6amo5 0a5ando al LE% Serial80rintln(valorAapeado)' 11 #MP &TA(TEF retra5o de W* mili5e. en un nue6o =ucle del loo0 0ara no 5aturar el Puerto Serie delay(V+)' ) Antes de pasar al cdigo de #rocessing, es importante tener en cuenta dos par/metros, para que la cone,in Arduino Y #rocessing funcione correctamenteX % Z En qu Puerto est/ conectado Arduino" En Mindo[s, suele ser 1OA >y un n mero>" En e!emplo" Ai Arduino estaba conectado en el $ MH" este

0 Z A qu 6elocidad est/ leyendo Arduino los datos" En este caso, a JK** =audio5 (es la medida est/ndar de apertura del #uerto .erie)"

Seamos el s2etch en Proce55in.X im0ort processing"serial"Q' .erial my#ort' Strin. buf $ II' int val' 11 #m0ortamo5 la li=reria >ue 5e ocu0a de la lectura del 0uerto 5erie

11 =/eto Serial 0ara iniciali7ar el 0uerto 5erie 11 $adena de tePto, ma5 de una letra, en e5te ca5o e5ta 6acia 11 <aria=le donde reci=o el 6alor >ue me en6ia arduino
;H

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

float diametro' 11 %iametro de mi circunferencia 6oid 5etu0()( 5i7e(8%0,8%0)' 11 Tama^o de la 6entana de 6i5uali7acin 5mootB()' 11 Sua6i7ado de lo5 =orde5 11im0rimo 5olo una 6e7 la li5ta de nom=re5 de 0uerto5 5erie5 >ue tiene mi ordenador 0ara 6er donde 0uedo leer 0rintln(.erial"li5t())' 11 Puerto donde e5t? conectado Arduino 0ara 0oder leer lo5 dato5 Strin. portKame $ I$ MHI' 11 A5i.no a mi o=/eto Serial el 0uerto >ue e5t? conectado a Arduino y con la mi5ma 6elocidad my#ort $ ne\ .erial(tBi5, portKame, @7++)' ) 6oid dra\()( 115i el 0uerto e5ta di50oni=le8885ir6e 0ara >ue no 5e 5ature la 6entana de 0roce55in. if ( my#ort"available() < +) ( val $ my#ort"read()' 11en la 6aria=le 6al, e5cri=e lo >ue e5t?5 leyendo en el 0uerto if(val G$ %+) ( 115i 6al e5 di5tinto de +*, o 5ea888detecto donde cam=io de linea con el return 3+*4 buf :$ cBar(val)' 11888entonce5888.uardo el 6alor como una cadena de tePto )el5e( diametro $ float(buf)' 11y 5i no8888el diametro 6ale +*;2 meno5 la tran5fomarcion de =uf, aBora como float888 buf $ QQ' 116acio la 6aria=le =uf888e5te do=le cam=io de la 6aria=le e5 un truco 0ara >ue funcione =ien en 0roce55in. ) 115i no e5ta di50oni=le888no Ba.a5 nada ) =ac,.round(088)' 11 Fondo de 0antalla =lanco noStro,e()' 11 (o di=u/aremo5 !orde5 fill(088,+,+)' 11 &elleno de color &o/o elli05e(\idtBD0,Bei.BtD0,diametro,diametro)' 11 $ircunferencia en mitad de la 0antalla 0rintln(diametro)' 11 #m0rimimo5 en el Puerto Serie el di?metro )

Este es un e!emplo m/s comple!o para enviar mNlti0le5 datos, a partir de las lecturas analgicas de dos Potencimetro5 (que controlan dos Aotores -1), desde Arduino a #rocessing" En este e!emplo, usaremos las lecturas de los potencimetros para modificar el di/metro de una circunferencia y para variar su color de relleno" Seamos el s2etch de ArduinoX int valor%' int valor0' int valorHmapeado%' int valorHmapeado0' int motor%34 $ ( @, %+)' int motor034 $ ( 8, 7)' int pot% $ +' 11 6aria=le 0ara leer el 0ot + 11 6aria=le 0ara leer el 0ot ; 11 6aria=le ma0ear el 0ot + 11 6aria=le ma0ear el 0ot ; 11 Array de Pine5 P9M 0ara el motor+ 11 Array de Pine5 P9M 0ara el motor; 11 Pot + al Pin * analo.ico
;5

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

int pot0 $ %'

11 Pot ; al Pin + analo.ico

6oid 5etu0() ( Serial8=e.in(@7++)' 0inMode(pot%, #(P'T)' 11 Potencimetro5 como E(T&A%A 0inMode(pot0, #(P'T)' 11 %eclaramo5 una 6aria=le tem0oral y recorremo5 la array del Motor+ y del Motor; como SAL#%A int i' for(i $ +' i 9 0' i::)( 0inMode(motor%3i4, 'TP'T)' ) int t' for(t $ +' t 9 0' t::)( 0inMode(motor03t4, 'TP'T)' ) ) 6oid loo0() ( valor% $ analo.&ead(pot%)' 11 leemo5 el 0ot+ valor0 $ analo.&ead(pot0)' 11 leemo5 el 0ot; 11 ma0eamo5 lo5 0ot5 0ara adecuarlo5 al ran.o del motor valorHmapeado% $ ma0(valor%,+,%+0&,+,088)' valorHmapeado0 $ ma0(valor0,+,%+0&,+,088)' 11 El motor+ A<A(MA 5e.Nn la lectura ma0eada del 0ot + analo.9rite(motor%3+4, valorHmapeado%)' analo.9rite(motor%3%4, +)' 11 El motor; A<A(MA 5e.Nn la lectura ma0eada del 0ot ; analo.9rite(motor03+4, valorHmapeado0)' analo.9rite(motor03%4, +)' 11Serial80rint3Q&PM Motor+ F Q4A 11 #m0rimo5 un Q*Q al 0rinci0io8886er comentario5 en el 5,etcB de Proce55in. y lo5 6alore5 lo5 5e0aramo5 0or $ MAS Serial80rint(I*Q)' Serial80rint(Q,Q)' Serial80rint(valorHmapeado%)' 11Serial80rint3Q,Q4A 11Serial80rint3Q&PM Motor; F Q4A Serial80rint(Q,Q)' Serial80rintln(valorHmapeado0)' delay(0+)' 11 &etra5o 0ara no 5aturar el Puerto Serie ) Seamos el s2etch en Proce55in.X im0ort processing"serial"Q' .erial puerto' int diametro' int ro!oSerde' 6oid 5etu0()(
;K

11

=/eto Serial llamado 0ort 3donde leo lo5 dato5 >ue en6a Arduino4

11 6aria=le 0ara modificar el di?metro 11 6aria=le 0ara modificar el color de relleno

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

5i7e(7++,6V+)' 5mootB()' noStro,e()' =ac,.round(+)' Abro#uerto.erie()' )

11 Tama^o 6entana 6i5uali7acion 11 Sua6i7ado 11 Sin =orde5 11 $olor de fondo !lanco

6oid dra\()( arduino#uerto-isponible()' =ac,.round(+)' fill(ro!oSerde , 088;ro!oSerde , +)' elli05e(\idtBD0 , Bei.BtD0 , diametro , diametro)' ) 11111111111111111111 $ M'(#$A$#I( $ ( A&%'#( 11111111111111111111111111111111 6oid Abro#uerto.erie()( 11 #m0rimo una li5ta de todo5 lo5 0uerto5 5erie di50oni=le5 0rintln(.erial"li5t())' 11 A=ro el 0uerto 5erie de Arduino puerto $ ne\ .erial(tBi5, Q$ MHQ, @7++)' 11 (o 5e leer? la funcin 5erialE6ent34 Ba5ta >ue no a0are7ca un 5alto de lneaRRRR puerto"buffer?ntil(X_nX)' ) 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111 6oid arduino#uerto-isponible()( 11 Mientra5 el 0uerto e5tL di50oni=le888leo lo5 dato5 de Arduino \Bile (puerto"available() < +) ( serialEvent(puerto"read())' ) ) 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111 6oid serialEvent(int .erial) ( 11 Almacenamo5 la Strin. >ue no5 manda arduino Ba5ta el 5alto de lnea Strin. in.tring $ puerto"read.tring?ntil(X_nX)' 11 Si la 5trin. .uardada ( if (in.tring G$ null) ( in.tring $ trim(in.tring)' e5 ('LA 888 11 !orramo5 de la 5trin. lo5 e50acio5 en =lanco 888

11 %i6idimo5 la Strin. 0or la5 $ MAS y con6ertimo5 la5 5u=Strin.5 en una array de nNmero5 entero5 int3 4 sensores $ int(50lit(in.tring, Q,Q))' 11 Si la array tiene 0or lo meno5 2 elemento58 #MP &TA(TEF el 0rimer 6alor e5 el Q*Q8 E5to lo Ba.o 0or>ue 5i el 6alor T*V e5 i.ual a * 3null4, .enera 0ro=lema5 en la5 lectura58 Por e5o no lo u5o directamenteRRRRR if (sensores"len.tB <$&) ( 11 A5i.namo5 la5 di5tinta5 lectura5 ordenada5 a la5 6aria=le5 >ue me intere5an8 <er >ue no u5o la 0o5icin 5en5ore5 T*VRRRRRRRRRRRRRRRR diametro $ sensores3%4' ro!oKegro $ sensores304' ) 0rint(diametro)' 0rint(Q, Q)' 0rintln(ro!oSerde)' ) )
;S

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

$ (E]#I( %E A&%'#(

$ ( F#&EFLC

Tasta hace muy poco tiempo, la cone,in entre Arduino y Brasshopper se realizaba a travs de 5cri0t5 realizados dentro de Brasshopper (BT), realizados por los propios autores de las definiciones" .in embargo, hace unos meses, Andy Payne, del estudio *CFL Architects, y Ja5on -8 JoBn5on, del estudio Future;1ities;*ab, lanzaron un pluging para BT llamado F#&EFLC, que incorpora una serie de componentes para que realizar una cone,in entre Arduino y BT sea m/s sencillo que anteriormente" Actualmente, est/ disponible la versin %"++&" *in2 para descargar el pluginX httpXDD[[["fireflye,periments"comD *as instrucciones para instalar este pluging las podeis encontrar en el pdf que hay ad!unto al plugin, al igual que una pormenorizada descripcin de las diferentes ca!as, e incluso e!emplos" .in embargo, voy a describir las ca!as m/s importantes de este pluging para conectar Arduino y BT"

*+) 0en Port

*a ca!a Open #ort tiene & Entradas y % .alidaX EntradasX 0en Z Tay que conectarle un Loogle para poder cambiar de Falso a Serdadero la que controla la apertura del #uerto" booleana

Port Z Kecesita un n mero entero para que pueda localizar qu puerto $ M` est/ siendo utilizado por Arduino" !aud Z #recisa de otro n mero entero para que entienda a que velocidad est/ Arduino" #or defecto, esta entrada est/ a @7++ baudios" .alidaX M5. Z 1on una nota, podemos comprobar que el puerto serie est/ $E&&A% " .i estuviera A!#E&T , nos aparecerJa lo siguienteX traba!ando

*;)Generic Serial &ead


?na vez que ya sabemos como abrir el #uerto .erie, vamos a empezar a recibir datos desde
;W

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

Arduino con la pila llamada Beneric .erial Fead (se encuentra dentro del subAen ?tility)" #ara empezar a recibir datos, es im0re5cindi=le, tener operativa la pila de 0en Port" Esta pila tiene 6 Entradas y 0 .alidasX EntradasX Start Z Tay que conectarle un Loogle para poder cambiar de Falso a Serdadero la que controla la recepcin de los datos" booleana

Port Z Kecesita un n mero entero para que pueda localizar qu puerto $ M` est/ siendo utilizado por Arduino" .e puede ligar con la entrada de la pila de Open #ort" Timer Z Tay que conectarle un Loogle para poder cambiar de Falso a Serdadero la que controla el estado del Limer (Lemporizador)" booleana

&ate Z #recisa de un n mero entero para que controlar el tiempo (en milisegundos) de retardo con el que empezar cada nueva lectura de los sensores" Es aconse!able que sea el mismo que hemos usado en el delay () de Arduino" .alidasX ut Z En esta salida podremos leer los datos que vamos recibiendo desde Arduino" M5. Z En ella, controlamos el estado de la lectura de datos desde Arduino"

#ara la e,plicacin del funcionamiento de esta pila, hemos usado un s2etch en Arduino que manda la lectura de 0 potencimetros" Seamos el s2etch de ArduinoX int pot#in+ $ +' 11 Potencimetro en el 0in A(ALIG#$ * int pot#in% $ %' 11 Potencimetro en el 0in A(ALIG#$ + int valor+' 11 <aria=le 0ara el 0ot * int valor%' 11 <aria=le 0ara el 0ot + 6oid 5etu0() ( Serial8=e.in(@7++)' D1 A=rimo5 el 0uerto Serie de Arduino a una 6elocidad de JK** =audio5
;J

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

0inMode(pot#in+, #(P'T)' 11 %eclaramo5 lo5 0ot5 como E(T&A%A 0inMode(pot#in%, #(P'T)' ) 6oid loo0() ( 11 Leemo5 anal.icamente lo5 0ot5 y lo5 .uardamo5 en la5 6aria=le5 6alor valor+ $ analo.&ead(pot#in+)' valor% $ analo.&ead(pot#in%)' Serial80rint(valor+)' Serial80rint(I,I)' Serial80rintln(valor%)' delay(8+)' )

*2) Generic Serial 9rite


Cnstalamos la ca!a Open #ort (con el 1OAN y la velocidad en \audios) y ahora, vamos a empezar a enviar datos desde BT a Arduino con la pila llamada Beneric .erial Mrite (se encuentra dentro del subAen ?tility)" #ara empezar a recibir datos, es im0re5cindi=le, tener operativa la pila de 0en Port" Esta pila tiene & Entradas y 0 .alidasX EntradasX Start Z Tay que conectarle un Loogle para poder cambiar de Falso a Serdadero la que controla el estado del envJo de datos" %ata Z .tring con el dato que vamos a enviar a Arduino" Port Z Kecesita un n mero entero para que pueda localizar qu puerto $ M` est/ siendo utilizado por Arduino" .e puede ligar con la entrada de la pila de Open #ort" .alidasX ut Z En esta salida podremos leer los datos que enviamos a Arduino" M5. Z En ella, controlamos el estado de la lectura de datos para Arduino" booleana

#ara la e,plicacin del funcionamiento de esta pila, hemos usado, como base, el s2etch Firefly)%'EM)Firmata)+**;80de para Arduino que podemos encontrar dentro de la carpeta Firefly)!uild +8**; 1 Firefly Arduino Firmata +8**; 1 Firefly)%'EM)Firmata)+**; " Este s2etch est/ realizado para usar la pila -uemilanove Mrite, pero retoc/ndolo un poco y eliminando todo lo que no nos sirve, se puede utilizar para traba!ar con esta pila" Seamos el s2etch de ArduinoX

2*

Juanma Sarri Garca Tutorial Arduino, Arduino + P5, Arduino + GH + Fiirefly

Ndefine \?FF.C]E %0V cBar buffer3\?FF.C]E4' uintVHt bufferid, $ +' uint%7Ht #MA7' 11 $ontrol del P9MK cBar Qparseptr' cBar buffid,' int led#in $ 7'

11 Led al P9MK

6oid 5etu0() ( Serial8=e.in(@7++)' ) 6oid loo0() ( serialread()' 11 Llamamo5 a la Funcion 5erial&ead ) 6oid serialread()( cBar c' 11 ca0tamo5 un caracter del Puerto Serie if (Serial8a6aila=le()) ( c $ Serial8read()' 11 Leemo5 e5e caracter buffer3bufferid,4 $ c' 11 a^adimo5 e5e caracter al =uffer if (c $$ X_nX) ( 11 Si leemo5 un SALT %E L#(EA888 buffer3bufferid,:%4 $ +' 11 888terminamo5 de leer parseptr $ buffer' 11 888de5car.amo5 el =uffer en la 6aria=le 0ar5e0tr #MA7 $ parsedecimal(parseptr)' 11 Anali7amo5 la 6aria=le 0ar5e0tr 11 Anali7amo5 la5 diferente5 5ituacione5 >ue 0odemo5 tener if (#MA7 $$ %) ( 11 Si e5 #G'AL a '( 888 di.ital9rite(led#in, H#GH)' 11 Encendemo5 el LE% ) el5e if (#MA7 $$ +)( 11 Si e5 #G'AL a $E& 888 di.ital9rite(led#in, L 9)' 11 A0a.amo5 el LE% ) el5e( 11 Si ( e5 ni '( ni $E& 888 analo.9rite(led#in, #MA7)' 11 E5cri=imo5 analo.icamente el 6alor en el LE% ) 11 'na 6e7 terminada la lectura y el 0a5o del 6alor al led, em0e7amo5 otra 6e7 a leer bufferid, $ +' return' 11 &einiciamo5 el =uffer 0ara la 5i.uiente lectura 11 %e6ol6emo5 al =uffer el $E& 0ara no incrementar el #ndice

) 11 Ha5ta >ue no encontremo5 un SALT %E L#(EA, 5e.uimo5 leyendo del =uffer bufferid,::' 11 #ncrementamo5 el indice 0ara el 5i.uiente caracter if (bufferid, $$ \?FF.C]E;%) ( 11 Si lle.amo5 al final del =uffer, lo re5eteamo5 0or 5e.uridad bufferid, $ +' ) ) ) 11 Funcin 0ara anali7ar lo5 dato5 >ue en6amo5 de5de Firefly uint&0Ht parsedecimal(cBar Qstr) ( uint&0Ht d $ +'

2+