Programação em linguagem C - Parte 1
Anderson M. Amaral
Agosto - 2017
Declaração da variável pushButton
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;int pushButton indica um espaço na memória que será usado para armazenar um número (tipo int). A variável deve sempre ser definida antes de ser utilizada!pushButton.=) armazena o valor 2 na posição de memória associada à pushButtonpushButton e perguntarmos o seu valor posteriormente, obteremos 2.Detalhe: uma dada variável só pode ser acessada em um dado escopo [parte do código entre colchetes {} (variável local), ou é acessível a todas as funções se estiver fora das funções (variável global)]
int. Ver por exemplo Data Types em arduino.cc/en/Reference1 byte corresponde a 8 bits.Os valores abaixo são válidos para o arduino uno (ATmega328), mas podem variar conforme o microcontrolador utilizado.
| Tipo | Bits (bytes) | Mínimo | Máximo |
|---|---|---|---|
int |
16(2) | -32.768 | 32.767 |
unsigned int |
16(2) | 0 | 65535 |
long |
32(4) | -2,147,483,648 | 2,147,483,647 |
unsigned long |
32(4) | 0 | 4,294,967,295 |
short |
16(2) | -32.768 | 32.767 |
word |
16(2) | 0 | 65535 |
Na prática, utilizaremos int's e long's, signed ou unsigned.
Voltemos à declaração da variável pushButton. Poderíamos ter definido a variável de uma maneira alternativa:
int pushButton; \\Declaração da variável global
void setup(){
pushButton = 2;
(...)
}Ou ainda, no lugar de pushButton = 2; poderíamos ter escrito pushButton = 1+1; (Verifiquem!)
pushButton = 1+1;pushButton1+1=pushButton;+), subtração('-'), multiplicação('*'), divisão('/'). Podemos também obter o resto da divisão de um inteiro por meio do operador módulo(%). Operações matemáticas podem ser agrupadas utilizando-se parênteses (1+2)/3==1Consideremos o programa abaixo:
void setup() {
Serial.begin(9600); // Inicia o envio de dados via comunicacao serial
}
void loop() {
int var; //Declaracao da variavel local
var = 1+1;
Serial.println(var); //Envia o valor da variavel via serial
delay(100);
}Façamos algumas operações matemáticas. Calcular:
Comentário: o resto da divisão costuma ser útil em procedimentos que são periódicos. Ex.:
0%3==0, 1%3==1, 2%3==2,
3%3==0, 4%3==1, 5%3==2,
6%3==0, 7%3==1, 8%3==2, (...)É possível obter 7/3=2,33?
float e double.float x = 1.135;.float e double são equivalentes.double possui o dobro de bits, e pode ser usado para cálculos de maior precisão.quad, com precisão maior que double...Consideremos o exemplo abaixo (trocar int por float no código anterior):
void setup() {
Serial.begin(9600); // Inicia o envio de dados via comunicacao serial
}
void loop() {
float var; //Declaracao da variavel local
var = 1+1;
Serial.println(var); //Envia o valor da variavel via serial
delay(100);
}var = 1+1; por var = 3/2;? (Não façam no programa ainda!)Agora vejam o resultado no programa.
float. Caso contrário, o compilador interpretará a equação como sendo no domínio dos inteiros!var = 3./2.;float.float's são bem mais complicados para o processador do que aqueles envolvendo inteiros. Desta forma, se quisermos cálculos mais rápidos devemos evitar usar float.bool é usado para armazenar informações binárias, tipo true ou false.bool var = true;Voltemos à IDE. Vejamos a operação de negação ! sobre uma dada variável.
void setup() {
Serial.begin(9600); // Inicia o envio de dados via comunicacao serial
}
bool var = true; //Declaracao da variavel global
void loop() {
var = !var; //Operação lógica de negação do valor anterior
Serial.println(var); //Envia o valor da variavel via serial
delay(100);
}Pergunta: o que acontece se var for declarada localmente no loop()?
DigitalReadSerial, implementem o circuito conforme o esquema abaixo, mas implementem um software em que o sinal na porta serial seja 1 quando o botão não está pressionado.

charchar: armazena um único caractere.char var = 'A';'A') para representar cada letra.char ocupa 1 byte de memória (8 bits), e no fundo também é um número.char var = 65; Codificação ASCII. Podemos mudar o caractere usando expressões matemáticas...char é signed: varia entre -128 a 127. Existe também o unsigned char, mas para este caso é mais usual usar uma variável tipo byte.
tabela ascii
stringstring representa uma sequência (array) de caracteres.char str[10]; permite armazenar 10 caracteres em str.char str[]="teste"; o compilador verifica automaticamente que espaço de memória deve ser reservado.".Vejamos o exemplo abaixo: (atenção para o comando print utilizado!)
void setup() {
Serial.begin(9600); // Inicia o envio de dados via comunicacao serial
}
void loop() {
Serial.print("Ola\n"); //Envia o valor da variavel via serial
delay(100);
}Nota: '' equivale a um único caractere que representa o ato de "apertar Enter". Originalmente o n indica newline, ou nova linha.