MCO018703 2021 2 AULA03

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Introdução a linguagem C

Objetivos

O aluno será capaz de:

  • Identificar a estrutura de linguagem do Arduino;
  • Aprender sobre constantes e variáveis;
  • Conhecer as operações lógicas e aritméticas.


A linguagem C foi criada por Dennis Ritchie, em 1972, no centro de Pesquisas da Bell Laboratories. Sua primeira utilização importante foi a reescrita do Sistema Operacional UNIX, que até então era escrito em assembly. Em meados de 1970 o UNIX saiu do laboratório para ser liberado às universidades. Foi o suficiente para que o sucesso da linguagem atingisse proporções tais que, por volta de 1980, já existiam várias versões de compiladores C oferecidas por diversas empresas, não sendo mais restritas apenas ao ambiente UNIX, como também compatível a outros sistemas operacionais. O C é uma linguagem de propósito geral, sendo adequada à programação estruturada. No entanto é mais utilizada para escrever compiladores, analisadores léxicos, bancos de dados, editores de texto, e sistemas embarcados.

A linguagem C pertence a uma família de linguagens cujas características são: portabilidade, modularidade, compilação separada, recursos de baixo nível, geração de código eficiente, confiabilidade, regularidade, simplicidade e facilidade de uso.

Fonte: [1] - Centro de Computação - UNICAMP

Comentários

Os comentários no programa fonte não têm função nenhuma para o compilador e serve apenas para aumentar a legibilidade e clareza do programa, podem ser inseridos com “//” que valem de onde começam até o fim da linha ou com “/*” e “*/”, sendo considerado comentário tudo entre “/*” e “*/”.

Identificadores

Um identificador é um símbolo definido pelo usuário que pode ser um rótulo (label), uma constante, um tipo, uma variável, um nome de programa ou subprograma (procedimento ou função). Normalmente devem começar com um caractere alfabético e não podem conter espaços em branco, podendo ter no máximo 32 caracteres, não havendo distinção entre maiúsculas e minúsculas.

Endentação

A endentação também não tem nenhuma função para o compilador e serve para tornar a listagem do programa mais claro dando hierarquia e estrutura ao programa.

Constantes

Constantes são valores declarados no início do programa e que não se alteram na execução do programa. Podem ser expressas em qualquer base numérica.

Variáveis

Uma declaração de variável consiste do nome do tipo de dado seguido do nome da variável. Todas as variáveis devem ser declaradas antes de serem usadas. As variáveis devem ser declaradas no início de cada função, procedimento ou início do programa.

Elementos definidos pela linguagem C

  • Letras (alfanuméricas) Aa até Zz;
  • Dígitos (numéricos) - 0 até 9;
  • Operadores;
  • Tipos de dados.

Operadores e Símbolos Especiais

Operador Significado Exemplo
* multiplicação a = b * c
/ divisão a = b / c
% resto a = 13 % 3, a = 1
+ adição a = b + c
- subtração a = b - c
= atribuição a = b
== comparação compara dois operandos if(a == 10)
< menor que a < b
<= menor ou igual a <= b
> maior que a > b
>= maior ou igual a >= b
!= diferente de a=10, Se( a != 3) então verdadeiro
<< deslocamento de bit a esquerda 3 (00000011) << 1 = 6 (00000110)
>> deslocamento de bit a direita 4 (00000100) >> 1 = 2 (00000010)
& lógica E bit a bit 00000011 & 00000110 = 00000010
&& lógica E (AND) a=2, Se(a>1 && a<3) então verdadeiro
^ OU exclusivo bit a bit 00001100 ^ 00000110 = 00001010
| OU inclusivo bit a bit 00001101 = 0001101
||
lógica OU (OR)
a=4, Se( a>3 || a<5) então verdadeiro
! lógica Não (NOT) Se( ! a ) equivalente a Se( a == 0)
~ complemento bit a bit ~00010101 = 11101010
" delimitador de string "Arduino"

Tipos de dados

Um Tipo de Dado define o conjunto de valores que uma variável pode assumir e as operações que podem ser feitas sobre ela. Toda variável em um programa deve ser associada a um tipo de dado. Mais abaixo veremos os tipos de dados mais utilizados pelo Arduino.

Estrutura da Linguagem do Arduino

