Páginas

Arduino em C++


        Programação para Arduino em C++ 


A linguagem de programação do Arduino pode ser dividida em três partes principais: estruturas, valores (variáveis e constantes) e funções.

 

FUNÇÕES


Para controlar a placa Arduino e realizar computações.

Entradas e Saídas Digitais
digitalRead()          
digitalWrite() 
pinMode() 

Entradas e Saídas Analógicas
analogRead() 
analogReference() 
analogWrite() 

Apenas Zero, Due e Família MKR
analogReadResolution() 
analogWriteResolution() 

Entradas e Saídas Avançadas
noTone() 
pulseIn() 
pulseInLong() 
shiftIn() 
shiftOut() 
tone() 

Funções Temporizadoras
delay() 
delayMicroseconds() 
micros() 
millis() 

Funções Matemáticas
abs() 
constrain() 
map() 
max() 
min() 
pow() 
sq() 
sqrt() 

Funções Trigonométricas
cos() 
sin() 
tan() 

Caracteres
isAlpha() 
isAlphaNumeric() 
isAscii() 
isControl() 
isDigit() 
isGraph() 
isHexadecimalDigit() 
isLowerCase() 
isPrintable() 
isPunct() 
isSpace() 
isUpperCase() 
isWhitespace() 

Números Aleatórios
random() 
randomSeed() 

Bits e Bytes
bit() 
bitClear() 
bitRead() 
bitSet() 
bitWrite() 
highByte() 
lowByte() 

Interrupções Externas
attachInterrupt() 
detachInterrupt() 

Interrupções
interrupts() 
noInterrupts() 
Comunicação
Serial 
Stream 
USB
Keyboard 
Mouse 



VARIÁVEIS

Tipos de dados e constantes da linguagem Arduino.

Constantes
HIGH | LOW
INPUT | OUTPUT | INPUT_PULLUP
LED_BUILTIN
true | false
Constantes de Ponto Flutuante 
Constantes Inteiras 

Conversão
byte() 
char() 
float() 
int() 
long() 
word() 

Tipos de Dados
bool 
boolean 
byte 
char 
double 
float 
int 
long 
short 
size_t 
string 
String() 
unsigned char 
unsigned int 
unsigned long 
vetor 
void 
word 

Escopo de Variáveis e Qualificadores
const 
escopo 
static 
volatile 

Utilitários
PROGMEM 
sizeof() 

ESTRUTURAS

Os elementos da linguagem Arduino (C++).

Sketch
loop() 
setup() 

Estruturas de Controle
break 
continue 
do...while 
else 
for 
goto 
if 
return 
switch...case 
while 

break

[Control Structure]

Descrição

break é usado usado para sair de um laço forwhile ou do…while, ignorando a condição padrão do loop. Também é usada para sair do comando switch case.

Código de Exemplo

