Está en la página 1de 14
COMENZANDO CON ARDUINO 5.1, Estructura La estructura bisica del Ienenaje dep en al menos dos partes u finciunes que e1 wramacion Arduing es bastante simple v se urzaniza ran bluqnes de declaraviones. veid setup t statements; } void loopQ t statements; 3 Ambas fanciones son requeridas para que el programa fineione, setup() La funcién sefup deberfa contencr la declaracion de cualquier variable al comicnzc del programa. Es lh primera funcin a ejecutar en cl programa, es ejecutada tna vez ¥ 6s usada para asignar pinMode inicializar las comunicaciones serie, veid setup() t PinMode(pin, OUIPUT); //ajusta ‘pin? como salida 3 loop() La fimeisn laqp se ejecta a conti levendo entradas, activando salidas. etc, Esta fimeitn es el niicleo de todos los pre ¥ hace la mayor parte del trabajo. jain ¢ incluye cl eddigo que se ejecuta continuamente = amas Arduine veid loop() t digitalWrite(pin, HIGH); //Activa ‘pin’ delay (1000); //espera un segundo digitalifrite(pin, LOW); //Desactiva *pin’ delay (1000); //espera un segundo 3 funciones Una fimeion es un bloque de cédigo que tiene un nombre yum gmapo de declaraciones que se ejecutan cuando se Hama a Ta faneién, Podemos hacer uso de funciones integradas como woid setup() v void leopt) 0 escribir mievas. Las fimciones se escrien para ejecutar tarcas repetitivas y reducir el desorden en. un pu ma, En primer Ingar se declata el tipo de Ja fineion. que sera el valor retornado por Ja fianc (int, voids). A continnacién del tipo. se declara el nombre de la fimeién ¥, entre parentesis, los parimetios que se pasan ala fincisn, type functionllame (parameters) t statements; 3 La siguiente fine valor de um p int delayVal(). asiena un valor de retarde en un programa por Iectura del int delayvalQ t int v3 //orea una variatle temporal °v? v = analogRead(pet); //lee el valor del petenciémetro v= 4 //eonvierte 1023 a 0-255 return v; //devuelve el valor final de v 3 Haves {} Las Tlaves definen el comicnzo y el final de Llogues de funcion y bloques de deelaraciones como vond loep() ¥ sentence for ¢ if. Las Tlaves dclien estar balanceadas (a una Have de apertura { lebe segnitle una we de cierre }). Las Haves no balanceadas provocan errores de compi veid loop() t statements; 3 EL entomo Arduino incluye uma prictica caracteristica para chequear el balance de Ives, Sélo scleceiona una Tlave ¥ su compahera légica aparecer resaltada, punto y coma : Un punto v coma debe usatse al final de eada deckiacién v separa los elementos del programa, Tambien se ust para separa los clementos en um bucle fer int x = 13; //declara la variable ’x’ como el entero 13 Nota: Olvidar un punto y coma al final de uma declaracion produciri un error de compilacion bloques de comentarios /*...*/ Los bloques de comentarios. 0 comentarios multilinea, son areas de texto ignoradas par el programa ¥ <0 usan para erandes descripeiones de cédigo o comentarios que avudan a ottas personas acentender partes del programa, Empiczan con ,* y temminan eon *” y pueden abarear multiples Tineas. ys este es un bloque de conentaric encerrado no olvides cerrar el comentario tienen que estar balanceados! v Como Ios comentarios som ignorados por el programa ¥ no ccupan espacio en memoria deben suse generdsamente v tambifn pneden nsarse para y; //x es mayer que y x <= y; //x es menor ¢ igual que y x >= ys //x es mayor ¢ igual que y operadores légicos Los operadores Iigicos son normalmente una forma de comparar dos expresiones y devuelven TRUE 0 FALSE dependiendo del operador. Hay tres operadores Iaicos, AND, OR y NOT, que se tisan a menudo en declaraciones if. //MIL logico i£GD0 && x<5) //verdadero sélo si las dos expresiones sen ciertas //9R Logic: ifG20 I] 0) //verdadero ai all mencs una expresion es cierta /INCT logico: if(1G@0)) //verdadero sélo si la expresién es falsa 5.5. Constantes EL engnaje Arduino tiene uno pata hacer los programas mas Ie uuantos valores predefinidos que se Haman constantes, Se usan es, Las constantes se clasifican en. grupos, true/false Estas son constantes Booleanas que definen niveles Iogicos. FALSE se define como 0 {cer} mientras TRUE es 1 ou valor distinto de 0. if TRUE) t doSomething; + high/low Estas constantes definen los niveles de pin como HIGH o LOW y se usan cuando se Teen 0 56 escriben los pines digitales. HIGH esta definide como el nivel 1 Kgico, ON 6 5 Vy mientras que LOW es €] nivel Iigico 0, OFF 6.0 V. digitalirite(13, HIGH); input /output Constantes tsadas con la ftneién prnMode() para definir el modo de un pin digital come INPUT uw OUTPUT pinMode(13, OUTPUT) ; 5.6. Control de flujo if f comprucban si 1 ha sido aleanzada y ejecatan todas Ins sene ata, Si es falsa el programa ignora la sentencia, Las sentencias if rta condic tencias dentro de las Iaves si la declaracién es ¢ if(someVariable 7? value) t doSomething; 3 Nota: Cuidate de usar «—» en Ingar de «——» dentro de la declaracién de la sentencia f. if... else _ else permite tomar decisiones «este = 0 este». if(inputPin == HIGH { doThingA; else { doThingB; 3 alse pede preceder a otra comprobacién if, por lo que multiples v muttias comprobaeiones exchie sivas pueden ejecutarse al mismo tiempo, if(inputPin < 500) t doThingA; 3 else if(inputPin >= 1000) t doThingB; 3 else t doThingC; 3 for La sentencia for se usa para repetir un bloque de declaraciones encermadas en aves un niimero specifiy de veces, Un contador de incemento se ust st menudy para incrementar ¥ tenninar cL bucle, Hay tres partes seperadas por punto y coma (.). en la cabecera del bucle fer(Gnicializacion; condicion; expresion) { doSomething; 3 La inicializaciém de uma variable local. o contador de incremento, sucede primero v una scla una vez, Cada vez que pasa el bucle, la condicién siguiente es comprobada, Si la condicion devuelve TRUE, las deelaraciones v expresiones que siguen se ejecutan v la condicion se comprucha de nuevo. Cuando la condicién se vuelve FALSE, el bucle termina. for(int i=0; i<20; i+} — //declara i, comprueba si es menor { //que 20, incrementa i en 1 digitalirite(13, HIGH); //activa el pin 13 delay (250) ; //pansa por un 1/4 de segundo digitalirite(i2, LOW; — //desactiva el pin 13 delay (250) ; //pausa por un 1/4 de segundo 3 while EI bucle whale se repetira continwamente, ¢ infinitamente, hasta que la expresion dentro del paréntesis se vuelva falsa. Meo debe cambiar Ia variable testeada, 0 el bnele white munca saldra, Esto podria estar en tu codigo, como por ejemplo una variable inerementada, o una condicion externa, como tm sensor de comprobacién, while(someVariable ?7 value) t doSomething; 3 while(someVariable < 200) //comprueta si es menor que 200 t doSomething; //ejecuta las sentencias encerradas sonelfariable++; //inerementa la variable en 1 3 do... while Fl buele do... whale es un buele que trabaja de la misma forma que el bucle wile, con Ta exeepeidn de que la condiciGn es testeada al final del buele, por Io que el buele do... while siempre se ejecutara al menos una vez. de t doSometining; Jwhile(someVariable 77 value); de t x = readSensors(); //azigna el valor de readSensors() a x delay (50) ; //pausa de 50 milisegundes Jwhile(x < 100); //repite si x es menor que 100 5.7. B/S digital pinMode(pin, mode) Se usa en cid setup() para configurar un pin especifico para que se comporte 6 como INPUT © come OUTPUT, pintMode(pin, OUTPUT); //ajusta ‘pin? como salida Los pines digitales de Arduino estan ajustados a INPUT por defecto, por Io que no necesitan ser Jeclarades explicitamente como entradas con pinMode(). Los pines configurados como INPUT se dice que estén e un estado de alta impedancia. Hay también convenientes resistencias de palleup de 20/KOhm. integadas en el chip ATmeen que pueden ser accedidas por software. .\ estas resistencias pullup: integradns se accede dela siguiente manera, pinMode(pin, INPUI) //ajusta *pin’? como entrada digitaliirite(pin, HIGH; //activa la resistencia de pull-up Las resistencias de palleup se usarian normalmente para conectar entradas como interruptores. Los pines configurades como OUTPUT se dice que estan en un estadc de baja impedancia y pueden proporcionar 10 mA a otros dispositivos circuites. Nota: Cortocireuitos en Jos pines de Arduino o corriente excesiva puden danar o destruir el pin de salida. o daar el chip \Tmega. A menudo es una buena idea conectar un pin QSUTPUT a. un dispositive externo en serie con una resistencia de {70Ohm o 1KObm. digitalRead(pin) Lee el valor desde un pin digital especificado con el resultado HIGH 0 LOW. Fl pin puede ser especificado o como una variable o como una constante (0 = 13} value = digitalRead(Pin); //azusta ’value? igual al pin de entrada digitalWrite(pin, value) Devuelve 0 el nivel l6xico HIGH o LOW a (activa o desactiva) um pin digital especificado. FL pin pede ser expecificado como una viable o constante (0 = 13). digitalirite(pin, HIGH); //ajusta *pin’ a HIGH //Ezemplo de programa int led = 13; //conecta *led? al pin 13 int pin= 7; — //conecta ’pushbutton’ al pin 7 int value = 0; //variable para almacenar el valor leido void setup() { pinMode(led, CUIFUT); //azusta el pin 13 como salida PinMode(pin, INPUT); //azusta el pin 7 como entrada 3 veid loop. { value = digitalRead(pin); //ajusta *value’ igual al pin de entrada digitalirite(led, value); //ajusta *led? al valor del boton 3 5.8. E/S analogica analogRead(pin) Lee el valor desde tn pin. analigico especificado con tna resolucién de 10 bits, Esta funeion sélo trabaja en los pines analigices (0 - 5}, Los valores enteros devucltos estan en el rango de 0a 1023, value = analogRead(pin}; //ajusta *value? igual a ’pin? Nota: Los pines analéaicos al contrario que los digitales, no necesitan ser declarados al principic como INPUT u OUTPUT. analogWrite(pin, value) Eseribe um valor pseudo analoaico usando modulacién por anche de pulso («PWM en inek’s} aun pin de salida marcado como PWM. En los Ardainos ms novos con el chip ATmegalé. esti fimeion trabaja en los pines 3. | 10 ¥ 11, Los Ardainos mis antigo con an ATmeeas sole sopotta los pines 9. 10 ¥ 11. El valor puede ser especificado come tma variable o constante con un valor de 0a 255, analogirite(pin, value); //escribe ’value’ al ’pin’ analogico Valor Nivel de salida 0 IV Cf [OV GBtdeAviVO Td Bs [OV 2defjviVG 2det OVO Te fv Sv Ge Tde & DS BVO Cuadro 5.1: Relacitn valorssalida con analog iite() EL valor de salida varia de 0 a5 V’ sein el valor de entrada (de 0a 255) en fimeicn del tiempo de pulbo. Sif es el tiempo de pulto. la tabla 5.1 muestra la equivalencia entre el valor ¥ In salida en fimeion del tiempo. Como esta es tna fncién hardware, el p Ja a analog trite en segundo plano hasta Ia si chgitalltcad o digitalWrite en cl mismo p 1 generar tna onda estétien después de una lamar fente Hamada a analoglrate (0 una llamada a int led = 10; //LED con una resistencia de 220chm en el pin 10 int pin = 0; /potencionetro en el pin analogico 9 int value; /yvalor para lectura veid setup(){} //setup no es necesario void Loop() t value = analogRead(pin); //ajusta ’value’ igual a ’pin’ value /= 4; //convierte 0-1023 a 0-265 analoghirite(led, value); //saca la sefial PuM al led 3 5.9. Tiempo delay(ms Pausa tu programa por la cantidad de tiempo especificada en milisegundos, donde 1000 es igual a1 segunda, delay(1000); //espera por un segunds millis() Devuelve el niimero de m1 actual como un valor fong si seeds desde que la placa Arduino empez6 a ejecutar el programa value = millis(); //ajusta *value’ igual a millis() Nota: Este nimero se desbordanit (1esetenr de nuevo a vero), despucs de aprasimadamente § horas. 5.10. Matematicas min(x.y) Calcula cl minimo de dos nimores de cualquier tipo de datos v devuelve el nitnero mas pequeitc value = min(value, 100}; //asigna a ‘value? al mis pequefio de value’ ¢ 100, //asegurandose que nunca superara 100. max(x,y) Caleula el miximo de dos mimeros de enalquicr tipo de datos y devuelve el nimero mids grande, value = max(value, 100); //asigna a ‘value’ al mis grande de *value’ ¢ 190, //asegurandoze que eg al menos 100. 5.11. Aleatorio randomSced(seed) Asigna un valor. o semilla («secd> en inglés}, como cl punto de partida para la fumcisn manda, randomeed (value); //aSigna *value’ como 1a semilla aleatoria Come el Arduinc ‘apaz de crear un namerc verdaderamente aleatorio. nandomSeed te permite colocar una variable. constante, u otra fumeiGn dentro de la fancién random, lo cual ayuda a generar mas nimeros «random aleatorios. Existen una vaviedad de diferentes semillas. o faci que pueden ser usadas en csta fineién incluyendo millis() 0 ineluso analoghead/) para Teer ru eléetrico a través de un pin analé nes. random(max) random(min, max) La fancién randor Jos valores man y te permite dewolver nimeros pscurdo aleatorios en un rango especifieado por value = randem(100, 200); //asigna a ‘value’ un nimero aleatorio //entxe 100 y 200, Nota: Usar esto después de usar la faneion randomSerd/). int randNumber; //variable para almacenar e1 valor //aleatorio int led = 10; //LED con una resistencia de 220chm //en e1 pin 10 veid setup0{} //setup no es necesaric veid Loop) t randonSeed(millis()) ; //asigna millisQ ccmo semilla randilumber = random(265) ; //numexe aleatorio de 0 a 285 analogiirite(led, randilumber); //salida de 1a sefial PWM delay (500) ; 3 Serie Serial.begin(rate) \bre el puerto serie ¥ asigna Ia tasa de bandios para Ta transmnision de dates serie, La tipica tas Je Laudios para comunicatse con el ordenador ¢s 950 aunque otras velocidades estiin soportadas, veid setup() t Serial.begin(@60¢); //abre el puerto serie //azusta la taga de dates a 9690 tps 3 Nota: Cando se usa Ja commicacion serie, los = digitales 0 (Rx} v 1 (Tx) no pueden ser usados al mismo tiempo, Serial.printn(data) Tmprime datos al puerto serie. seguide de un retorno de carro v avanee de linea automiiticos. Este comande toma la misma forma que Serial. prt, pero es mas facil para leer datos en el Serial Monitor’. Serial.println(analcgValue); //envia ¢1 valor de ’analcgValue’ //Bjemple de aplicacion void setup() { Serial .begin(9600) ; //ajusta al serie a 9600 bps 3 void loopO) t Serial.printIn(analogkead(0}); //envia valer analogico delay (1000) ; //pauga por 1 segunde 3 "Mis informacion en: 4.2 Jntroduecian af Etorno Arduino

También podría gustarte