programação i (arduino)

Upload: silvio-firmino

Post on 01-Mar-2016

29 views

Category:

Documents


0 download

DESCRIPTION

Apostila de Programação de Microcontrolador Arduino com linguagem C

TRANSCRIPT

  • Programao em C

    Sistemas Embarcados

    (ARDUINO)

    IFSP - Programao I

    Prof. Fernando Paes Landim

  • 2

    Sumrio

    1 Introduo .................................................................................................................................. 3

    2 Linguagem de Programao ...................................................................................................... 3

    3 Arduino IDE ................................................................................................................................ 4

    4 Programando no ARDUINO IDE ................................................................................................ 6

    4.1 Simbologia .......................................................................................................................... 6

    4.2 Funo void setup( ) ........................................................................................................... 6

    4.3 Funo pinMode( ) .............................................................................................................. 7

    4.4 Funo void loop( ) ............................................................................................................. 7

    4.5 Funes Digitais de INPUT / OUTPUT ................................................................................ 8

    4.5.1 Funo digitalWrite( ) ................................................................................................... 8

    4.5.2 Funo digitalRead( ) ................................................................................................... 8

    4.5.3 Funo delay() ............................................................................................................. 9

    4.6 Estruturas de Controle ........................................................................................................ 9

    4.6.1 Estrutura de Controle If (Se) ........................................................................................ 9

    4.6.2 Estrutura de Controle If .. Else (Se .. seno) .............................................................. 10

    5 Exemplos de programas comentados ...................................................................................... 12

    5.1 Pisca LED ......................................................................................................................... 12

    5.2 Semforo .......................................................................................................................... 13

    5.3 Boto e LED ..................................................................................................................... 14

  • 3

    1 Introduo

    Nesta matria iremos abordar a Linguagem de Programao C voltada para Sistemas

    Embarcados, especificamente para a plataforma ARDUINO.

    Lembrando que a linguagem C para sistemas embarcados uma adaptao do C criado

    para desktop com a finalidade de gerar um programa (firmware) para embarcarmos no nosso

    microcontrolador. Com isso, os desenvolvedores do ARDUINO criaram o ARDUINO IDE (Integrated

    Development Environment), que o ambiente de desenvolvimento do programa que iremos

    embarcar no nosso ARDUINO. Essa IDE foi inspirada em C, desenvolvida com funes pr-

    programadas a fim de facilitar seu uso, mantendo as funes de controle de fluxo herdadas do C.

    Mas por que C ?

    Evidente que a Linguagem C a principal Linguagem de Programao, sendo a linguagem

    mais utilizada, direta ou indiretamente, desde sua criao. Diversas outras linguagens muito

    utilizadas hoje, tiveram sua base em C, assim como: C++, C#, JAVA, entre outras. Assim tambm

    como h indcios de que os principais Sistemas Operacionais (Windows, Mac OS e Linux) foram

    desenvolvidos em C.

    Ento por isso a Linguagem C importantssima para comearmos a aprender

    programao.

    2 Linguagem de Programao

    Podemos imaginar o computador como uma super calculadora capaz de realizar clculos

    muito mais rpido do que ns, mas para isso, devemos dizer ao computador o que deve ser

    calculado e como deve ser calculado. A funo das linguagens de programao exatamente

    essa, ou seja, servir de um meio de comunicao entre computadores e humanos.

    Existem dois tipos de linguagens de programao: as de baixo nvel e as de alto nvel. Os

    computadores interpretam tudo como nmeros em base binria, ou seja, s entendem zero e um.

    As linguagens de baixo nvel so interpretadas diretamente pelo computador, tendo um resultado

    rpido, porm muito difcil e incmodo de se trabalhar com elas. Exemplos de linguagens de

    baixo nvel so: a linguagem binria e a linguagem Assembly.

  • 4

    Exemplo de cdigo em Assembly:

    MOV AX,WORD1 ;movimenta o contedo da posio de memria WORD1 para o registrador AX

    MOV AH,A ;transfere o caracter ASCII A para AH

    MOV AH,41h ;idem anterior: 41h corresponde ao caracter A

    MOV AH,BL ;move o contedo do byte baixo de BX o byte alto de AX

    MOV AX,CS ;transfere uma cpia do contedo de CS para AX

    Como pode-se notar, uma linguagem bastante complicada.

    J as linguagens de alto nvel so mais fceis de se trabalhar e de entender, as aes so

    representadas por palavras de ordem (exemplo : faa, imprima, etc) geralmente em ingls, foram

    feitos assim para facilitar a memorizao e a lgica. Elas no so interpretadas diretamente pelo

    computador, sendo necessrio traduzi-las para linguagem binria utilizando-se de um programa

    chamado compilador.

    Quando programamos em uma linguagem de programao de alto nvel, primeiramente

    criamos um arquivo de texto comum contendo a lgica do programa, ou seja, onde falamos ao

    computador como deve ser feito o que queremos. Este arquivo de texto chamado de cdigo-

    fonte, cada palavra de ordem dentro do cdigo-fonte chamada de instruo. Aps criarmos o

    cdigo-fonte devemos traduzir este arquivo para linguagem binria usando o compilador

    correspondente com a linguagem na qual estamos programando. O compilador ir gerar um

    segundo arquivo que chamamos de executvel ou programa, este arquivo gerado interpretado

    diretamente pelo computador.

    3 Arduino IDE

    Agora daremos introduo a nossa plataforma de desenvolvimento, conhecer um pouco do

    ambiente e seus principais recursos. Lembrando que o compilador do ARDUINO pode ser

    gratuitamente baixado no site arduino.cc .

  • 5

    Figura 1 - Imagem do Arduino IDE

    Por padro, o nome do nosso arquivo vem nomeado como sketch_data, que em ingls pode

    significar esboo ou rascunho, mas pode ser facilmente alterado quando salvamos nosso arquivo

    no disco.

    - Verificar : Compila nosso cdigo, verificando se existe algum erro de instruo ou sintaxe.

    - Carregar: Verifica e embarca nosso programa para o Arduino, quando o mesmo estiver

    conectado ao computador.

    - Novo : Cria um novo arquivo.

    - Abrir : Abri um arquivo existente.

    - Salvar : Salva o arquivo atual.

  • 6

    4 Programando no ARDUINO IDE

    Para cada programa teremos apenas uma funo void setup( ) e uma funo void loop( ).

    Funes em linguagem de programao so como sub-rotinas ou procedimentos; so

    pequenos blocos de programas usados para montar o programa principal. Elas so escritas pelo

    programador para realizar tarefas repetitivas, ou podem ser importadas prontas para o programa

    em forma de bibliotecas.

    4.1 Simbologia

    { } - Dentro das chaves vo os procedimentos que a funo deve executar

    ; - O ponto e vrgula usado para marcar o final de uma instruo.

    // - comentrio de uma linha: qualquer caractere depois das duas barras ignorado pelo

    compilador.

    /* comentrio de vrias linhas */ - qualquer texto colocado entre esses smbolos tambm

    ignorado pelo compilador.

    4.2 Funo void setup( )

    A funo void setup( ), ser responsvel por determinar as configuraes dos pinos

    utilizados no nosso programa logo quando inicia, e executada apenas essa primeira vez.

    Exemplo:

    void setup( ){

    pinMode(0,OUTPUT); // Define o pino 0 como sada

    pinMode(1,INPUT); // Define o pino 1 como entrada

    }

    A funo void setup( ) comea na " { " (chave aberta) e termina na " } " (chave fechada), e

    todas as configuraes de pinos devem ser feitas dentro dessas chaves.

    Percebam que as palavras utilizadas pelo compilador ficam em cores diferentes, por isso

    importante diferenciar maisculas de minsculas. Como por exemplo a instruo " pinMode ",

    se digitarmos tudo minsculo " pinmode ", nosso compilador no ir entender qual instruo deve

    realizar e dar erro de compilao.

  • 7

    4.3 Funo pinMode( )

    Sintaxe: pinMode(pino,MODO)

    pino : se refere ao nmero do pino do ARDUINO que iremos configurar.

    MODO : estado do pino, podendo ser INPUT (entrada de dados), OUTPUT (sada

    de dados) ou INPUT_PULLUP (entrada de dados com resistores de pull-up internos).

    Exemplos:

    pinMode(13,OUTPUT); // Configurando o pino 13 como sada de dados

    pinMode(0,INPUT); // Configurando o pino 0 como entrada de dados

    Isso significa que no pino 13, o microcontrolador ir enviar uma tenso de 0 Volt ou 5 Volts,

    sendo 0 Volt nvel lgico baixo e 5 Volts nvel lgico alto. J no pino 0 iremos receber uma

    tenso entre 0 Volt e 5 Volts, considerando uma leitura prxima a 0 Volt como nvel lgico baixo e

    leitura prxima a 5 Volts como nvel lgico alto.

    4.4 Funo void loop( )

    A funo void loop( ) chamada logo a seguir da funo void setup( ), e todas as funes

    embarcadas nela so repetidamente executadas. Ela fica lendo os pinos de entrada do Arduino,

    comandando os pinos de sada e a porta serial. Dentro dela que desenvolveremos o programa

    para embarcarmos no Arduino a fim de controlar logicamente e sequencialmente os dispositivos

    conectados na plataforma. Basicamente a principal funo da linguagem C j composta por um lao

    de repetio infinito.

    Exemplo em linguagem C:

    void main(){ // Funo principal

    while(1){ // Funo de repetio infinita

    /* Espao destinado

    ao desenvolvimento

    do programa */

    } // Fim da funo while

    } // Fim da funo principal

    Exemplo no Arduino IDE:

    void loop(){ // Funo principal com lao de repetio

    /* Espao destinado

    ao desenvolvimento

    do programa */

    } /* Fim da funo principal, volta primeira instruo

    da funo void loop() */

  • 8

    4.5 Funes Digitais de INPUT / OUTPUT

    Como vimos na funo pinMode( ), as instrues INPUT e OUTPUT so as funes de

    entrada e sada de dados. Aps configurarmos os pinos, utilizaremos as funes digitalWrite( ) e

    digitalRead( ).

    4.5.1 Funo digitalWrite( )

    A funo digitalWrite( ) utilizada para escrever um valor na sada do pino digital.

    Sintaxe: digitalWrite(pino, VALOR)

    pino: Esse pino dever estar configurado como OUTPUT, e assim estamos indicando

    em qual pino iremos escrever um valor.

    VALOR: Valor do pino, podendo ser HIGH (nvel lgico alto) ou LOW (nvel lgico

    baixo).

    Exemplo:

    digitalWrite(13, HIGH); // Pino 13 como nvel lgico alto

    digitalWrite(12, LOW); // Pino 12 como nvel lgico baixo

    Com essa funo conseguimos acionar dispositivos externos de 5 Volts ou chavear um

    transistor no caso de tenses maiores.

    4.5.2 Funo digitalRead( )

    A funo digitalRead( ) utilizada para ler um valor na entrada do pino.

    Sintaxe: digitalRead(pino)

    pino: Esse pino dever estar configurado como INPUT, e assim estamos indicando

    qual pino queremos fazer a leitura.

    Exemplo:

    digitalRead(5); // Realiza a leitura do pino 5

  • 9

    4.5.3 Funo delay()

    A funo delay( ) utilizada para gerar um atraso no programa.

    Sintaxe: delay(tempo)

    tempo: valor em milissegundos que determinar o atraso naquele instante do

    programa.

    Exemplo:

    delay(1000); // Atraso de 1 segundo

    delay(500); // Atraso de 0,5 segundo

    4.6 Estruturas de Controle

    So utilizadas para tomar decises lgica durante o programa dependendo dos valores

    obtidos.

    4.6.1 Estrutura de Controle If (Se)

    If um controle de fluxo usado para selecionar uma ou mais instrues baseadas no

    resultado de um teste de comparao. Todas as instrues entre as chaves { e } so executadas

    somente se o resultado desse teste for verdadeiro; se no, essas instrues no so executadas.

    Verdadeiro qualquer resultado diferente de zero, mesmo negativo. Falso um resultado zero.

    Figura 2 - Estrutura If

  • 10

    Sintaxe: if (teste lgico){

    // bloco a ser realizado caso o teste lgico retorne Verdadeiro

    }

    Exemplo:

    if (digitalRead(5) == 1){ // Se leitura do pino 5 for igual a 1

    digitalWrite(13,HIGH); // Pino 13 vai pra nvel lgico alto

    } // Fim da funo If

    Operadores de Comparao:

    Podemos utilizar os seguintes smbolos como operadores de comparao:

    == - Compara se os dois valores so iguais.

    != - Compara se os dois valores so diferentes.

    < - Compara se o primeiro valor menor que o segundo.

    - Compara se o primeiro valor maior que o segundo.

    >= - Compara se o primeiro valor maior ou igual ao segundo.

    4.6.2 Estrutura de Controle If .. Else (Se .. seno)

    Ao acrescentar mais um bloco de instrues na funo do comando if, pode-se criar o

    comando if .. else, para fazer um teste novo caso o resultado da expresso retorne falso.

    Figura 3 - Estrutura If .. Else

  • 11

    Sintaxe: if (teste lgico){

    // bloco a ser realizado caso o teste lgico retorne Verdadeiro

    }

    else{

    // bloco a ser realizado caso o teste lgico retorne Falso

    }

    Exemplo:

    if (digitalRead(5) == 1){ // Se leitura do pino 5 for igual a 1

    digitalWrite(13,HIGH); // Pino 13 vai pra nvel lgico alto

    }

    else{

    digitalWrite(13,LOW); // Pino 13 vai pra nvel lgico baixo

    }

  • 12

    5 Exemplos de programas comentados

    5.1 Pisca LED

    Figura 4 - Nvel lgico alto

    Figura 5 - Nvel lgico baixo

    Dado o circuito acima criaremos um programa para piscar um LED a cada 1 segundo, com isso

    tambm conseguimos fornecer um sinal digital com frequncia de 1 Hz.

    void setup( ){

    pinMode(10, OUTPUT); // Define pino 10 como sada de dados

    }

    void loop( ){

    digitalWrite(10,HIGH); // Coloca pino 10 em nvel alto

    delay(1000); // Atraso de 1000 milissegundos ou 1 segundo

    digitalWrite(10,LOW); // Coloca pino 10 em nvel alto

    delay(1000); // Atraso de 1000 milissegundos ou 1 segundo

    }

  • 13

    5.2 Semforo

    Figura 6 - Semforo

    int led_verde = 0; // Cria varivel led_verde do tipo inteiro e atribui valor 0

    int led_amarelo = 1; // Cria varivel led_amarelo do tipo inteiro e atribui valor 1

    int led_vermelho = 2; // Cria varivel led_vermelho do tipo inteiro e atribui valor 2

    // Variveis do tipo INTEIRO podem receber valores inteiro entre -32768 e +32767

    void setup( ){

    pinMode(led_verde,OUTPUT); // Configura pino do led_verde como sada

    pinMode(led_amarelo,OUTPUT); // Configura pino do led_amarelo como sada

    pinMode(led_vermelho,OUTPUT); // Configura pino do led_vermelho como sada

    }

    void loop( ){

    digitalWrite(led_verde,HIGH); // led_verde para nvel alto

    delay(1000); // Atraso de 1 segundo

    digitalWrite(led_verde,LOW); // led_verde para nvel baixo

    digitalWrite(led_amarelo,HIGH); // led_amarelo para nvel alto

    delay(500); // Atraso de 0,5 (meio) segundo

    digitalWrite(led_amarelo,LOW); // led_amarelo para nvel baixo

    digitalWrite(led_vermelho,HIGH); // led_vermelho para nvel alto

    delay(1000); // Atraso de 1 segundo

    digitalWrite(led_vermelho,LOW); // led_vermelho para nvel baixo

    }

  • 14

    5.3 Boto e LED

    Figura 7 - Boto solto

    Figura 8 - Boto pressionado

    Para o circuito acima queremos acionar um dispositivo, no nosso caso um LED, usando um boto

    do tipo push_button (solto = 0 e pressionado = 1).

    int botao = 13; // Cria varivel botao do tipo inteiro e atribui valor 13

    int led = 0; // Cria varivel led do tipo inteiro e atribui valor 0

    void setup(){

    pinMode(botao, INPUT); // Configura botao como entrada de dados

    pinMode(led, OUTPUT); // Configura led como sada de dados

    }

    void loop(){

    if (digitalRead(botao) == 1){ // Se leitura do botao for igual a 1

    digitalWrite(led,HIGH); // Acende led

    }

    else{ // Seno, se leitura do boto for igual a 0

    digitalWrite(led,LOW); // Apaga o led

    }

    }