gavmac00/arduino-docs huggingface dataset:
int x = 12;     // binário: 1100
int y = 10;     // binário: 1010
int z = x ^ y;  // binário: 0110, ou decimal 6
O operador ^ é frequentemente utilizado para trocar (isto é, mudar de 0 para 1, ou 1 para 0) alguns dos bits em uma expressão inteira. Em uma operação XOR se há um 1 no bit da máscara, aquele bit é invertido; se há um 0, o bit não é invertido e continua o mesmo.
// Nota: Esse código usa registradores específicos para microcontroladores AVR (Uno, Nano, Leonardo, Mega, etc.)
// Ele não irá compilar para outras arquiteturas
void setup(){
// Ele não irá compilar para outras arquiteturas
void setup(){
  DDRB = DDRB | B00100000; // configura PB5 (pino 13 no Uno/Nano, pino 9 no Leonardo/Micro, pino 11 no Mega) como OUTPUT
  Serial.begin(9600);
}
void loop(){
PORTB = PORTB ^ B00100000;  // inverte PB5, deixa os outros bits intocados
delay(100);
}
Ver Também
EXEMPLO Tutorial BitMath (Em Inglês)
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Bitwise operators
            > Bitwiseand
          
&
          [Bitwise Operators]
          
Descrição
&
          [Bitwise Operators]
          
Descrição
O operador bitwise E em C++ é um único & (e comercial ou ampersand), usado entre duas expressões inteiras. O operador E bit-a-bit atua em cada bit dos operandos independentemente, de acordo com a seguinte regra: se ambas entradas são 1, a saída resultante é 1, do contrário o resultado é 0.
Outra forma de se expressão isso é:
0  0  1  1    operando1
0  1  0  1    operando2
----------
0  0  0  1    (operando1 & operando2) - resultado retornado
No Arduino, o tipo int é um valor 16-bit, então & usado entre dois operandos do tipo int causa 16 operações bit-a-bit E simultâneas.
Código de Exemplo
Em um fragmento de código do tipo:
int a =  92;    // em binário: 0000000001011100
int b = 101;    // em binário: 0000000001100101
int c = a & b;  // resultado:    0000000001000100, ou 68 em decimal.
Cada um dos 16 bits em a e b são processados com o operador &, e todos os 16 bits resultantes são armazenados em c, resultando no valor binário 01000100, que é 68 em decimal.
Um dos usos mais comuns da operação bit-a-bit E é selecionar um bit particular (ou bits) de um valor inteiro, frequentemente chamado de masking. Veja abaixo um exemplo (específico para arquitetura AVR):
PORTD = PORTD & B00000011;  // apaga os bits 2 - 7, deixando o valor dos pinos PD0 e PD1 intocados (xx & 11 == xx)
Ver Também
LINGUAGEM && E lógico
EXEMPLO Tutorial BitMath (Em Inglês)
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > Break
          
break
          [Control Structure]
          
Descrição
> Break
          
break
          [Control Structure]
          
Descrição
break é usado usado para sair de um laço for, while 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);
}
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > If
          
if
          [Control Structure]
          
Descrição
> If
          
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(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 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.
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > Else
          
else
          [Control Structure]
          
Descrição
> Else
          
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
}
Código de Exemplo
}
else {
  // faz coisa C
}
Código de Exemplo
Abaixo um trecho de código de um sistema de controle de temperatura
if (temperatura >= 70) {
  //Perigo! Desligar o sistema
}
else if (temperatura >= 60 && temperatura < 70) {
  //Cuidado! Requerida a atenção do usuário
}
else {
  //Seguro! Continue as tarefas usuais...
}
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > For
          
for
          [Control Structure]
          
Descrição
> For
          
for
          [Control Structure]
          
Descrição
O comando for é 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);
}
A 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
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
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);
  }
}
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > Goto
          
goto
          [Control Structure]
          