A estrutura básica da linguagem de programação do Arduino é bastante simples; ela é formada por dois blocos de funções que carregam outros blocos de funções escritas em linguagem C/C++. O primeiro bloco de funções forma a função setup(); o segundo, a função loop().

Funções
Em linguagens de programação são como sub-rotinas ou procedimentos; são pequenos blocos de programas usados para montar o programa principal. Elas são escritas pelo programador para realizar tarefas repetitivas, ou podem ser

importadas prontas para o programa em forma de bibliotecas.

Declaração da Função
Toda função deve ser declarada antes de ser chamada atribuindo-lhe um tipo e um nome seguido de parênteses, onde serão colocados os parâmetros de passagem da função. Depois do nome são definidos entre as chaves '{' e '}' os procedimentos que a função vai executar.
setup()
Essa é a primeira função a ser chamada quando o programa inicia. E é executada apenas nessa primeira vez. Esta é uma função de preparação: ela dita o comportamento dos pinos do Arduino e inicializa a porta serial.
loop()
A função loop( ) é chamada logo a seguir e todas as funções embarcadas nela são repetidamente executadas. Ela fica lendo os pinos de entrada do Arduino e comandando os pinos de saída e a porta serial.

Os Símbolos usados na construção de funções são os seguintes: { } - Dentro das chaves vão os procedimentos (statements) que a função deve executar; ; - O ponto-e-vírgula é usado para marcar o final de um procedimento; // - comentário de uma linha: qualquer caractere depois das duas barras é ignorado pelo programa; /*...*/ - comentário em várias linhas: qualquer texto colocado entre esses símbolos também é ignorado pelo programa.

Exemplo 1
/*
Nesse código a função '''setup( )''' ativa a porta serial em 9600 bits/s 
e a função loop( ) fica transmitindo a frase "Hello World!" pela porta 
serial a cada 2 segundos. 
*/
void setup( ) 
{
   Serial.begin(9600); // inicializa a porta serial 
}
void loop( ) 
{
   Serial.println("Hello World!"); // transmite frase 
   delay(2000);    
}

Constantes e Variáveis

Constantes
São valores predefinidos que nunca podem ser alterados. Na linguagem C do Arduino são 3 os grupos de constantes; os dois componentes de cada grupo sempre podem ser representados pelos números binários 1 e 0.
TRUE/FALSE são constantes booleanas que definem estados lógicos. Verdadeiro é qualquer valor que não seja zero. Falso é sempre o valor zero.
HIGH/LOW essas constantes definem as tensões nos pinos digitais do Arduino. Alto é uma tensão de 5V; baixo o GND(ou 0V).
INPUT/OUPUT são constantes programadas pela função pinMode( ) para os pinos do Arduino; eles podem ser entradas (de sensores) ou podem ser saídas (de controle).
Variáveis
São posições na memória de programa do Arduino marcadas com um nome e o tipo de informação que irão guardar. Essas posições podem estar vazias ou podem receber um valor inicial. Os valores das variáveis podem ser alterados pelo

programa.

Escopo da Variável é o limite ou abrangência da variável. Uma variável pode ser declarada em qualquer parte do programa. Se for declarada logo no início, antes da função setup( ), ela tem o escopo de Variável Global, e porisso ela pode ser vista e usada por qualquer função no programa. Se declarada dentro de uma função ela tem o escopo de Variável Local, e só pode ser usada por essa função.
Declaração da Variável como as funções, toda variável deve ser declarada antes de ser chamada. Essa declaração consiste em atribuir previamente um tipo e um nome à variável.
Tipos de variáveis:
Tipo Descrição
byte armazena 8 bits (0-255);
int armazena números inteiros de até 16 bits;
long armazena números inteiros de até 32 bits;
float podem armazenar números fracionários de até 32 bits.
Exemplo 2
/* Esse programa escrito em C do Arduino aumenta e diminui gradativamente o brilho de um LED 
conectado no pino PWM 10 do Arduino. */
int i=0;  // declaração da variável global inteira i iniciada com 0
void ledOn( );  // declaração da função criada ledOn do tipo void
void setup( )  
{
   pinMode(10,OUTPUT); // aqui 2 parâmetros são passados à função pinMode( )
}
void loop( ) 
{
   for (i=0; i <= 255; i++) ledOn( ); // aumenta o brilho do led
   for (i=255; i >= 0; i--) ledOn( ); // diminui o brilho do led
}
void ledOn( ) // função que acende o led
{  
   analogWrite (10, i); // o nº do pino e o valor de i são passados à função analogWrite( )
   delay (10);      
}

