Venho apresentar pra quem não conhece um curso gratuito que eu considero de excelente qualidade, o curso de arduino do canal WR Kits. Demorei um tempo pra achar um curso gratuito onde a pessoa fosse direta, clara e demostrar um bom conhecimento no assunto, boas práticas de programação e claro entender de eletrônica. Link da playlist no YouTube
Esses operadores podem ser usados dentro de sentenças condicionais if, while. && (logica "e") True somente se os dois operadores forem verdadeiros Exemplo: if (digitalRead(2) == HIGH && digitalRead(3) == HIGH) {
} Será verdadeiro se as duas leituras forem altas (HIGH). || (lógica "ou") True se qualquer uma das sentenças forem verdadeiras. Exemplo: if (x > 0 || y > 0 { } Será verdadeiro se x ou y for maior que 0.
Calcula o resto da divisão quando um inteiro é dividido por outro. É útil para manter uma variável dentro de um patemar específico (e.g. o tamanho de um array). Sintaxe: resultado = dividendo % divisor Parâmetros: dividendo: o número que será dividido divisor: o número a dividir por Retorna: o resto Exemplo: x = 7 % 5; // x agora comtém 2 x = 9 % 5; // x agora comtém 4 x = 5 % 5; // x agora comtém 0 x = 4 % 5; // x agora comtém 4
= é um operador de atribuição ou caractere de igualdade único. Armazena o valor à direita do caractere de igualdade único à variável nomeada à esquerda. O caractere de igualdade único na linguagem de programação C é chamado operador de atribuição. Ele possui um significado diferente do presente na classe de álgebra, onde ele indica uma equação ou igualdade. O operador de atribuição diz ao microcontrolador para definir qualquer valor ou expressão no lado direito do caractere de igualdade e armazená-lo na variável à direita do mesmo. Exemplo: int sensVal; // declara uma variável inteira, nomeada sensVal senVal = analogRead(0); // armazena a voltagem de entrada (digital) no pino analógico 0 em SensVal
Constantes são expressões predefinidas na linguagem Arduino. Eles são usados para fazer os programas mais fáceis de ler. Podemos classificar a constantes em grupos: Definindo níveis lógicos: true e false (booleano constantes) lá são duas constantes usadas para representar a verdade e falsidade na linguagem Arduino: true e false. false é definido como 0 (zero). true muitas vezes é dito ser definido como 1, o que é correto, mas é verdade, tem uma definição mais ampla. Qualquer número inteiro que é diferente de zero é verdade, no sentido de Boolean. Então -1 e 2 -200 são todos definidos como verdadeiro, também, em um sentido booleano.
Chaves são elementos principais da linguagem de programação C. Elas são usadas em diversas construções diferentes, como as destacadas abaixo, e algumas vezes podem ser confusas para os iniciantes. Uma chave aberta "{" sempre deve ser seguida de uma chave fechada "}". Esta é uma condição que é comumente mencionada para que as chaves sejam balanceadas. A IDE (Integrated Development Environment) do Arduino inclui um recurso conveniente para verificar o balanço das chaves. Selecione uma chave ou clique no ponto de inserção imediatamente após uma delas e sua companheira lógica será destacada. No momento, este recurso está com alguns probleminhas porque a IDE sempre irá encontrar (incorretamente) uma chave no texto, mesmo que tenha sido "comentada".
Usado para finalizar declarações de variáveis, loops ou chamadas a funções. Exemplo: int a = 13; Esquecer o término de uma linha com um ponto-e-vírgula irá resultar em um erro do compilador. O texto do erro pode ser óbvio e se referir ao ponto-e-vírgula esquecido. Se um erro de compilação impossível de entender ou ilógicamente visto for detectado, uma das primeiras ações a tomar é verificar a falta do ponto-e-vírgula nas imediações, antecedendo a linha que o compilador reclamou.
Transfere o fluxo do programa para um outro ponto etiquetado Sintaxe: label: //código ou não goto label; // envia o fluxo do programa para label: O uso do goto é desencorajado em programação C e inclusive alguns autores afirmam que o goto nunca é realmente necessário, mas usado com cautela pode simplificar alguns programas. A razão pela qual muitos programadores desaprovam seu uso é que com o uso indiscriminado é fácil de se criar um programa com um fluxo indefinido e muito difícil de ser depurado.
Finaliza uma função e retorna um valor, se necessário. Sintaxe: return; return valor; // ambas formas são válidas Parâmetros: valor: alguma variável ou constante Exemplo: Uma função para comparar o valor de um sensor com um limite int checkSensor(){ if (analogRead(0) > 400) { return 1; else{ return 0; } }
expressão continue pula o resto da interação de um loop (do,for ou while). Ela volta para o teste condicional do loop, e prossegue com quaisquer iterações subsequentes. Exemplo: for (x = 0; x < 255; x ++) { if (x > 40 && x < 120){ // volta para o começo caso x > 40 e x <120 continue; } digitalWrite(pinoPWM, x); delay(50); }
break é utilizado para sair de um expressão do, for, ou um loop while, ignorando a condicional que alimenta o loop. É também utilizado para sair de uma expressão switch. Exemplo: for (x = 0; x < 255; x ++) { digitalWrite(pinoPWM, x); sens = analogRead(pinoSensor); if (sens > limite){ // para se atingir um limite x = 0; break; } delay(50); }
O do loop funciona da mesma maneira como o while, no entanto a condição sempre é testada no fim do loop, isso implica que o do loop sempre irá rodar pelo menos uma vez mais. do { // bloco de intruções } while (testa a condição);
Os loops while vão rodar continuamente e infinitamente, até que a expressão dentro dos parêntesis, () torne-se falsa. A variável testada deve mudar dinamicamente, caso contrário o loop while nunca terminará. Algo como uma variável sendo incrementada, ou uma condição externa, como o teste de um sensor ou um contador de tempo. Sintaxe: while(expressão){ // instrução(s) }
Assim como na instrução if, o switch...case permite programar diferentes blocos de instruções para diferentes condições. Em particular, o switch compara o valor de uma única variável com diferentes valores especificados nas declarações do case. Quando um valor do case é igual ao valor da variável, o código definido naquele caso é executado. O comando break para o teste do switch, e normalmente é utilizado no fim de cada caso, case. Sem o break, o switch continuará executando as instruções seguintes até que encontre um break ou chegue no fim da expressão do switch. Exemplo switch (valor) { case 1: //fazer algo quando valor == 1 break; case 2: //fazer algo quando valor == 2 break; default: // se nada mais encaixa, fazer o padrão }
A instrução for é usada para repetir um bloco de instruções definido entre as chaves. Geralmente utiliza-se um contador para incrementar e finalizar o loop. A instrução for é útil para quaisquer operações repetitivas, e é normalmente combinada com arrays para operar em uma coleção de dados ou pinos. O header para o loop com for é composto por três partes: for (inicialização; condição; incremento) { //instrução(ou instruções); }
if/else permite que você tenha mais controle sobre o fluxo do seu código do que apenas utilizando a declaração If. Permite que você faça múltiplos testes agrupados entre si. Por exemplo, se você quiser testar um input analógico e baseado no seu valor realizar certa tarefa ou caso contrário realizar outra tarefa, por exemplo: se o input for menor que 500 faça alguma coisa, caso contrário faça outra: if (input < 500) { // fazer A } else // caso contrário, isto é input > 500 { // fazer B }
if (condicional) e ==, !=, <, > (operadores de comparação) if é sempre utilizado em conjunto com os operadores de comparação, ele testa se um certa condição foi alcançada, como por exemplo se uma variável atingiu um certo valor. O formato para testes com o (if) é o seguinte: if (algumaVariavel > 50) { // faça algo aqui } O programa testa pra ver se algumaVariavel é maior do que 50. Se for, o programa executa uma determinada ação. Ou seja, se o que estiver declarado nos parênteses for verdadeiro, as instruções entre as chaves são executadas. Se não, o programa pula para a próxima parte do código.
No Arduino após a função setup(), que inicializa e declara os valores iniciais, a função loop() faz precisamente o que seu nome indica: ela repete-se continuamente permitindo que seu programa funcione dinamicamente. É utilizada para controlar de forma ativa a placa Arduino. Exemplo: int botaoPino = 3; /* * setup() inicializa a comunicação serial e o modo do * pino conectado ao pulsador, como entrada */ void setup() { Serial.begin(9600); // inicia uma comunicação serial arduino - PC pinMode(botaoPino, INPUT); //define o pino do botao como entrada }
No Arduino a função setup() é chamada no momento em que o programa começa. É usada para inicializar variáveis, definir os modos de entrada ou saída dos pinos, indicar bibliotecas, etc. Essa função é executada somente uma vez, quando o Arduino é iniciado ou quando é resetado. Exemplo: int buttonPin = 3; // declaração de uma variável global void setup() // função setup - início do programa { Serial.begin(9600); pinMode(buttonPin, INPUT); } void loop() // função loop { //... }