Descrição
Transfere o fluxo do programa para um ponto rotulado no código.
Sintaxe
rótulo:
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
}
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.
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > Return
          
return
          [Control Structure]
          
Descrição
Termina uma função e retorna um valor, caso desejado.
Sintaxe
return;
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;
  }
}
A palavra-chave return é útil para testar uma seção de código sem ter que "comentar" grandes seções de código possivelmente cheio de erros.
void loop() {
  return;
  // o resto de um esboço disfuncional aqui
  // este código nunca será executado
}
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > Dowhile
          
do...while
          [Control Structure]
          
Descrição
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);
A 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);
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > Continue
          
continue
          [Control Structure]
          
Descrição
> Continue
          
continue
          [Control Structure]
          
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);
}
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > Switchcase
          
switch...case
          [Control Structure]
          
Descrição
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 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
valor1, valor2: 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 2
    break;
  default:
    // Se nenhum dos anteriores, faz o caso padrão default
    // default é opcional
    break;
}
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Structure
            >  Control structure
            > While
          
while
          [Control Structure]
          
Descrição
> While
          
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
}
A 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++;
}
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Variable scope qualifiers
            > Volatile
          
volatile
          [Variable Scope & Qualifiers]
          
Descrição
volatile
          [Variable Scope & Qualifiers]
          
Descrição
A palavra chave volatile é conhecida como um qualificador de variáveis, e é geralmente usada antes do tipo de dado da variável, para modificar a forma com qual o compilador e o programa tratam a variável.
Declarar uma variável como volatile é uma diretiva para o compilador. O compilador é o software que traduz seu código C/C++ em linguagem de máquina, que são as instruções reais entendidas pelo chip microcontrolador na placa Arduino.
Especificamente, essa diretiva faz com que o compilador carregue a variável da RAM e não de um registrador, que é uma localização temporária da memória onde variáveis do programa são guardadas e manipuladas. Sob certas circunstâncias, o valor de uma variável armazenada em registradores pode ser impreciso.
Uma variável deve ser declarada volatile quando seu valor pode ser mudado por algo além do controle da seção de código na qual ela aparece, como uma thread paralela. No Arduino, o único lugar do código onde isso pode ocorrer é em seções associadas com interrupções, chamadas de rotina de serviço de interrupção (interrupt service routine).
variáveis volatile int ou long
variáveis volatile int ou long
Se a variável volatile é maior que um byte (ex. um int de 16 bits ou long de 32 bits), o microcontrolador não é capaz de lê-la em apenas um passo, porquê é um microcontrolador 8 bits. Isso significa que enquanto a seção principal do seu código (ex. seu loop) lê o primeiro ou os primeiros bytes da variável, a interrupção pode mudar os outros bytes. Isso irá produzir valores inesperados na variável.
Solução:
Enquanto a variável é lida, as interrupções são desativadas, de forma que estas não podem bagunçar as variáveis durante a leitura.
Há algumas formas de se fazer isso:
noInterrupts
Há algumas formas de se fazer isso:
noInterrupts
usar a macro ATOMIC_BLOCK. Operações atômicas são operações únicas para o microcontrolador - a menor unidade possível.
Código de Exemplo
// muda o estado do LED quando o estado do botão é mudado
int pin = 13;
volatile int state = LOW;
void setup() {
  pinMode(pin, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(2), blink, CHANGE);
}
void loop() {
  digitalWrite(pin, state);
}
void blink() {
  state = !state;
}
#include <util/atomic.h>  // essa biblioteca inclui a macro ATOMIC_BLOCK.
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Variable scope qualifiers
            > Const
          
const
          [Variable Scope & Qualifiers]
          
Descrição
const
          [Variable Scope & Qualifiers]
          