Lógica e Aritmética

Operações Aritméticas e lógicas
As 4 operações aritméticas: divisão, multiplicação, adição e subtração, são representadas pelos símbolos: /, *, + e -, respectivamente, separando os operandos. E são 3 os operadores lógicos na linguagem do Arduino que são usados para comparar duas expressões e retornar a constante TRUE/FALSE.

Símbolos compostos são aqueles que combinam os símbolos aritméticos entre si e com o sinal de atribuição:

x++ // x=x+1 
x-- // x=x-1
x += y // x=x+y
x -= y // x=x-y
x *= y // x=x*y
x /= y // x=x/y

Operadores de comparação comparam uma variável com uma constante, ou variáveis entre si. São usados para testar se uma condição é verdadeira.

x == y // x é igual a y
x != y // x não é igual a y
x  < y // x é menor que y 
x  > y // x é maior que y
x <= y // x é menor ou igual a y
x >= y // x é maior ou igual a y

Operadores lógicos são usados para comparar duas expressões, retornam 1 ou 0 (verdadeiro/falso).

&&   AND porta lógica 'E'
||   OR  porta lógica 'OU'
!    NOT porta lógica 'NÃO'

Funções Matemáticas e de Tempo

delay(ms)
Essa função pausa o programa por um período em milissegundos indicado pelo parâmetro entre parênteses.

Exemplo:

delay(1000); // Com esse parâmetro o programa vai pausar durante 1 segundo (1000 ms).
Nota
Durante o período em que essa função está ativa qualquer outra função no programa é suspensa. Somente as interrupções de hardware podem parar essa função.
delayMicroseconds(us)
Essa função pausa o programa por um período em microssegundos indicado pelo parâmetro entre parênteses.

Exemplo:

delayMicroseconds(1000); // Com esse parâmetro o programa vai pausar durante 1 ms (1000 us).
Nota
As mesmas observações acima para a função delay(ms) são válidas aqui.
millis( )
Retorna o número de milissegundos desde que o Arduino começou a executar o programa corrente.

Exemplo:

long total = millis( ); // Aqui a variável inteira longa (de 32 bits) ‘total’ vai guardar o tempo em ms desde que o Arduino foi inicializado.
Nota
Essa variável vai ser resetada depois de aproximadamente 9 horas.
random(min,max)
Gera números pseudo-aleatórios entre os limites min e max especificados como parâmetros.

Exemplo:

int valor = random(100,400); // A variável "valor" vai ser atribuido um número inteiro qualquer entre 100 e 400.
Nota
O parâmetro min é opcional e se excluído o limite mínimo é 0. No exemplo variável "valor" poderá ser qualquer número inteiro entre 0 e 400.
abs(x)
Retorna o módulo ou valor absoluto do número real passado como parâmetro.

Exemplo:

float valor = abs(-3.14); // A variável "valor" vai ser atribuído o número em ponto flutuante (e sem sinal) 3.14.
map(valor,min1,max1,min2,max2)
A função map( ) converte uma faixa de valores para outra faixa. O primeiro parâmetro "valor" é a variável que será convertida; o segundo e o terceiro parâmetros são os valores mínimo e máximo dessa variável; o quarto e o quinto são os novos valores mínimo e máximo da variável "valor".

Exemplo:

int valor = map(analogRead(A0),0,1023,0,255)); // A variável "valor" vai guardar  a leitura do nível analógico no pino A0 convertida da faixa de 0-1023 para a faixa 0-255.
Nota
Com essa função é possível reverter uma faixa de valores, exemplo: int valor = map(x,1,100,100,1);

Configurando o Arduino no Windows

Como fazer para conectar o Arduino no seu computador com Windows e rodar o seu primeiro programa.

Você deve seguir os seguintes passos
  1. Obter uma placa Arduino e um cabo USB
  2. Fazer o download do ambiente de desenvolvimento do Arduino
  3. Conectar a placa
  4. Instalar os drivers
  5. Executar o aplicativo do Arduino
  6. Abrir o exemplo "Blink"
  7. Selecionar a sua placa
  8. Selecionar a porta serial
  9. Fazer upload do programa

