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 à pushButton
pushButton
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;
pushButton
1+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==1
Consideremos 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.
char
char
: 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
.string
string
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.