AULA 7 - Microcontroladores - Técnico: mudanças entre as edições
imported>Fargoud |
imported>Fargoud |
||
| Linha 40: | Linha 40: | ||
O programador não pode esquecer que o compilador C diferencia caracteres minúsculos de maiúsculos. Por exemplo, as variáveis "numero" e "Numero" são consideradas diferentes uma da outra na linguagem C!!!! | O programador não pode esquecer que o compilador C diferencia caracteres minúsculos de maiúsculos. Por exemplo, as variáveis "numero" e "Numero" são consideradas diferentes uma da outra na linguagem C!!!! | ||
==Constantes | ==Constantes== | ||
Um dado é constante quando não sofre nenhuma variação no decorrer do tempo. Do início ao fim do programa o valor permanece inalterado. | Um dado é constante quando não sofre nenhuma variação no decorrer do tempo. Do início ao fim do programa o valor permanece inalterado. | ||
| Linha 57: | Linha 57: | ||
* #define VALOR 8 | * #define VALOR 8 | ||
* #define X 100 | * #define X 100 | ||
===Tipos de Constantes:=== | |||
O tipo da constante é definido pelo tipo de valor/dado que esta pode assumir. | |||
Constantes podem ser dos tipos: | |||
====Constantes numéricas:==== | |||
Inteiros, octais, hexa, longas e ponto flutuante (reais). | |||
'''Ex:''' | |||
*45E-8 (exponencial) | |||
*32 (inteiro) | |||
*034 (octal) | |||
*0xFE(hexa) | |||
*2e3 (exponencial) | |||
*32L (longa) | |||
*567893 (longa implícito) | |||
*2.3 (double) | |||
Como podemos notar, constantes inteiras não possuem ponto decimal; constantes octais devem ser precedidas por um '0'; constantes hexa, por um '0x'; constantes longas devem ser seguidas por um 'L', mas quando se trata de um número muito grande o compilador já entende que é um inteiro longo; e constantes double ou float têm ponto decimal flutuante. | |||
====Constantes de Caractere:==== | |||
Podem ser representadas por seu código ASCII, ou entre aspas, ' '. | |||
Ex: | |||
' A ' = 65 (em ASCII) | |||
====Sequências de Escape==== | |||
São códigos de tarefas a serem executadas na compilação, representados por caracteres que não podem ser impressos. | |||
Sequência de escape Significado . | |||
\a Caractere Bell (ANSI C) | |||
\b Caractere de retrocesso (backspace) | |||
\n Caractere de nova linha | |||
\r Caractere de retorno de carro | |||
\t Caractere de tabulação horizontal | |||
\\ Caractere de contra-barra | |||
\' Caractere de aspas simples | |||
\" Caractere de aspas duplas | |||
\? Caractere de ponto-de-interrogação | |||
\### Código ASCII em octal de caractere | |||
\x### Código ASCII em hexadecimal de caractere | |||
\0 Caractere nulo | |||
Ex: A instrução | |||
printf(“\n\t\t Hoje \202 dia da Can\x87\xc60 da \nAm\x82rica\?”); | |||
vai imprimir, na tela de saída do console: | |||
Hoje é dia da Canção da | |||
América? | |||
No Arduino existem algumas constantes previamente definidas e são consideradas palavras reservadas: | |||
* true – indica valor lógico verdadeiro | |||
* false – indica valor lógico falso | |||
* HIGH – indica que uma porta está ativada, ou seja, está em 5V. | |||
* LOW – indica que uma porta está desativada, ou seja,está em 0V. | |||
* INPUT – indica que uma porta será de entrada de dados. | |||
* OUTPUT – indica que uma porta será de saída de dados. | |||
Edição das 18h20min de 5 de outubro de 2016
Programação C para Arduino
Uma das linguagens mais utilizadas por técnicos e pesquisadores é a linguagem C. Isto ocorre principalmente pela versatilidade e pela complexidade da linguagem, que permitem a criação de programas muito sofisticados. Neste curso, vamos ver uma introdução à programação C, mais voltada para desenvolvimento de códigos para Arduino.
Histórico
A primeira versão da linguagem foi desenvolvida por dois pesquisadores da Bell Laboratories, Brian Kernighan e Dennis Ritchie.
A empresa necessitava de uma linguagem especificamente para escrever o sistema operacional UNIX, mas C revelou-se tão eficiente e "transportável" para outros sistemas operacionais, sistemas e hardwares que seu uso alastrou-se rapidamente.
Esta primeira versão, chamada "K&R" sofreu algumas modificações com o tempo, para adaptar-se a computadores com mais de 8 bits e assim nasceu a versão "ANSI C", considerada um padrão da linguagem.
Algum tempo depois, com a moda de programação orientada a objetos, nasceu a versão C++ que não mais segue a programação linear.
Várias empresas criaram seus próprios compiladores e IDEs C e assim apareceram o MS C (Microsoft), o Turbo C, Borland C, Dev, Code::Blocks, etc.
Características da Linguagem
“C é uma linguagem compilada, estruturada e de baixo nível.”
Linguagem compilada porque, após ser escrita num editor de textos qualquer (que siga o padrão ASCII), precisa ser decodificada, compilada (cada módulo separadamente) e linkada para obter-se um programa executável. Certos softwares como o Turbo C e o Borland C permitem que se edite, compile e linke os programas em C dentro de um mesmo ambiente (chamado de “IDE”, ou “Integrated Development Environment”), o que facilita muito a manipulação.
É uma linguagem estruturada porque segue o padrão de endentação, tal como em Pascal e Fortran por exemplo, com alinhamentos dos blocos lógicos cada vez mais à direita, quanto mais "interno" ao bloco for o comando, e com execução linear, sem utilização de goto's, break's, etc.
Existem duas formas de comentário de C:
- Comentários de linha: tudo que estiver, na mesma linha, após o "//" é completamente ignorado pelo compilador;
- Comentários multilinha: comentários que estão entre os símbolos "/*" e "*/", também são ignorados e não são compilados.
Finalmente é uma linguagem de baixo nível por permitir acesso às camadas lógicas mais baixas da máquina.
Isto é, por aproximar-se bastante da linguagem de máquina, Assembler, que apesar de bastante rudimentar tem a capacidade de acessar diretamente a memória, o hardware do computador, como registradores, portas, posições da RAM, etc.
Com isto, ganha-se muito em rapidez de execução e em poder para utilizar completamente os recursos do computador. É importante salientar que apesar de ser possível utilizar-se funções muito complexas de baixo nível em C, um programador não interessado nisto terá uma linguagem estruturada como qualquer outra de alto nível.
Outra característica importante é que C é uma linguagem de estilo livre, sem formatação rigorosa como Fortran e Basic. Em Basic, cada linha contém um comando e cada comando ocupa somente uma linha (às vezes, há até numeração das linhas). Em Fortran, os arquivos de saída contém espaços reservados para cada string, valor de caractere ou espaço em branco que deverá ser impresso. Nada disto ocorre em C. Desde que a sintaxe correta seja seguida, não há maiores restrições na linguagem. Ou melhor, quase não há.
O programador não pode esquecer que o compilador C diferencia caracteres minúsculos de maiúsculos. Por exemplo, as variáveis "numero" e "Numero" são consideradas diferentes uma da outra na linguagem C!!!!
Constantes
Um dado é constante quando não sofre nenhuma variação no decorrer do tempo. Do início ao fim do programa o valor permanece inalterado.
Em C, uma constante caractere é escrita entre aspas simples ( ' e ' ); uma cadeia de caracteres constante, é escrita entre aspas duplas ( " e " ); e constantes numéricas são descritas pelo seu valor numérico, propriamente dito.
A criação de constantes no Arduino pode ser feita de duas maneiras:
- Usando a palavra reservada const
- Usando a diretiva de pré-processador define
Exemplos:
- const int x = 100;
- const char caractconst ='c';
- #define NOME "meu primeiro programa "
- #define VALOR 8
- #define X 100
Tipos de Constantes:
O tipo da constante é definido pelo tipo de valor/dado que esta pode assumir. Constantes podem ser dos tipos:
Constantes numéricas:
Inteiros, octais, hexa, longas e ponto flutuante (reais).
Ex:
- 45E-8 (exponencial)
- 32 (inteiro)
- 034 (octal)
- 0xFE(hexa)
- 2e3 (exponencial)
- 32L (longa)
- 567893 (longa implícito)
- 2.3 (double)
Como podemos notar, constantes inteiras não possuem ponto decimal; constantes octais devem ser precedidas por um '0'; constantes hexa, por um '0x'; constantes longas devem ser seguidas por um 'L', mas quando se trata de um número muito grande o compilador já entende que é um inteiro longo; e constantes double ou float têm ponto decimal flutuante.
Constantes de Caractere:
Podem ser representadas por seu código ASCII, ou entre aspas, ' '. Ex:
' A ' = 65 (em ASCII)
Sequências de Escape
São códigos de tarefas a serem executadas na compilação, representados por caracteres que não podem ser impressos.
Sequência de escape Significado .
\a Caractere Bell (ANSI C)
\b Caractere de retrocesso (backspace)
\n Caractere de nova linha
\r Caractere de retorno de carro
\t Caractere de tabulação horizontal
\\ Caractere de contra-barra
\' Caractere de aspas simples
\" Caractere de aspas duplas
\? Caractere de ponto-de-interrogação
\### Código ASCII em octal de caractere
\x### Código ASCII em hexadecimal de caractere
\0 Caractere nulo
Ex: A instrução
printf(“\n\t\t Hoje \202 dia da Can\x87\xc60 da \nAm\x82rica\?”);
vai imprimir, na tela de saída do console:
Hoje é dia da Canção da
América?
No Arduino existem algumas constantes previamente definidas e são consideradas palavras reservadas:
- true – indica valor lógico verdadeiro
- false – indica valor lógico falso
- HIGH – indica que uma porta está ativada, ou seja, está em 5V.
- LOW – indica que uma porta está desativada, ou seja,está em 0V.
- INPUT – indica que uma porta será de entrada de dados.
- OUTPUT – indica que uma porta será de saída de dados.