Obter uma placa Arduino e um cabo USB

Neste exemplo vamos utilzar um Arduino Uno, mas serve também para Arduino Duemilanove, Arduino Mega 2560, Diecimila entre outros. Se você tem alguma outra placa, veja o tutorial correspondente na página do produto.

Você também vai precisar de um cabo USB padrão (conector A para conector B): o tipo de cabo que você conectaria a uma impressora USB, por exemplo. Para o Arduino Nano ou o Alevino com Nanoshield USB, você vai precisar, no entanto, de um cabo com conector A para Mini-B.

Fig34 MCO18703.jpg

Fazer o download do ambiente de desenvolvimento do Arduino

Obtenha a última versão na página de download.

Quando o download terminar, descompacte o arquivo baixado, garantindo que a estrutura das pastas seja mantida.

Dê um duplo clique na pasta para abri-la. Deve haver alguns arquivos e subpastas dentro.

Conectar a placa

O Arduino Uno, Mega, Duemilanove, Arduino Nano e o Alevino com Nanoshield USB obtêm energia automaticamente seja da conexão USB ou de um fonte de alimentação externa. Se você está usando um Arduino Diecimila, é preciso configurar a placa para obter energia da conexão USB. A fonte de energia da placa é selecionada com um jumper, uma pequena peça de plástico que se encaixa em dois dos três pinos que ficam entre os conectores USB e de energia. Verifique que ele está nos dois pinos mais próximos da porta USB.

Conecte o Arduino ao seu computador usando o cabo USB. O LED verde de energia (marcado como PWR) deve acender.


Instalar os drivers

Instalando drivers para o Arduino Uno ou Arduino Mega 2560 no Windows
  1. Conecte a sua placa e aguarde até que o Windows inicie o processo de instalação de drivers. Depois de alguns instantes, o processo irá falhar.
  2. Clique no menu iniciar e vá até o Painel de Controle
  3. Selecione Sistema e Segurança > Sistema > Gerenciador de Dispositivos.
  4. Procure na seção "Portas (COM e LPT)". Você deverá encontrar um porta aberta chamada "Arduino UNO (COMxx)".
  5. Clique com o botão direito na porta "Arduino UNO (COMxx)" e selecione "Atualizar Driver...".
  6. Depois selecione a opção "Procurar software de driver no computador".
  7. Finalmente, navegue até a pasta "drivers" dentro do aplicativo do Arduino, na pasta que foi descompactada anteriormente, e selecione o arquivo "arduino.inf".
  8. A partir daí, o Windows completará a instalação dos drivers.
Atenção
Pode haver pequenas diferenças na instalação dependendo da versão do seu Windows.
Instalando drivers para o Arduino Duemilanove, Nano, Diecimila ou Alevino com Nanoshield USB no Windows

Quando você conectar a placa, o Windows deve iniciar o processo de instalação dos drivers, caso você ainda não tenha usado o computador com um Arduino antes.

A janela "Adicionar novo hardware" irá aparecer
  1. Nessa janela, selecione "Não, não agora" e clique em avançar.
  2. Selecione "Instalar o driver de uma lista ou um lugar especifico (avançado)" e clique em avançar.
  3. Verifique que "Procurar o melhor driver nesses lugares especifícos" está selecionado; deselecione "Procurar em mídias removiveis"; selecione "Incluir este lugar na procura" e vá até o diretório "drivers" do Arduino, dentro da pasta que você descompactou anteriormente (a versão mais atual dos drivers pode ser encontrada no site da FTDI). Depois, clique em avançar.
  4. O Windows irá procurar pelo driver e dizer que um "USB Serial Converter" foi encontrado. Clique em finalizar.
  5. A janela "Adicionar novo hardware" aparecerá novamente. Siga os mesmos passos, selecionando as mesmas opções e o mesmo diretório. Dessa vez, uma "USB Serial Port" será encontrada.
  6. Você pode verificar que os drivers foram instalados clicando no menu iniciar e depois em Painel de Controle > Sistema e Segurança > Sistema > Gerenciador de Dispositivos. Procure por uma "USB Serial Port" na seção "Portas (COM e LPT)".

Executar o aplicativo do Arduino

