5 – CONVERSANDO COM O ARDUINO
O nosso microprocessador "conversa" na Linguagem C++. Existem palavras específicas no seu "dicionário" para que ele entenda o que queremos.
ALERTA!!! As explicações que virão a seguir muitas vezes estão fora da verdade técnica. Lembre-se que tem por objetivo o leigo entender o "mecanismo" da coisa. Procure informações mais exatas na própria internet. |
A linguagem para conversar com o Arduino segue basicamente nossa linguagem: existem verbos (ordens, comando ou instruções) e objetos sobre os quais a ação age. Os "objetos" são valores, comparações, condições, entradas ou saída de informações.
O sistema é digital, isto é, reconhece tensões positivas ( + , 1 ou HIGH) e tensões negativas ( - , 0 ou LOW). O Arduino trabalha com uma tensão de 5,0 Volts, mas pode ser alimentado com até 12,0 Volts (ele reduz para 5,0 Volts).
O Arduino precisa saber QUANDO você termina uma instrução (uma ordem e seu objeto). Isto é feito colocando um ponto e vírgula ";"
Existem 3 áreas de trabalho nele:
- uma de "inicialização" onde serão dados nomes aos objetos, valores e programas de uma biblioteca para acionamentos de sensores ou outros atuadores, seguida de
- outra área, o "setup", onde o Arduino será informado de quais são seus pinos e se serão usados para entrada oou saída de informações. Nesta área ainda serão informadas outras situações de comunicação externa ou como os objetos serão iniciados. Esta área inicia com uma chave "{" e termina com outra "}" Isso é importante para que o Arduino saiba por onde está andando.
- O "loop" é a área onde ele executa as instruções repetidamente. É aqui onde será colocada a "programação" que controla os atuadores, os sensores e os movimentos da "máquina". Obrigatoriamente termina e começa com chaves { instrução 1 e objeto ; instrução 2 e objeto ; ... ;}
Ainda existe a possibilidade de serem feitas subrotinas, também entre chaves, que podem ou não ser chamadas a partir do "loop" principal.
As áreas de setup, loop e subrotinas devem ser iniciadas pela palavra "void", e algum objeto ou condição na qual ela deve ser executada, entre parênteses.
Iremos ensaiando a linguagem aos poucos, à medida que usamos.
ANDANDO PARA FRENTE
Queremos que o motor 1, M1, ande para frente e sua ponte H está ligada nos pinos 5 e 6 do Arduino (volte e consulte a tabela das polaridades que devem ser aplicadas e o chassi do carro, no item "4-Montando uma Máquina"). Portanto podemos dizer que o pino 5 deve receber uma tensão positiva e o pino 6 negativa (NUNCA ambas positivas, pois dará curto-circuito na ponte. Outro tipo de ponte pode ter polaridade invertida).
digitalWrite (5,HIGH);
digitalWrite (6,LOW);
Pronto, ordenamos que o Arduino coloque digitalWrite e sinal positivo (HIGH ou 1) no pino 5 e negativo (LOW ou 0) no pino 6. Observe a estrutura da instrução: comando (condições) fim de instrução digitalWrite (5, HIGH);
Ainda poderia ser escrito assim
digitalWrite (5,1);
digitalWrite (6,0);
Atenção:
- uma vírgula separa os dados das condições do comando (5 , HIGH)
- não use caracteres e acentuação da língua portuguesa. Isto foi criado para o inglês!
Mas, onde escreveremos tudo isso?
Por enquanto usaremos o "Bloco de Notas" do Windows, ou outro processador de texto que te interesse.
Sugiro que comece agora e vá seguindo o que a apostila mostra.
Se usar duas barras // a linguagem entende que isso é uma observação e não deve ser usada como instrução. Muito útil para você saber o que está ordenando.
digitalWrite (5,1); // sinal alto ou positivo
digitalWrite (6,0); // sinal baixo ou negativo
Observe na imagem do chassi do carro que o motor 1, M1, ou esquerdo, deve girar no sentido antihorário para que o carro vá para frente. Se isso não ocorrer, você tem duas opções:
- ou inverte os sinais HIGH e LOW nos pinos 5 e 6
- ou inverte os fios que ligam a ponte ao motor.
Quando o programa ficar maior, com mais linhas de instrução, você perceberá que é mais fácil inverter os fios do que mudar TODAS as linhas !
Agora fazemos a mesma coisa para o motor 2, M2 ou direito. Mas antes, vamos lembrar que estas instruções estarão dentro da área de "loop".
void loop() { // a chave indica o inicio do loop
digitalWrite (5,HIGH); // motor esquerdo
digitalWrite (6,LOW); // motor esquerdo
digitalWrite (10,HIGH); // motor direito
digitalWrite (11,LOW); // motor direito
} // esta chave fecha o fim do loop
Pronto?
NÃÃÃÃO !!!!
Você não informou ao Arduino quais dos seus 20 pinos são aqueles que ele usará para o motor. Esta informação deverá ser dada na área de "setup" assim, antes de começar o loop, ele saberá o que os pinos fazem!
Dica: use tabulação (espaços) nas linhas de instrução para ver claramente o que está entre as chaves de inicio e fim de área de trabalho.
O motor direito M2 deve girar no sentido horário. Mesmos acertos que o M1, ou inverta as condições LOW e HIGH ou inverta os fios entre ponte e motor.
void setup() { // a chave indica o inicio do setup
pinMode(5,OUTPUT); // o modo do pino 5 será saída de informação do motor 1.
pinMode(6,OUTPUT); // mesmo raciocínio para os demais…
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
} // esta chave fecha o fim do setup
void loop() { // a chave indica o inicio do loop
digitalWrite (5,HIGH); // motor esquerdo para frente
digitalWrite (6,LOW); // motor esquerdo
digitalWrite (10,HIGH); // motor direito para frente
digitalWrite (11,LOW); // motor direito
} // esta chave fecha o fim do loop
REVERTENDO A MARCHA
É necessário inverter as polarizações da ponte (e do motor, mas sem desmontar o carro para isso, claro. É mais fácil fazer nas instruções no loop.
void loop() { // a chave indica o inicio do loop
digitalWrite (5,HIGH); // motor esquerdo para frente
digitalWrite (6,LOW); // motor esquerdo
digitalWrite (10,HIGH); // motor direito para frente
digitalWrite (11,LOW); // motor direito
digitalWrite (5,LOW); // motor esquerdo para trás
digitalWrite (6,HIGH); // motor esquerdo
digitalWrite (10,LOW); // motor direito para trás
digitalWrite (11,HIGH); // motor direito
} // esta chave fecha o fim do loop
Pronto, agora o carro vai para frente e para trás?
NÃÃÃÃO !!!!
A placa tem um "relógio" que a faz ocilar a 16 MHz. Executa um ciclo de instrução 16 milhões de vezes por segundo e ele vai passar pelo loop nesta "velocidade"! Podemos dizer que o motor nem tem tempo de iniciar a rotação e já tem que reverter!
Então teremos que dizer a ele quanto tempo deve esperar enquanto anda para frente, antes de reverter a rotação.
delay(3000); // o tempo é medido em milisegundos, então 3000 milisegundos = 3 segundos
Observe a estrutura da instrução: comando(valor) fim da instrução .
Vamos colocar tempo menor para o movimento para trás.
void loop() { // a chave indica o inicio do loop
digitalWrite (5,HIGH); // motor esquerdo para frente
digitalWrite (6,LOW); // motor esquerdo
digitalWrite (10,HIGH); // motor direito para frente
digitalWrite (11,LOW); // motor direito
delay(3000); // espera 3 segundos antes de passar para a próxima instrução
digitalWrite (5,LOW); // motor esquerdo para trás
digitalWrite (6,HIGH); // motor esquerdo
digitalWrite (10,LOW); // motor direito para trás
digitalWrite (11,HIGH); // motor direito
delay(2000); // espera 2 segundos antes de passar para a próxima instrução
} // esta chave fecha o fim do loop, retorna ao inicio
Agora o carro anda 3 segundos para frente, depois 2 segundos para trás. Aí reinicia o ciclo andando para frente.
Agora você tem uma idéia de como "conversar" com o Arduino na linguagem C++.
Nosso vocabulário tem, por enquanto, apenas 6 palavras de comando void setup loop pinMode INPUT digitalWrite delay e alguns sinais para organizar as instruções { ( HIGH , LOW ) } ; //
Antes de sair apressadamente em busca das palavras desta linguagem e como usá-las, acompanhe mais um pouco esta "apostilinha".
Voltar: https://clpires.comunidades.net/4-montando-uma-maquina
Próxima: 6-parecia fácil, mais conversa com o arduino
Início do arduino
contato: clpires13@gmail.com