Descrição
A palavra-chave const é uma abreviação de constante. É um qualificador  de variáveis que modifica o comportamento da variável, fazendo com que a variável seja de "apenas-leitura". Isso significa que a variável pode ser usada como qualquer outra variável de seu tipo, mas seu valor não pode ser mudado. Você terá um erro de compilação se tentar atribuir um valor a uma variável const.
Constantes definidas com a palavra chave const obedecem as regras dos escopos de variáveis que governam variáveis. Isso, e as armadilhas de se usar #define, fazem com que o modificador const um método superior de se definir constantes e é favorecido em lugar de se usar #define.
Código de Exemplo
Código de Exemplo
const float pi = 3.14;
float x;
// ....
x = pi * 2; // constantes podem ser usadas em cálculos
pi = 7; // ilegal - você não pode modificar o valor de uma constante
Notas e Advertências
#define ou const
Você pode usar ambos const ou #define para criar constantes numéricas ou strings constantes. Para vetores, você irá precisar usar const. Em geral, const é favorecido em lugar de #define ao se definir constantes.
Ver Também
LINGUAGEM #define
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Variable scope qualifiers
            > Scope
          
escopo
          [Variable Scope & Qualifiers]
          
Descrição
escopo
          [Variable Scope & Qualifiers]
          
