70

Click here to load reader

Manual arduino

Embed Size (px)

DESCRIPTION

Manual de ejemplo

Citation preview

  • 1. Arduino: Manual de ProgramacinManual de ProgramacinArduinoLa inteligencia de Arduino se expresa mediante sulenguaje de programacinGua rpida de referenciaTraducido y adaptado:Jos Manuel Ruiz Gutirrez 1

2. Arduino: Manual de ProgramacinDatos del documento originalArduino Notebook: A Beginners Reference Writtenand compiled by Brian W. EvansWith information or inspiration taken from:http://www.arduino.cchttp://www.wiring.org.cohttp://www.arduino.cc/en/Booklet/HomePagehttp://cslibrary.stanford.edu/101/Including material written by:Massimo BanziHernando BarraginDavid CuartiellesTom IgoeTodd KurtDavid Mellisand othersPublished:First Edition August 2007This work is licensed under the Creative CommonsAttribution-Noncommercial-Share Alike 3.0 License.To view a copy of this license, visit:http://creativecommons.org/licenses/by-nc-/Or send a letter to:Creative Commons171 Second Street, Suite 300San Francisco, California, 94105, USA 2 3. Arduino: Manual de Programacinndice de contenidosestructuraestructurasetup()loop()funciones{} uso de llaves; punto y coma/* */ bloque de comentarios// linea de comentariovariablesvariablesdeclaracin de variablesvariable scopetipos de datosbyteintlongfloatarraysaritmticaaritmticacomposicin de asignacionesoperadores de comparacinoperadores lgicosconstantesconstantescierto/falsoalto/bajoentrada/salida 3 4. Arduino: Manual de Programacin control de flujo if if else for while do while E/S digitales pinMode(pin, mode) digitalRead(pin) digitalWrite(pin, value) E/S analgicas analogRead(pin) analogWrite(pin, value) tiempo delay(ms) millis() matemticas min(x, y) max(x, y) aleatorio randomSeed(seed) random(min, max) Puerto serie Serial.begin(rate) Serial.println(data) Serial.print(data, data type) apndice salida digital entrada digital salida de alto consumo (corriente) salida analgica (pwm) potencimetro de entrada Resistencia variable de entrada Salida a servoAPENDICESFormas de Conexionadode entradas y salidasComo escribir una librera para ArduinoSeales analgicas de salida en Arduino (PWM). 4 5. Arduino: Manual de Programacin Comunicando Arduino con otros sistemas Comunicacin va puerto Serie: Envio de datos desde el PC (PC->Arduino) a Arduino por puerto de comunicacin serie: Envo a peticin (toma y dame) Conversor Analgico-Digital (A/D) Comunicacin serie Palabras reservadas del IDE de Arduino Circuitos de interface con Arduino5 6. Arduino: Manual de Programacin estructura de un programaLa estructura bsica del lenguaje de programacin de Arduino es bastante simple y secompone de al menos dos partes. Estas dos partes necesarias, o funciones, encierranbloques que contienen declaraciones, estamentos o instrucciones.void setup(){estamentos;}void loop(){estamentos;}En donde setup() es la parte encargada de recoger la configuracin y loop() es la quecontienen el programa que se ejecutar cclicamente (de ah el termino loop bucle-).Ambas funciones son necesarias para que el programa trabaje.La funcin de configuracin debe contener la declaracin de las variables. Es la primerafuncin a ejecutar en el programa, se ejecuta slo una vez, y se utiliza para configurar oinicializar pinMode (modo de trabajo de las E/S), configuracin de la comunicacin enserie y otras.La funcin bucle (loop) siguiente contiene el cdigo que se ejecutara continuamente(lectura de entradas, activacin de salidas, etc) Esta funcin es el ncleo de todos losprogramas de Arduino y la que realiza la mayor parte del trabajo. setup()La funcin setup() se invoca una sola vez cuando el programa empieza. Se utiliza parainicializar los modos de trabajo de los pins, o el puerto serie. Debe ser incluido en unprograma aunque no haya declaracin que ejecutar.void setup() {pinMode(pin, OUTPUT); // configura el pin como salida } loop() 6 7. Arduino: Manual de ProgramacinDespus de llamar a setup(), la funcin loop() hace precisamente lo que sugiere sunombre, se ejecuta de forma cclica, lo que posibilita que el programa este respondiendocontinuamente ante los eventos que se produzcan en la tarjetavoid loop(){digitalWrite(pin, HIGH); // pone en uno (on, 5v) el pindelay(1000); // espera un segundo (1000 ms)digitalWrite(pin, LOW); // pone en cero (off, 0v.) el pindelay(1000);} funcionesUna funcin es un bloque de cdigo que tiene un nombre y un conjunto de estamentosque son ejecutados cuando se llama a la funcin. Son funciones setup() y loop() de lasque ya se ha hablado. Las funciones de usuario pueden ser escritas para realizar tareasrepetitivas y para reducir el tamao de un programa. Las funciones se declaranasociadas a un tipo de valor type. Este valor ser el que devolver la funcin, porejemplo int se utilizar cuando la funcin devuelva un dato numrico de tipo entero. Sila funcin no devuelve ningn valor entonces se colocar delante la palabra void, quesignifica funcin vaca. Despus de declarar el tipo de dato que devuelve la funcin sedebe escribir el nombre de la funcin y entre parntesis se escribirn, si es necesario, losparmetros que se deben pasar a la funcin para que se ejecute.type nombreFuncin(parmetros) { estamentos; }La funcin siguiente devuelve un nmero entero, delayVal() se utiliza para poner unvalor de retraso en un programa que lee una variable analgica de un potencimetroconectado a una entrada de Arduino. Al principio se declara como una variable local,v recoge el valor ledo del potencimetro que estar comprendido entre 0 y 1023,luego se divide el valor por 4 para ajustarlo a un margen comprendido entre 0 y 255,finalmente se devuelve el valor v y se retornara al programa principal. Esta funcincuando se ejecuta devuelve el valor de tipo entero vint delayVal() {int v; // crea una variable temporal vv= analogRead(pot);// lee el valor del potencimetrov /= 4;// convierte 0-1023 a 0-255return v;// devuelve el valor final }7 8. Arduino: Manual de Programacin {} entre llavesLas llaves sirven para definir el principio y el final de un bloque de instrucciones. Seutilizan para los bloques de programacin setup(), loop(), if.., etc.type funcion() { estamentos; }Una llave de apertura { siempre debe ir seguida de una llave de cierre }, si no es asel programa dar errores.El entorno de programacin de Arduino incluye una herramienta de gran utilidad paracomprobar el total de llaves. Slo tienes que hacer click en el punto de insercin de unallave abierta e inmediatamente se marca el correspondiente cierre de ese bloque (llavecerrada). ; punto y comaEl punto y coma ; se utiliza para separar instrucciones en el lenguaje de programacinde Arduino. Tambin se utiliza para separar elementos en una instruccin de tipo buclefor.int x = 13; // declara la variable x como tipo entero de valor 13Nota: Olvidarse de poner fin a una lnea con un punto y coma se traducir en un errorde compilacin. El texto de error puede ser obvio, y se referir a la falta de una coma, opuede que no. Si se produce un error raro y de difcil deteccin lo primero que debemoshacer es comprobar que los puntos y comas estn colocados al final de las instrucciones. /* */ bloque de comentariosLos bloques de comentarios, o multi-lnea de comentarios, son reas de texto ignoradospor el programa que se utilizan para las descripciones del cdigo o comentarios queayudan a comprender el programa. Comienzan con / * y terminan con * / y puedenabarcar varias lneas./* esto es un bloque de comentario no se debe olvidar cerrar los comentarios estos deben estar equilibrados*/ 8 9. Arduino: Manual de ProgramacinDebido a que los comentarios son ignorados por el programa y no ocupan espacio en lamemoria de Arduino pueden ser utilizados con generosidad y tambin pueden utilizarsepara "comentar" bloques de cdigo con el propsito de anotar informaciones paradepuracin.Nota: Dentro de una misma lnea de un bloque de comentarios no se puede escribir otrabloque de comentarios (usando /* .. */ ) // lnea de comentariosUna lnea de comentario empieza con / / y terminan con la siguiente lnea de cdigo. Aligual que los comentarios de bloque, los de lnea son ignoradas por el programa y noocupan espacio en la memoria.// esto es un comentarioUna lnea de comentario se utiliza a menudo despus de una instruccin, paraproporcionar ms informacin acerca de lo que hace esta o para recordarla msadelante. variablesUna variable es una manera de nombrar y almacenar un valor numrico para su usoposterior por el programa. Como su nombre indica, las variables son nmeros que sepueden variar continuamente en contra de lo que ocurre con las constantes cuyo valornunca cambia. Una variable debe ser declarada y, opcionalmente, asignarle un valor. Elsiguiente cdigo de ejemplo declara una variable llamada variableEntrada y luego leasigna el valor obtenido en la entrada analgica del PIN2:int variableEntrada = 0; // declara una variable y le asigna el valor 0variableEntrada = analogRead(2);// la variable recoge el valor analgico del PIN2variableEntrada es la variable en s. La primera lnea declara que ser de tipo enteroint. La segunda lnea fija a la variable el valor correspondiente a la entrada analgicaPIN2. Esto hace que el valor de PIN2 sea accesible en otras partes del cdigo.Una vez que una variable ha sido asignada, o re-asignada, usted puede probar su valorpara ver si cumple ciertas condiciones (instrucciones if..), o puede utilizar directamentesu valor. Como ejemplo ilustrativo veamos tres operaciones tiles con variables: elsiguiente cdigo prueba si la variable entradaVariable es inferior a 100, si es ciertose asigna el valor 100 a entradaVariable y, a continuacin, establece un retardo(delay) utilizando como valor entradaVariable que ahora ser como mnimo de valor100: 9 10. Arduino: Manual de Programacinif (entradaVariable < 100) // pregunta si la variable es menor de 100{entradaVariable = 100;// si es cierto asigna el valor 100 a esta}delay(entradaVariable); // usa el valor como retardoNota: Las variables deben tomar nombres descriptivos, para hacer el cdigo mslegible. Nombres de variables pueden ser contactoSensor o pulsador, para ayudar alprogramador y a cualquier otra persona a leer el cdigo y entender lo que representa lavariable. Nombres de variables como var o valor, facilitan muy poco que el cdigosea inteligible. Una variable puede ser cualquier nombre o palabra que no sea unapalabra reservada en el entorno de Arduino. declaracin de variablesTodas las variables tienen que declararse antes de que puedan ser utilizadas. Paradeclarar una variable se comienza por definir su tipo como int (entero), long (largo),float (coma flotante), etc, asignndoles siempre un nombre, y, opcionalmente, un valorinicial. Esto slo debe hacerse una vez en un programa, pero el valor se puede cambiaren cualquier momento usando aritmtica y reasignaciones diversas.El siguiente ejemplo declara la variable entradaVariable como una variable de tipoentero int, y asignndole un valor inicial igual a cero. Esto se llama una asignacin.int entradaVariable = 0;Una variable puede ser declarada en una serie de lugares del programa y en funcin dellugar en donde se lleve a cabo la definicin esto determinar en que partes del programase podr hacer uso de ella. Utilizacin de una variableUna variable puede ser declarada al inicio del programa antes de la parte deconfiguracin setup(), a nivel local dentro de las funciones, y, a veces, dentro de unbloque, como para los bucles del tipo if.. for.., etc. En funcin del lugar de declaracinde la variable as se determinara el mbito de aplicacin, o la capacidad de ciertas partesde un programa para hacer uso de ella.Una variable global es aquella que puede ser vista y utilizada por cualquier funcin yestamento de un programa. Esta variable se declara al comienzo del programa, antes desetup().Una variable local es aquella que se define dentro de una funcin o como parte de unbucle. Slo es visible y slo puede utilizarse dentro de la funcin en la que se declar.10 11. Arduino: Manual de ProgramacinPor lo tanto, es posible tener dos o ms variables del mismo nombre en diferentes partesdel mismo programa que pueden contener valores diferentes. La garanta de que slouna funcin tiene acceso a sus variables dentro del programa simplifica y reduce elpotencial de errores de programacin.El siguiente ejemplo muestra cmo declarar a unos tipos diferentes de variables y lavisibilidad de cada variable:int value; // value es visible para cualquier funcinvoid setup() { // no es necesario configurar }void loop() {for (int i=0; i 0 && x < 5) // cierto slo si las dos expresiones son ciertasLogical OR:if (x > 0 || y > 0) // cierto si una cualquiera de las expresioneses cierta Logical NOT: if (!x > 0)// cierto solo si la expresin es falsa constantesEl lenguaje de programacin de Arduino tiene unos valores predeterminados, que sonllamados constantes. Se utilizan para hacer los programas ms fciles de leer. Lasconstantes se clasifican en grupos. cierto/falso (true/false)Estas son constantes booleanas que definen los niveles HIGH (alto) y LOW (bajo)cuando estos se refieren al estado de las salidas digitales. FALSE se asocia con 0 (cero),mientras que TRUE se asocia con 1, pero TRUE tambin puede ser cualquier otra cosaexcepto cero. Por lo tanto, en sentido booleano, -1, 2 y -200 son todos tambin se definecomo TRUE. (esto es importante tenerlo en cuanta)if (b == TRUE);{ejecutar las instrucciones;} 15 16. Arduino: Manual de Programacin high/lowEstas constantes definen los niveles de salida altos o bajos y se utilizan para la lectura ola escritura digital para las patillas. ALTO se define como en la lgica de nivel 1, ON, 5 voltios, mientras que BAJO es lgica nivel 0, OFF, o 0 voltios.digitalWrite(13, HIGH); // activa la salida 13 con un nivel alto (5v.) input/outputEstas constantes son utilizadas para definir, al comienzo del programa, el modo defuncionamiento de los pines mediante la instruccin pinMode de tal manera que el pinpuede ser una entrada INPUT o una salida OUTPUT.pinMode(13, OUTPUT); // designamos que el PIN 13 es una salida if (si)if es un estamento que se utiliza para probar si una determinada condicin se haalcanzado, como por ejemplo averiguar si un valor analgico est por encima de uncierto nmero, y ejecutar una serie de declaraciones (operaciones) que se escribendentro de llaves, si es verdad. Si es falso (la condicin no se cumple) el programa salta yno ejecuta las operaciones que estn dentro de las llaves, El formato para if es elsiguiente:if (unaVariable ?? valor){ejecutaInstrucciones;}En el ejemplo anterior se compara una variable con un valor, el cual puede ser unavariable o constante. Si la comparacin, o la condicin entre parntesis se cumple (escierta), las declaraciones dentro de los corchetes se ejecutan. Si no es as, el programasalta sobre ellas y sigue.Nota: Tenga en cuenta el uso especial del smbolo =, poner dentro de if (x = 10),podra parecer que es valido pero sin embargo no lo es ya que esa expresin asigna elvalor 10 a la variable x, por eso dentro de la estructura if se utilizara X==10 que eneste caso lo que hace el programa es comprobar si el valor de x es 10.. Ambas cosas sondistintas por lo tanto dentro de las estructuras if, cuando se pregunte por un valor sedebe poner el signo doble de igual ==16 17. Arduino: Manual de Programacin if else (si.. sino ..)if else viene a ser un estructura que se ejecuta en respuesta a la idea si esto no secumple haz esto otro. Por ejemplo, si se desea probar una entrada digital, y hacer unacosa si la entrada fue alto o hacer otra cosa si la entrada es baja, usted escribira que deesta manera:if (inputPin == HIGH) // si el valor de la entrada inputPin es alto{ instruccionesA; //ejecuta si se cumple la condicin}else{ instruccionesB; //ejecuta si no se cumple la condicin}Else puede ir precedido de otra condicin de manera que se pueden establecer variasestructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma quesean mutuamente excluyentes pudindose ejecutar a la vez. Es incluso posible tener unnmero ilimitado de estos condicionales. Recuerde sin embargo qu slo un conjunto dedeclaraciones se llevar a cabo dependiendo de la condicin probada:if (inputPin < 500){instruccionesA; // ejecuta las operaciones A}else if (inputPin >= 1000){instruccionesB; // ejecuta las operacione B}else{instruccionesC; // ejecuta las operaciones C}Nota: Un estamento de tipo if prueba simplemente si la condicin dentro del parntesises verdadera o falsa. Esta declaracin puede ser cualquier declaracin vlida. En elanterior ejemplo, si cambiamos y ponemos (inputPin == HIGH). En este caso, elestamento if slo chequeara si la entrada especificado esta en nivel alto (HIGH), o +5v. forLa declaracin for se usa para repetir un bloque de sentencias encerradas entre llaves unnmero determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se 17 18. Arduino: Manual de Programacinvuelve a testear la condicin. La declaracin for tiene tres partes separadas por (;)vemos el ejemplo de su sintaxis:for (inicializacin; condicin; expresin){ejecutaInstrucciones;}La inicializacin de una variable local se produce una sola vez y la condicin se testeacada vez que se termina la ejecucin de las instrucciones dentro del bucle. Si lacondicin sigue cumplindose, las instrucciones del bucle se vuelven a ejecutar. Cuandola condicin no se cumple, el bucle termina.El siguiente ejemplo inicia el entero i en el 0, y la condicin es probar que el valor esinferior a 20 y si es cierto i se incrementa en 1 y se vuelven a ejecutar las instruccionesque hay dentro de las llaves:for (int i=0; i