No códgo seguinte, o break quebra o loop for quando o valor do sensor excede o limiar.
int lim = 40;
for (int x = 0; x < 255; x ++) {
  analogWrite(PWMpin, x);
  sens = analogRead(sensorPin);
  if (sens > lim) { // "foge" do o loop `for`
    x = 0;
    break;
  }
  delay(50);
A documentação de referência da linguagem Arduino está licenciada sob a licença Creative Commons Attribution-Share Alike 3.0.
Encontrou alguma coisa que pode ser melhorada? Sugira correções e nova documentação via GitHub.
Dúvidas sobre como usar o Github? Aprenda tudo o que precisa saber nesse tutorial.

Descrição

O comando continue "pula" o resto da iteração atual de um loop (for, while, ou do…while). Esse comando continua a checar a expressão condicional do loop, e procede com qualquer iterações subsequentes.

Código de Exemplo

O código abaixo escreve o valor de 0 a 255 ao pino PWMpin, mas pula os valores no intervalo 41 a 119.
for (int x = 0; x <= 255; x ++) {
  if (x > 40 && x < 120) {  // cria um salto nos valores
    continue;
  }
 
  analogWrite(PWMpin, x);
  delay(50);
A documentação de referência da linguagem Arduino está licenciada sob a licença Creative Commons Attribution-Share Alike 3.0.
Encontrou alguma coisa que pode ser melhorada? Sugira correções e nova documentação via GitHub.
Dúvidas sobre como usar o Github? Aprenda tudo o que precisa saber nesse tutorial.

do...while
[Control Structure]

Descrição

O loop do…while funciona da mesma forma que o loop while, com a exceção de a condição ser testada no final do loop, tal que o loop será executado pelo menos uma vez.

Sintaxe

do {
  // bloco de comandos
} while (condição);
condição é uma expressão booleana que é avaliada como verdadeiro ou falso, respectivamente true ou false na linguagem Arduino.

Código de Exemplo

int x = 0;
do {
  delay(50);          // espera os sensores estabilizarem
  x = readSensors();  // checa os sensores
} while (x < 100);


else

[Control Structure]

Descrição

A combinação if…​else permite maior controle sobre o fluxo de código que o comando mais básico if, por permitir múltiplos testes serem agrupados juntos. Uma cláusula else (se presente) será executada se a condição do comando if resulta em false. O else pode proceder outro teste if, tal que múltiplos, testes mutualmente exclusivos podem ser executados ao mesmo tempo.
Cada teste irá proceder para o próximo até um teste que resulte em verdadeiro seja encontrado. Quando esse teste for encontrado, o bloco de código correspondente a condição é executado, e o programa então continua a partir da linha seguinte a estrutura if-else completa. Se nenhum teste resultar em verdadeiro, o bloco else padrão é executado, se um estiver presente, que dita o comportamento padrão.
Note que um bloco else if pode ser usado sem um bloco else no final e vice-versa. Um número praticamente ilimitado de blocos else if conectados é permitido.

Sintaxe

if (condição1) {
  // faz coisa A
}
else if (condição2) {
  // faz coisa B
}
else {
  // faz coisa C
}
 

for

[Control Structure]

Descrição

O comando for [e usado para repetir um bloco de código envolvido por chaves. Um contador de incremento é geralmente utilizado para terminar o loop. O comando for é útil para qualquer operação repetitiva, e é usado frequentemente com vetores para operar em coleções de dados ou pinos.

Sintaxe

for (inicialização; condição; incremento) {
  //comando(s);
}
inicialização ocorre primeiro e apenas uma vez. A cada repetição do loop, a condição é testada; se é verdadeira (true), o bloco de comandos, e o incremento são executados. Quando a condição se torna falsa (false), o loop termina.

Código de Exemplo

// Varia o brilho de um LED usando um pino PWM
int pinoPWM = 10; // LED em série com um resistor de 470 ohm no pino 10

void setup() {
  // setup não necessário
}

void loop() {
  for (int i = 0; i <= 255; i++) {
    analogWrite(pinoPWM, i);
    delay(10);
  }
}

Notas e Advertências

O loop for na linguagem C é muito mais flexível que os loops `for` encontrados em outras linguagens. Quaisquer dos três elementos da sintaxe podem ser omitidos, porém os ponto e vírgula (';') são necessários. Além disso, os comandos para inicialização, condição e incremento podem ser quaisquer comandos válidos na linguagem C, mesmo com variáveis não relacionadas ao loop, e podem usar quaisquer tipos de dados da linguagem, incluindo floats. Esses tipos de comandos for incomuns podem prover soluções rápidas para alguns problemas raros de programação.
Por exemplo, usar uma multiplicação no comando de incremento irá gerar uma progressão logarítmica:
for (int x = 2; x < 100; x = x * 1.5) {
  println(x);
}
Gera: 2,3,4,6,9,13,19,28,42,63,94.
Outro exemplo, Aplica um efeito de fading crescente e decrescente em um LED com apenas um loop for:
void loop() {
  int x = 1;
  for (int i = 0; i > -1; i = i + x) {
    analogWrite(pinoPWM, i);
    if (i == 255) {
      x = -1; // muda a direção no pico
    }
    delay(10);
  }
}

goto

[Control Structure]

Descrição

Transfere o fluxo do programa para um ponto rotulado no código.

Sintaxe


rótulo:

goto rótulo; // envia o fluxo do programa de volta para o rótulo

Código de Exemplo

O código abaixo "foge" de dentro de todos os laços caso a leitura no pino analógico 0 seja maior que 250.
for (byte r = 0; r < 255; r++) {
  for (byte g = 255; g > 0; g--) {
    for (byte b = 0; b < 255; b++) {
      if (analogRead(0) > 250) {
        goto cancelar;
      }
      // mais comandos ...
    }
  }
}

cancelar:
// mais comandos ...

Notas e Advertências

O uso do goto é desencorajado na programação em C++, e alguns autores de livros afirmam que o uso do comando goto nunca é necessário, mas se usado judiciosamente ele pode simplificar certos programas. A pela qual muitos programadores desaprovam o uso do goto é que com o uso descuidado de comando goto, é fácil criar um programa com fluxo indefinido, que não pode ser depurado.
Tendo dito isso, há algumas instâncias onde o comando goto pode ser considerado, por simplificar o código. Uma dessas situações é sair de laços for profundamente aninhados, ou blocos if, em determinada condição
 

if

[Control Structure]

Descrição

O comando if checa uma condição e executas o comando a seguir ou um bloco de comandos delimitados por chaves, se a condição é verdadeira ('true').

Sintaxe

if (condição) {
  //comando(s)
}

Parâmetros

condição: uma expressão booleana, isto é, que pode resultar apenas em true ou false

Código de Exemplo

As chaves podem ser omitidas depois de um comando if. Se isso é feito, a próxima linha (definida pelo ponto e vírgula) é interpretada como o único comando condicional. Para mais de um comando, use as chaves para delimitar o bloco de comandos.

if (x > 120) {
  digitalWrite(pinoLED, HIGH);
}

if (x > 120) {
  digitalWrite(pinoLED, HIGH);
}

if (x > 120) {
  digitalWrite(pinoLED, HIGH);
}

if (x > 120) {
  digitalWrite(pinoLED1, HIGH);
  digitalWrite(pinoLED2, HIGH);
} // todas as formas acima estão corretas

Notas e Advertências

As expressões sendo testadas dentro dos parênteses geralmente requerem o uso de um ou mais dos operadores mostrados abaixo.
Operadores de comparação:
x == y (x é igual a y)
x != y (x é diferente de 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)
Cuidado para não usar acidentalmente o símbolo de igual simples (ex. if (x = 10) ). O símbolo de igual simples é o operador de atribuição, se atribui 10 a x (coloca o valor 10 na variável x). Em vez disso, o símbolo de igual duplo (ex. if (x == 10) ) deve ser usado, que é o operador de comparação, e testa se x é igaul a 10 ou não. O último é apenas verdadeiro se x é igual a 10, enquanto o primeiro comando mostrado sempre resultará em verdadeiro.
Isso acontece porque a linguagem C++ interpreta if (x=10) da seguinte forma: 10 é atribuído a x (Lembre que o símbolo de igual simples é o (operador de atribuição)), então x agora contém 10. então o comando 'if' testa 10, o que sempre resulta true, desde que qualquer número diferente de zero resulta em true. Consequentemente, if (x = 10) irá sempre resultar em true, o que não é desejável ao se usar um comando 'if'. Além disso, a variável x irá receber o valor 10, o que também é indesejado.

return

[Control Structure]

Descrição

Termina uma função e retorna um valor, caso desejado.

Sintaxe

return;

return valor; // ambas as formas são válidas

Parâmetros

valor: qualquer variável ou constante de qualquer tipo de dado

 

Código de Exemplo


Uma função para comparar a saída de um sensor com um limiar
int checaSensor() {
  if (analogRead(0) > 400) {
    return 1;
  }
  else {
    return 0;
  }
}
The return keyword is handy to test a section of code without having to "comment out" large sections of possibly buggy code.
void loop() {
  return;

  // the rest of a dysfunctional sketch here
  // this code will never be executed
}

Ver Também

 

switch...case

[Control Structure]

Descrição

Da mesma forma que o comando if, o comando switch case controla o fluxo do programa permitindo ao programador especificar código diferente para ser executado em várias condições. Em particular, um comando switch compara o valor de uma variável aos valores especificados nos comandos case. Quando um comando case é encontrado cujo valor é igual ao da variável, o código para esse comando case é executado.
A palavra-chave break interrompe o comando switch, e é tipicamente usada no final de cada case. Sem um comando break, o comando switch irá continuar a executar as expressões seguintes (desnecessariamente) até encontrar um break, ou até o final do comando switch ser alcançado.

Sintaxe

switch (var) {
  case valor1:
    // comando(s)
    break;
  case valor2:
    // comando(s)
    break;
  default:
    // comando(s)
    break;
}

Parâmetros

var: uma variável para ser comparada com os vários cases. Tipos de dados permitidos: int, char
valor1valor2: constantes. Tipos de dados permitidos: int, char

Retorna

Nada

Código de Exemplo

switch (var) {
  case 1:
    // faz algo quando var é igual a 1
    break;
  case 2:
    // faz algo quando var é igual a 1
    break;
  default:
    // Se nenhum dos anteriores, faz o caso padrão default
    // default é opcional
    break;
}

 

while

[Control Structure]

Descrição

Um loop while irá se repetir continuamente, e infinitamente, até a expressão dentro dos parênteses (), se torne falsa. Algo deve mudar a variável testada, ou o loop while nunca irá encerrar. Isso pode ser no seu código, por exemplo, uma variável incrementada, ou uma condição externa, como a leitura de um sensor.

Sintaxe

while (condição) {
  // código a ser executado repetidamente
}
condição é uma expressão booleana que resulta em true ou false.

Código de Exemplo

var = 0;
while (var < 200) {
  // faz algo repetitivo 200 vezes
  var++;
}


Outros Elementos da Sintaxe
#define (define) 
#include (include) 
/* */ (comentário em bloco) 
// (comentário) 
; (ponto e vírgula) 
{} (chaves) 

Operadores Aritméticos
% (resto) 
* (multiplicação) 
+ (adição) 
- (subtração) 
/ (divisão) 
= (operador de atribuição) 

Operadores de Comparação
!= (diferente de) 
< (menor que) 
<= (menor que ou igual a) 
== (igual a) 
> (maior que) 
>= (maior que ou igual a) 

Operadores Boleanos
! (NÃO lógico) 
&& (E lógico) 
|| (OU lógico) 

Operadores para Ponteiros
& (referência) 
* (desreferência) 

Operadores Bitwise
& (E) 
<< (deslocamento à esquerda) 
>> (deslocamento à direita) 
^ (OU EXCLUSIVO) 
| (OU) 
~ (NÃO) 

Operadores de Atribuição Composta
%= (compound remainder) 
&= (atribuição por e) 
*= (atribuição por multiplicação) 
++ (incremento) 
+= (atribuição por adição) 
-- (decremento) 
-= (atribuição por subtração) 
/= (atribuição por divisão) 
^= (atribuição por ou exclusivo) 
|= (atribuição por ou) 

Nenhum comentário:

Postar um comentário