Descrição
Variáveis na linguagem de programação C++, a qual o Arduino usa, possuem uma propriedade chamada escopo. Isso contrasta com antigas versões de linguagens como o BASIC onde toda variável era uma variável global.
Uma variável global é uma que pode ser vista por todas as funções de um programa. Diferentemente, variáveis locais são visíveis apenas às funções nas quais são declaradas. No ambiente Arduino, qualquer variável declarada fora de uma função (ex. setup(), loop(), etc. ), é uma variável _ global_.
Quando programas começam a ficar muito longos e complexos, variáveis locais são uma forma útil de garantir que apenas uma função tenha acesso as suas próprias variáveis. Isso previne erros de programação quando uma função inadvertidamente modifica variáveis usadas por outra função.
Às vezes também é vantajoso declarar e inicializar uma variável dentro de um loop for. Isso cria uma variável que pode ser acessada apenas dentro do próprio bloco do loop for.
Código de Exemplo
int gPWMval;  // qualquer função poderá acessar essa variável
void setup() {
  // ...
}
void loop() {
  int i;    // "i" é "visível" apenas dentro de "loop"
  float f;  // "f" é "visível" apenas dentro de "loop"
  // ...
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Variable scope qualifiers
            > Static
          
static
          [Variable Scope & Qualifiers]
          
Descrição
static
          [Variable Scope & Qualifiers]
          
Descrição
A palavra-chave static é usada para criar variáveis que são visíveis para apenas uma função. No entanto, diferentemente de variáveis locais, que são criadas e destruidas toda vez que uma função é chamada, variáveis static persistem entre chamadas da função, preservando seu valor.
Variáveis declaradas como static são criadas e inicializadas apenas a primeria vez que uma função é chamada.
Código de Exemplo
/* RandomWalk
  Paul Badger 2007
  RandomWalk wanders up and down randomly between two
  endpoints. The maximum move in one loop is governed by
  the parameter "stepsize".
  A static variable is moved up and down a random amount.
  This technique is also known as "pink noise" and "drunken walk".
*/
This technique is also known as "pink noise" and "drunken walk".
*/
#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;
int thisTime;
int total;
void setup() {
  Serial.begin(9600);
}
void loop() {
  //  test randomWalk function
  stepsize = 5;
  thisTime = randomWalk(stepsize);
  Serial.println(thisTime);
  delay(10);
}
int randomWalk(int moveSize) {
  static int place; // variable to store value in random walk - declared static so that it stores
  // values in between function calls, but no other functions can change its value
  place = place + (random(-moveSize, moveSize + 1));
  if (place < randomWalkLowRange) {                               // check lower and upper limits
if (place < randomWalkLowRange) {                               // check lower and upper limits
    place = randomWalkLowRange + (randomWalkLowRange - place);    // reflect number back in positive direction
  }
  else if (place > randomWalkHighRange) {
    place = randomWalkHighRange - (place - randomWalkHighRange);  // reflect number back in negative direction
  }
  return place;
}
Ver também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Conversion
            > Bytecast
          
byte()
          [Conversion]
          
Descrição
Converte um valor para o tipo de dado byte.
Sintaxe
byte(x)
Parâmetros
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Conversion
            > Wordcast
          
word()
          [Conversion]
          
Descrição
Converte um valor para o tipo de dado word.
Sintaxe
word(x)
word(h, l)
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Conversion
            > Intcast
          
int()
          [Conversion]
          
Descrição
Converte um valor para o tipo de dado int.
Sintaxe
int(x)
Parâmetros
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Conversion
            > Charcast
          
char()
          [Conversion]
          
Descrição
Converte um valor para o tipo de dado char.
Sintaxe
char(x)
Parâmetros
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Conversion
            > Floatcast
          
float()
          [Conversion]
          
Descrição
Converte um valor para o tipo de dado float.
Sintaxe
float(x)
Parâmetros
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Conversion
            > Longcast
          
long()
          [Conversion]
          
Descrição
Converte um valor para o tipo de dado long.
Sintaxe
long(x)
Parâmetros
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Data types
            > String
          
string
          [Data Types]
          
Descrição
> String
          
string
          [Data Types]
          
Descrição
As strings de texto podem ser representadas de duas maneiras. Você pode usar o tipo de dado String, que é parte do core desde a versão 0019, ou você pode fazer uma string com um vetor do tipo char e terminá-lo em null. Essa página descreve o segundo método. Para mais detalhes sobre o objeto String, que possui mais funcionalidades ao custo de mais memória ocupada, veja a página sobre os objetos String.
Sintaxe
Todos as declarações seguintes são válidas para strings.
char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
Possibilidades para declarar strings
Declarar um vetor de chars sem inicializá-lo, como em Str1
Declarar um vetor de chars (com um char extra) e o compilador irá adicionar o caractere null requerido, como em Str2
Adicionar o caractere null explicitamente, Str3
Inicializar uma string constante em aspas; o compilador irá ajustar o tamanho do vetor para a string mais o caractere null terminador, como em Str4
Inicializar o vetor com o tamanho explícito e a string constante, Str5
Inicializar o vetor com o tamanho explícito e a string constante, Str5
Inicializar o vetor, deixando espaço extra para uma string maior, Str6
Terminação em null
Geralmente, strings são terminadas com um caractere null (código ASCII 0). Isso permite que funções (como Serial.print()) saibam onde está o final de uma string. Do contrário, essas funções continuariam lendo bytes consequentes da memória que não fazem parte da string.
Isso significa que sua string precisa ter espaço para mais um caractere além do texto que você quer que ela contenha. Por isso que Str2 e Str5 precisam ter oito carcteres, mesmo que "arduino" seja apenas sete - a última posição é automaticamente preenchida com um caractere null. Str4 é automaticamente ajustada para oito caracteres, sendo um para o null extra. Em Str3, o caractere null foi explicitamente incluído, adicionando-se '\0'.
Note que é possível criar uma string sem uma caractere null no final (ex. se se você tivesse especificado o tamanho de Str2 como sete em vez de oito). Porém isso irá quebrar a maioria das funções que usam strings, então você não deve fazê-lo intencionalmente. Se você notar algo se comportando estranhamente no seu programa (operando em caracteres fora da string), isso pode ser o problema.
Aspas simples ou aspas duplas?
As strings são sempre definidas envoltas em aspas duplas ("Abc") e caracteres são sempre definidos envoltos em aspas simples('A').
Escrevendo strings muito longas
Você pode escrever uma string muito longa em várias linhas, da seguinte forma:
char myString[] = "Essa é a primeira linha"
" Essa é a segunda linha"
" Essa é a segunda linha"
" etcetera";
Vetores de strings
Frequentemente é conveniente, quando lidando-se com grandes quantidades de texto, como um projeto com um display LCD, configurar um vetor de strings. Como strings por sí próprias já são vetores, isso é na verdade um exemplo de um vetor bidimensional.
No código abaixo, o asterisco depois do tipo de dado char “char*” indica que esse é um vetor de "ponteiros". Todos os nomes de vetores são na verdade ponteiros, então isso é necessário para criar um vetor de vetores. Ponteiros são uma partes mais esotéricas da linguagem C++ para inicinates entenderem, mas não é necessário entender ponteiros profundamente para usá-los efetivamente aqui.
Código de Exemplo
Código de Exemplo
char *myStrings[] = {"This is string 1", "This is string 2", "This is string 3",
                     "This is string 4", "This is string 5", "This is string 6"
                    };
void setup() {
  Serial.begin(9600);
}
void loop() {
  for (int i = 0; i < 6; i++) {
    Serial.println(myStrings[i]);
    delay(500);
  }
}
Ver Também
LINGUAGEM PROGMEM
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Data types
            > Void
          
void
          [Data Types]
          
Descrição
> Void
          
void
          [Data Types]
          
Descrição
A palavra chave void é usada apenas em declarações de funções. Ela indica que é esperado que a função não retorne nenhuma informação para a função da qual foi chamada.
Código de Exemplo
O código mostra como usar a palavra chave void.
// são realizadas ações nas funções "setup" e "loop"
// porém não é retornada nenhuma informação quando as mesmas são executadas
void setup() {
  // ...
}
void loop() {
  // ...
}
Ver Também
LINGUAGEM Constantes Inteiras
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Data types
            > Int
          
int
          [Data Types]
          
Descrição
Ints (integer ou inteiros) são o tipo o tipo de dados primário para armazenamento de números.
No Arduino Uno (e outras placas baseadas em micros ATmega) um int armazena um valor 16-bit (2 bytes). Isso garante um intervalo de -32,768 a 32,767 (um valor mínimo de -2^15 e um valor máximo de (2^15) - 1).
No Arduino Due e outras placas baseadas em micros SAMD (como o MKR1000 e Zero), um int armazena um valor 32-bit (4 bytes). O que garante um intervalo de -2,147,483,648 a 2,147,483,647 (um valor mínimo de -2^31 e um valor máximo de (2^31) - 1).
Variáveis int armazenam números negativos com uma técnica chamada (Complemento de 2). O bit mais significativo, as vezes chamado de o "bit de sinal", indica que o número é negativo. O resto dos bits são invertidos e 1 é adicionado.
O Arduino cuida dos detalhes nas operações com números negativos por você, tal que operações aritméticas funcionam transparentemente na maneira esperada. No entanto, pode-se haver uma complicação ao lidar com o operador de deslocamento de bits a direita (>>).
Sintaxe
int var = val;
=== Parâmetros
var: nome da variável
val: valor a ser atribuído à variável
Código de Exemplo
val: valor a ser atribuído à variável
Código de Exemplo
Esse código cria uma variável do tipo integer chamada 'contador', a qual é inicialmente atribuído o valor 0 (zero). A váriavel incrementa em 1 (um) a cada execução do loop e é mostrada no monitor serial.
int contador = 0;          //cria uma variável integer chamada 'contador'
void setup() {
  Serial.begin(9600);      // usa a porta serial para imprimir o número
}
void loop() {
  contador++;               // soma 1 ao int contador a cada execução do loop
  Serial.println(contador); // Imprime o estado atual do contador
  delay(1000);
}
Notas e Advertências
delay(1000);
}
Notas e Advertências
Quando variáveis com  sinal são forçadas a exceder sua capacidade máxima ou mínima, elas estouram; ou do Inglês, sofrem overflow. O resultado de um overflow é imprevisível, então isso deve ser evitado. Um sintoma típico de um overflow é a variável "rolar" de sua capacidade máxima para a mínima ou vice-versa, mas não é sempre o caso. Se você deseja esse comportamento, use o tipo unsigned int.
Ver Também
LINGUAGEM Integer Constants
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Data types
            > Word
          
word
          [Data Types]
          
Descrição
> Word
          
word
          [Data Types]
          
Descrição
Uma variável word armazena um número sem sinal de ao menos 16 bits, de 0 A 65535.
Sintaxe
word var = val;
Parâmetros
var: nome da variável
val: valor a ser atribuído à variável
Código de Exemplo
O trecho de código abaixo cria uma variável do tipo word.
word w = 10000;
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Data types
            > Float
          
float
          [Data Types]
          
Descrição
> Float
          
float
          [Data Types]
          
Descrição
Tipo de dado para números de ponto flutuante, ou seja, um número racional. Números de ponto flutuante são frequentemente usados para aproximar valores analógicos e contínuos porque possuem maior resolução que inteiros (int). Números de ponto flutuante podem ser tão grandes quanto 3.4028235E+38 ou pequenos quanto -3.4028235E+38. Floats são armazenados em 32 bits (4 bytes) de memória.
Floats possuem apenas 6-7 dígitos decimais de precisão. Isso para o número total de dígitos, não de dígitos à direita do ponto decimal. Diferentemente de outras plataformas, onde se pode ter mais precisão usando-se um double (até 15 dígitos), no Arduino, o double possui o mesmo tamanho que float.
Números de ponto flutuante não são exatos, e podem gerar resultados estranhos quando comparados. Por exemplo, 6.0 / 3.0 pode não ser igual a 2.0. Você deveria, em vez disso, checar se o valor absoluto da diferença entre dois números é menor que algum número.
A matemática em números de ponto flutuante também é muito mais lenta que em inteiros ao se realizar cálculos, então deve ser evitada se, por exemplo, um loop tem que ser executado em alta velocidade para uma função de tempo crítico. Programadores frequentemente fazem o possível para converter cálculos em números flutuantes para matemática em inteiros para aumentar a velocidade, mas sacrificando precisão.
Quando fizer cálculos com floats, você precisa adicionar um ponto decimal, do contrário o número será tratado como um int. Veja a página sobre constantes de ponto flutuante para mais detalhes.
Sintaxe
float var = val
=== Parâmetros
var: nome da variável
val: valor a ser atribuído à variável
Código de Exemplo
val: valor a ser atribuído à variável
Código de Exemplo
O trecho de código demonstra algumas operações com floats.
float myfloat;
float sensorCalbrate = 1.117;
int x;
int y;
float z;
x = 1;
y = x / 2;          // y agora contém 0, ints não podem guardar frações
z = (float)x / 2.0; // z agora contém 0.5 (você deve usar 2.0, não 2)
Ver Também
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Data types
            > Long
          
long
          [Data Types]
          
Descrição
> Long
          
long
          [Data Types]
          
Descrição
Variáveis long são variáveis de tamanho extendido para armazenamento de números, armazenam 32 bits (4 bytes), de  -2,147,483,648 a 2,147,483,647.
Ao se fazer cálculos com inteiros, pelo menos um dos números deve ser seguido por um L, forçando-o a ser um long. Veja a página sobre Constantes Inteiras para detalhes.
Sintaxe
long var = val;
=== Parâmetros
var: nome da variável
val: valor a ser atribuído à variável
Código de Exemplo
long speedOfLight = 186000L;  // veja a página sobre constantes inteiras para uma explicação sobre o 'L'
Ver Também
LINGUAGEM Constantes Inteiras
Linguagem
funções
variáveis
estrutura
Bibliotecas
IoT Cloud API
Glossário
        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.
    
Last Revision: Searching...
Last Build: 2023/06/30 
Editar essa Página
Reference
            >  Language
            >  Variables
            >  Data types
            > Boolean
          
boolean
          [Data Types]
          
Descrição