Codigos practivos

download Codigos practivos

of 16

description

Un compendio de los mejores codigos

Transcript of Codigos practivos

  • INICIO COMUNIDAD AGENDA QU ES CAMON? BLOG

    Autoformacin

    Avanzando

    con Arduino

    Avanzando para aprender a programar Arduino.

    Valoracin:

    1 voto

    0 comentarios

    Avanzando con Arduino

    Avanzando para aprender a programar Arduino.

    Cmo programar Arduino Estructuras Estructuras de control

    Abriendo el primer ejemplo

    El primer paso para comprobar que todo lo que hemos hecho hasta ahora est bien y familiarizarnos con el interfaz de desarrollo, es abrir uno de los ejemplos. Se recomienda abrir el ejemplo led_blink. Para ello debemos acceder a travs del men File --> Sketchbook --> Examples --> led_blink

    Pgina 1 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • Subiendo el programa de ejemplo a la placa arduino

    El ejemplo led_blink lo nico que hace es parpadear un LED que est colocado en el pin nmero 13 de la placa. Vamos a ver qu hay que hacer para subir el programa a la placa Arduino.

    Primero comprobamos que el cdigo fuente es el correcto. Para ello pulsamos el botn de verificacin de cdigo que tiene forma de tringulo inclinado 90 grados.

    Si todo va bien deber aparecer un mensaje en la parte inferior de la interfaz indicando Done compiling.

    Una vez que el cdigo ha sido verificado procederemos a cargarlo en la placa. Para ello tenemos que pulsar el botn de reset de la placa e inmediatamante despus pulsar el botn que comienza la carga.

    Subiendo el programa a la placa

    Durante la carga del programa, en la placa USB, se encendern los LED que indican que se estn

    enviando y recibiendo informacin por el puerto serie: TX/RX.

    Subiendo el programa

    Si todo se ha realizado correctamente debe aparecer un mensaje como el que se muestra a continuacin:

    Pgina 2 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • El programa se ha cargado correctamente en la placa

    Ahora tan slo queda esperar unos 8 segundos aproximadamente para comprobar que todo ha salido

    bien. Si el led colocado en el pin 13 de la placa se enciende y se apaga cada segundo entonces todo ha ido bien. Por fin tenemos todo listo para empezar a trabajar con la placa Arduino.

    Cmo programar Arduino

    Ver_mapa_conceptual_esquema.png

    Estructuras

    void setup()

    La funcin setup() es llamada justo en el momento en que el programa comienza. Se utiliza para

    inicializar variables, definir los modos de entrada o salida de los pines, indicar libreras, etc.

    Ejemplo

    int buttonPin = 3;

    void setup() //Seccin Setup de la estructura de programa

    {

    Pgina 3 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • beginSerial(9600);

    pinMode(buttonPin, INPUT);

    }

    void loop() //Seccin loop de la estructura de programa

    {

    if (digitalRead(buttonPin) == HIGH)

    serialWrite('H');

    else

    serialWrite('L');

    delay(1000);

    }

    void loop()

    Despus de crear la seccin setup(), que inicializa y asigna los valores iniciales, la seccin loop() hace precisamente lo que su nombre indica en ingls(bucle), y se repite continuamente, permitiendo que tu programa mute y responda. Se usa para controlar de forma activa la tarjeta Arduino.

    El tiempo del bucle, vara segn el nmero de instrucciones que contenga. Y se puede conocer y controlar con las funciones de temporizacin (millis(), delay(), etc).

    Ejemplo

    int buttonPin = 3;

    // setup inicializa la comunicacin serie y el modo del

    //pin conectado al pulsador,como entrada

    void setup() {

    beginSerial(9600);

    pinMode(buttonPin, INPUT);

    }

    // loop chequea el pin de entrada conectado al pulsador continuamente,

    // dependiendo si es pulsado o no,enviar un valor diferente va comunicacin serie

    void loop() {

    Pgina 4 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • if (digitalRead(buttonPin) == HIGH)

    serialWrite('H');

    else

    serialWrite('L');

    delay(1000);

    }

    Declaracin de Variables

    Las variables son expresiones que almacenan valores, como las capturas o lecturas de los valores de

    entrada de un pin analgico o sensor. (Para ms informacin sobre asignacin de modos de entrada (input) o salida (output) a los pines referirse la funcin pinMode ).

    Inicializas o das valor a una variable, hacindola igual al valor que quieres almacenar. En el

    siguiente cdigo se declara una variable "inputVariable", y entonces se inicializa con el valor capturado desde el pin analgico nmero #2:

    int inputVariable = 0; # Declara la variable; slo necesario una vez.

    inputVariable = analogRead(2); # le asiga a la variable el valor de entrada del pin analgico #2

    "inputVariable" es la variable. La primera lnea es para indicar que contendr un dato de tipo

    "int" (entero corto). La segunda lnea le asigna a la variable el valor capturado del pin analgico nmero #2. Lo que hace que se pueda acceder al valor del pin #2 desde cualquier parte del cdigo.

    Una vez que a la variable le ha sido asignado un valor (o reasignado), se puede comprobar su valor

    para saber si cumple ciertas condiciones, o se puede usar su valor directamente. Por ejemplo, el siguiente cdigo comprueba si la variable "inputVariable" es menor que 100, y realizar una pausa

    basada en el valor de dicha variable, la cual tendr siempre como mnimo un valor de 100ms:

    if (inputVariable < 100) { inputVariable = 100 }

    delay(inputVariable)

    Declaracin de funciones

    Las funciones te permiten crear piezas modulares de cdigo, de forma que se puedan realizar ciertas rutinas y retornar al rea de cdigo desde donde se realiz la llamada a la funcin. A continuacin

    mostramos un ejemplo de la llamada a una funcin:

    displayNumber(value);

    Pgina 5 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • Cuando Arduino ejecuta esta lnea, busca la declaracin de dicha funcin en algn lugar del cdigo, y le pasa el valor de la variable "value" como un argumento (contenido entre los parntesis) a la

    funcin. A continuacin se muestra un ejemplo de como podra ser la declaracin de la funcin:

    void displayNumber(int incomingValue){

    printInteger(incomingValue);

    // otro cdigo dentro de la funcin

    }

    De forma que una funcin se define por el tipo de valor que devuelve (enlace a declaracin de

    variables), por su nombre, por la lista de argumentos o parmetros que le son pasados (expresin entre parntesis) y el bloque de cdigo que se ejecuta cuando se realiza la llamada.

    El tipo "void" del ejemplo, significa nada e indica que la funcin no va a devolver ningn valor.

    Los parmetros o argumentos pueden ser pasados por dos mtodos o mecanismos: "por valor" o "por referencia".

    Cuando son pasados "por valor", significa que slo se aplica una simple operacin de asignacin o copiado (=) entre las varibles externas a la funcin y las variables locales a la funcin. Como en el ejemplo anterior, el parmetro o argumento "num" va obteniendo sus valores del contexto de la

    llamada a la funcin. Dicha asignacin se realiza justo antes de que la funcin empiece a ejecutarse.

    El otro mtodo, paso de parmetros "por referencia", se utiliza en el caso de que el parmetro sea de

    tipo estructura, como por ejemplo un vector.

    Prototipado

    En lenguaje de programacin C, cualquier funcin que se cree en el cdigo, debe llevar asociada una declaracin de prototipado de la funcin, al comienzo de tu cdigo y antes de la seccin o bloque

    setup(). Dicha declaracin es similar a la declaracin que se realiza con una variable, y bsicamente es la primera lnea de la declaracin de tu funcin, finalizada por el punto y coma. En otras palabras, se da su nombre y sus argumentos, pero no su cdigo.

    void displayNumber(int incomingValue);

    Con ello se prepara al programa para que pueda saber que tipo de funcin se va a ejecutar y que argumentos se le pasarn.

    Estructuras de control

    if (condicin)

    Pgina 6 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • La estructura If comprueba si la condicin contenida entre parntesis () se ha cumplido, como por ejemplo si una entrada supera un cierto nmero. El formato de la comprobacin que se realiza en el

    if es:

    if (algunaVariable > 50) {

    // hacer algo aqu

    }

    El programa comprueba si la variable "algunaVariable" es ms grande que 50. Si es as, el programa

    realiza una accin particular. Dicho de otra manera, si la declaracin entre parntesis es verdadera, el cdigo dentro de los parntesis se ejecuta. Si no, el cdigo no se ejecuta o se salta el cdigo.

    Las condiciones que van a ser comprobadas o evaluadas, dentro de los parntesis requieren el uso de

    uno o ms operadores:

    Operadores:(Enlace a operadores relacionales)

    x == y (x es igual a y) x != y (x no es igual a y)

    x < y (x es menor que y) x > y (x es mayor que y) x = y (x es mayor que o igual a y)

    if /else

    La estructura if/else da un mayor control sobre el flujo o secuenciacin del cdigo que la estructura de control bsica if, permitiendo agrupar mltiples comprobaciones juntas.

    Por ejemplo, si quieres comprobar una entrada analgica, y hacer una cosa si su valor fue menor que 500, y otra cosa si su valor fue 500 o mayor, se debera de escribir de la siguiente forma:

    if (pinFiveInput < 500)

    {

    //hacer cosa A

    }

    else

    {

    //hacer cosa B

    Pgina 7 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • }else tambin puede ser precedido por otra comprobacin if, as que se podran ejecutarse al mismo

    tiempo mltiples comprobaciones y mutuamente excluyentes.

    for (init; test; update)

    Realiza el control sobre una secuencia de repeticin. Se compone de tres partes: init (inicializado de la variable local), test (condicin) , y update (actualizacin del valor la variable local), cada parte

    debe ser separada por punto y coma ";". El bucle continua hasta que la condicin establecida se cumple (es verdad) o no (falsa). Es til cuando se usa en combinacin con vectores y operar sobre grupo de datos/pines.

    Cuando se ejcuta el for, ocurre la siguiente secuencia de eventos:

    1. Se ejecuta la parte init (inicializado de la variable local) de la declaracin.2. Se evala la condicin, si se cumple (es verdad) o no (falsa).

    3. Si se cumple la condicin (es verdad), salta al paso 4. Si no se cumple la condicin (es falsa), salta al paso 6.

    4. Ejecuta las sentencias o el cdigo que est dentro del bloque.5. Ejecuta la parte de update (actualizacin de la variable local) y salta al paso 2.6. Sale del bucle.

    Nota Importante: En lenguaje de programacin C no necesitas inicializar la variable local. Puedes hacerlo directamente dentro de la declaracin for. Es una diferencia con respecto a otros lenguajes,

    lenguajes basados en java.

    Parmetros

    for(init; test; update) {

    statements (sentencias o cdigo)

    }

    Switch Case

    Como la estructura de control "If", la estructura de control "switch case" ayuda en el control del flujo o secuenciacin de los programas. Permite hacer una lista de "casos" posibles dentro de un bloque

    delimitado por parntesis, en el cual arduino encontrar el caso ms idneo y lo ejecutar.

    Parmetros

    Pgina 8 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • var - variable a validar con cada uno de los casos declarados.

    default - si no se d ninguno de los casos, se ejecutar la parte definida en el default

    break - importante, sin "break", la estructura de control contina realizando la comprobacin con el caso siguiente. Si tambin se cumple, se ejecuta de igual modo, lo que podra no ser tu intencin. "Break" le indica a la estructura que pare de buscar en el resto de los casos, y finalice la funcin.

    Ejemplo

    switch (var) {

    case 1:

    //hacer algo cuando var == 1

    break;

    case 2:

    //hacer algo cuando when var == 2

    break;

    default:

    // si ninguna de las anteriores, hacer la parte de default

    }

    While (expresin)

    Realiza un bucle de forma continuada hasta que la expresin contenida dentro de los parntesis ()

    deja de ser verdadera. Es til para crear bucles propios, pero asegurando el seguimiento de alguna de las variable usadas para parar o salir del bucle, si esa es la intencin.

    Ejemplo

    var = 0; while(var < 200){

    //hacer que algo se repita 200 veces var++;

    }

    Ms sintaxis:

    ; (punto y coma)

    , (coma) . (punto) {} (parntesis)

    [] (corchetes) // (comentarios de lnea)

    /* */ (comentarios de multi-lnea) * Puntero (vector) = (asignacin)

    #define

    Pgina 9 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • Un define es un componente til en el lenguaje de progracin C, que permite dar un nombre a un

    valor antes de que el programa sea compilado.

    Puedes definir nmeros en Arduino, para que no ocupen espacio de memoria de programa en el chip. La definicin en Arduino tiene la misma sintaxis que la definicin en C:

    #define constantName value

    #include

    Para utilizarlas, slo es necesario aadir la correspondiente declaracin #include al comienzo de tu cdigo o proyecto.

    Variables:

    char (caracter) int (entero corto) long (entero largo)

    boolean (lgica) Byte (Tipo de datos) Array (vector)

    string (Cadena de carcteres)

    Constantes

    HIGH | LOW INPUT | OUTPUT

    true | false

    Pines digitales

    pinMode(pin, mode)

    Configura el pin especificado para que se comporte como una entrada (input) o una salida (output).

    Ejemplo

    Pgina 10 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • int ledPin = 13; // LED conectado a pin digital 13

    void setup() {

    pinMode(ledPin, OUTPUT); // asigna al pin digital como salida

    }

    void loop() {

    digitalWrite(ledPin, HIGH); // enciende el LED

    delay(1000); // espera un segundo

    digitalWrite(ledPin, LOW); // apaga el LED

    delay(1000); // espera un segundo

    }

    configura el pin nmero 13 para que funcione como un pin de salida (output).

    digitalWrite(pin, value)

    Asigna el valor de salida HIGH o LOW al pin especificado.

    Ejemplo

    int ledPin = 13; // LED conectado a pin digital 13

    void setup() {

    pinMode(ledPin, OUTPUT); // asigna al pin digital como modo pin de salida

    }

    void loop() {

    digitalWrite(ledPin, HIGH); // enciende LED

    delay(1000); // espera un segundo

    digitalWrite(ledPin, LOW); // apaga el LED

    delay(1000); // espera un segundo

    }

    Asigna HIGH al pin 13, realiza un retardo de un segundo, y vuelve a asignar LOW al pin.

    int digitalRead(pin)

    Pgina 11 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • Lee o captura el valor de entrada del pin especificado, dar valores HIGH o LOW. Devuelve un

    valor de tipo entero HIGH(1) o LOW (0).

    Ejemplo

    int ledPin = 13; //

    int inPin = 7; // pulsador conectado a pin digital 7

    int val = 0; // variable para almacenar el valor de captura o lectura

    void setup() {

    pinMode(ledPin, OUTPUT); // asigna al pin digital 13 como modo pin de salida

    pinMode(inPin, INPUT); // asigna al pin digital 7 como modo pin de entrada

    }

    void loop() {

    val = digitalRead(inPin); // lee o captura el valor de entrada del pulsador

    digitalWrite(ledPin, val); // asigna el valor capturado al LED

    }

    Asigna al pin 13 (salida), el mismo valor capturado en el pin 7 (entrada).

    unsigned long pulseIn(pin)

    Lee un pulso (en estado HIGH (1) o LOW(0)) sobre un pin. Por ejemplo, si el valor es HIGH, pulseIn() espera hasta que el pin est en estado HIGH, entonces empieza a temporizar, y cuando el

    pin vuelve al estado LOW, se para el temporizador. De este modo, se devuelve el ancho del pulso en microsegundos. Devuelve el ancho del pulso(en microsegundos).

    Ejemplo:

    int pin = 7; unsigned long duration;

    void setup() {

    pinMode(pin, INPUT);

    }

    Pgina 12 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • void loop() {

    duration = pulseIn(pin, HIGH);

    }

    Pines analgicos

    int analogRead(pin)

    Lee o captura el valor de entrada del especificado pin analgico, la tarjeta Arduino realiza una conversin analgica a digital de 10 bits. Esto quiere decir que mapear los valores de voltage de

    entrada, entre 0 y 5 voltios, a valores enteros comprendidos entre 0 y 1024.

    Los pines analgicos, al contrario que los pines digitales, no necesitan ser declarados como modo

    INPUT (entrada) o OUTPUT (salida). Devuelve un valor entero comprendido en el rango de 0 a 1024.

    Ejemplo

    int ledPin = 13; // LED conectado a pin digital 13

    int analogPin = 3; // potentimetro conectado a pin analgico 3

    int val = 0; // variable para almacenar el valor capturado

    int threshold = 512; // valor de disparo o umbral (1024/2)

    void setup() {

    pinMode(ledPin, OUTPUT); // asigna modo salida el pin digital 13

    }

    void loop() {

    val = analogRead(analogPin); // captura el pin de entrada

    if (val >= threshold) {

    digitalWrite(ledPin, HIGH); // enciende el LED

    } else {

    digitalWrite(ledPin, LOW); // apaga el LED

    }

    }

    Pgina 13 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • Asigna el valor HIGH(1) o LOW(0) al pin 13, dependiendo de que si el valor de entrada al pin analgico es mayor que un cierto valor de disparo o umbral.

    analogWrite(pin, value)- PWM

    Escribe o asigna un valor analgico (seal PWM) a pines 9,10 y 11 ?. Se puede usar para encender un Led e ir variando la intensidad de su brillo o impulsar un motor a distintas velocidades. Despus

    de invocar o realizar una llamada a la funcin analogWrite, el pin generar una seal estable hasta la prxima invocacin o llamada de la funcin analogWrite (o una llamada a digitalRead o digitalWrite sobre el mismo pin). No devuelve nada.

    Ejemplo

    int ledPin = 9; // LED conectado al pin digital 9

    int analogPin = 3; // potencimetro conectado al pin analgico 3

    int val = 0; // variable para almacenar el valor de captura o lectura

    void setup() {

    pinMode(ledPin, OUTPUT); // asigna el pin como modo salida

    }

    void loop() {

    val = analogRead(analogPin); // lee o captura el pin de entrada

    analogWrite(ledPin, val / 4);

    // los valores de analogRead van desde 0 a 1023, los valores de analogWrite desde 0 a 255

    }

    Asigna a la salida que va al LED el valor proporcional capturado desde el potentimetro.

    Publicado por sarok el 18 de Agosto de 2008

    Compartir

    Pgina 14 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • Publicado por

    sarok

    Miembro desde el 21 de Abril de 2008 17:01

    Ver otros contenidos de sarok

    Sobre este tema

    Programar Arduino

    Primeros pasos con Arduino Avanzando con Arduino Tus proyectos con Arduino Material adicional para Arduino Referencias de Arduino

    Suscrbete al RSS de los comentarios

    Archivo

    2008 2009 2010 2011 2012

    INICIO QU ES CAMON? BLOG

    Aviso Legal Condiciones de uso Poltica de datos personales

    Pgina 15 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5

  • CAM.es Informacin Corporativa CAM

    Obras Sociales CAM CAM Joven Servi CAM

    Sala de Prensa CAM

    Espacio CAMON Alicante:

    Avenida Ramn y Cajal, 5 | Tel. 96 590 59 49De Lunes a Viernes abierto al pblico, de 10:30 a 13:30h. y de 17 a 20h. Fin de semana cerrado.Espacio CAMON Madrid:

    Plaza de Moncloa, 1; acceso por Princesa | Tel. 91 543 70 36De lunes a jueves abierto al pblico de 10 a 13:30 h y de 17 a 20 horas.

    Los viernes de 10 a 13:30 horas. Fin de semana cerradoEspacio CAMON Murcia:

    C/ Madre Elisea Oliver Molina, s/n. Antiguo Cuartel de Artillera, Pabelln 5. Primera Planta. | Tel. 96 825 96 67De Lunes a Viernes abierto al pblico, de 10:30 a 13:30h. y de 17 a 20h. Fin de semana cerrado.

    Espacio CAMON Cigarreras:

    C/ San Carlos, 78 (Antigua Fbrica de Tabacos) Nave Cultura Contempornea 1 planta, Alicante |

    Tel. 965 20 59 03De Martes a Viernes abierto al pblico de 10 a 13:30h y de 17 a 20 h. Fin de semana cerrado.

    Pgina 16 de 16Avanzando con Arduino - Tucamon.es

    12/06/2012http://www.tucamon.es/contenido/avanzando-5