Dê um clique duplo no aplicativo do Arduino. Se o software do Arduino abrir no idioma errado, você pode mudá-lo na janela de preferências (File > Preferences ou Arquivo > Preferências) - veja essa página do Arduino para mais detalhes. Daqui por diante vamos assumir que o idioma escolhido é o português do Brasil.

Abrir o exemplo "Blink"

Abra o programa de exemplo "Blink": File > Exemplos > 1.Basics > Blink.


Fig35 MCO18703.png

Selecionar a sua placa

Você precisa selecionar a opção do menu Ferramentas > Placa que corresponde ao seu tipo de Arduino.


Fig36 MCO18703.png


Para o Alevino com Nanoshield USB, use Arduino Nano w/ ATmega328. Para placas Duemilanove com um ATmega328 (veja o texto no chip da placa), selecione Arduino Duemilanove or Nano w/ ATmega328. Anteriormente, as placas Arduino vinham com um ATmega168; para elas, selecione Arduino Diecimila, Duemilanove, or Nano w/ ATmega168 (detalhes das opções do menu de placas estão disponíveis nessa página do Arduino).

Selecionar a porta serial

Selecione o dispositivo serial correspondente à placa do Arduino no menu Ferramentas > Porta Serial. É provável que ele seja COM3 ou maior (COM1 e COM2 são normalmente reservados para portas seriais nativas, e não por USB). Para descobrir, você pode desconectar o seu Arduino e reabrir o menu; a opção que desaparecer deve ser a da placa do Arduino. Reconecte a placa e selecione a porta serial.

Fig38 MCO18703.png


Na imagem acima aparece a porta COM4 como disponível, provalvelmente habilitada pelo software do Arduino. Dependendo das aplicações o seu computador pode ter muitas outras portas COM.

Fazer upload do programa

Agora, simplesmente clique o botão "Carregar" no ambiente de desenvolvimento. Espere alguns segundos - você deve ver os LEDs RX e TX na placa piscando. Se o upload for bem sucedido, a mensagem "Transferência concluída." vai aparecer na barra de status. (Nota: Se você possui um Arduino Mini, NG, ou outra placa não mencionada aqui, você pode ter que pressionar fisicamente o botão de reset na placa imediatamente antes de apertar o botão de upload).

Fig37 MCO18703.png

Alguns segundos após o upload terminar, você deve ser o LED do pino 13 na placa começar a piscar. Se isso aconteceu, parabéns! Você conseguiu configurar o Arduino e rodar o seu primeiro programa.

Se você tiver problemas, verifique a página de resolução de problemas do site do Arduino.

Primeiro Projeto

Quando ensinamos linguagens de programação novas, geralmente o primeiro exemplo é um "hello world". Como o Arduino não vem por padrão com um display, nosso primeiro exemplo foi enviar o "hello world" pela serial do Arduino. Agora vamos fazer um LED piscar – e por isso será chamado blink. Nosso LED ficará aceso durante um segundo e apagado durante outro segundo e então recomeçará o ciclo. Abra a IDE (programa do Arduino) e digite o seguinte código:

void setup() {
    pinMode(13, OUTPUT);
}
void loop() {
    digitalWrite(13, HIGH);
    delay(1000);
    digitalWrite(13, LOW);
    delay(1000);
}
Mesmo Código no Tinkercad

Fig003c MCO18703.png


Chamamos um código feito para Arduino de sketch e o salvamos em um arquivo com a extensão .INO. Com nosso sketch pronto, basta conectar o Arduino na porta USB e clicar no botão upload (segundo, da direita para a esquerda). Após o processo, será vista a mensagem Done uploading na IDE e então o sketch estará rodando no Arduino, ou seja, o LED vai acender e apagar a cada 1 segundo. A Figura abaixo mostra como deverá ser montado o circuito para um LED externo.

Fig003b MCO18703.png

Basta ligar o Arduino na porta USB do computador, para que o computador forneça energia ao circuito, e então veremos o LED externo piscar. Em vez do LED, poderíamos controlar outros componentes, como motores, eletrodomésticos, entre outros.

Referências

[1] http://ordemnatural.com.br/pdf-files/CartilhadoArduino_ed1.pdf

[2] http://xbot.com.br/externo/OpneMoniot/Programando_Microcontroladores_PIC_Linguagem_C.pdf

[3] https://www.circuitar.com.br/tutoriais/configurando-o-arduino-no-windows/index.html



Icone voltar.png Icone menu.png Icone prox.png