Introduction: Arduino Tutorial - LDC - Menu
Este é um tutorial onde iremos mostrar-vos uma montagem em que o principal propósito é explicar o funcionamento do seu código, tendo este o objectivo de conceber uma estrutura de funcionamento para um conjunto de páginas vulgarmente chamado de menu. A sua disposição organizada a facilitar a visualização e navegação entre as suas páginas como também ajuda na elaboração dos códigos de Arduino.
Para visualizar as páginas deste menu será utilizado um LCD1602 e para podermos navegar entre as páginas do nosso menu são utilizados alguns botões de pressão ou "Push Button", podendo saltar entre páginas visualizando a alterando a sua informação.
A estrutura e interligação entre as páginas do menu deve ser elaborada previamente ajustando-as às suas funcionalidades, este procedimento deverá ser utilizado em qualquer tipo montagem, mesmo que esta seja pequena, pois facilita a organização do código a quando da sua elaboração. (Ver imagem acima).
Caso tenham duvidas ou queiram saber mais sobre as características e configurações de LCD1602, vejam os seguintes tutoriais e a sua datasheet (Ver ficheiros abaixo):
Arduino Tutorial - Clock - LCD
https://www.instructables.com/id/Arduino-Tutorial-Clock-LCD/
ou
Arduino Tutorial - LCD - Temperature Sensor
https://www.instructables.com/id/Arduino-Tutorial-LCD-Temperature-Sensor/
Attachments
Step 1: Montagem
Como sempre em montagem complexas utilizamos na montagem uma pequena "Breadboard" onde colocamos as alimentações positivas e negativas distribuindo-as mais facilmente para os todos os componentes da montagem.
Depois começamos por colocar o LCD na montagem, pois este é o componente que necessita de mais ligações e por fim colocamos os botões e as suas respectivas resistências eléctricas ligando-os aos pinos de sinal digital do Arduino (Ver imagem acima).
Material necessário:
- 1x Arduino UNO;
- 1x Cabo USB;
- 1x Breadboard;
- 1x LCD1602;
- 1x Resistência 220Ω;
- 1x Potenciómetro 10KΩ;
- 3x Botões (Push Button);
- 3x Resistências 1KΩ.
Instalação do LCD1602:
Cada pino do LCD tem uma função especifica e como podem observar na imagem da montagem completa não são utilizamos todos os seus pinos, assim para explicar mais facilmente o funcionamento do LCD, agrupamos os seus pinos em 3 grupos, o grupo Pinos de Alimentação, o de Pinos de Comunicação e de Pinos de Informação (Ver legenda acima).
Pinos de Alimentação:
- GND;
- VCC;
- V0;
- LED - ou A (Anodo);
- LED + ou K (Catodo).
A alimentação do LCD é realizada através dos pinos GND e VCC, devendo ter o pino VCC uma tensão de 5V que será fornecida pelo Arduino UNO, pois este os seus pinos de alimentação tem tensões estáveis e protegidas não permitindo que existam sobrecargas ou curto-circuitos.
O Pino V0 tem como função ajustar o contraste dos caracteres do LCD, para podermos controlar esse ajuste ligamos neste pino uma resistência variável de 10KΩ com uma montagem de um divisor de tensão, alterando assim a tensão a tensão no pino V0 entre os 0 e 5V (Ver imagem acima).
Este tipo de LCD tem um LED como luz de fundo sendo este alimentado através dos pinos A e K fornecida também pelo Arduino, no entanto, como explicado em tutoriais anteriores devemos ligar o LED em série com uma resistência de 220Ω, para que o brilho não seja demasiado intenso e reduzir a probabilidade de este se danificar.
Pinos de Comunicação:
- RS (Register Select);
- R/W (Read / Write);
- E (Enable).
Nos pinos de comunicação apenas teremos de ter mais atenção ao pino R/W, pois este deve estar ligado a GND para que seja permitido escrever no LCD, aparecendo assim os caracteres, caso contrario podemos estar a ler o dados guardados na sua memoria interna ficando o LCD em branco.
Pinos de Informação:
- D0;
- D1;
- D2;
- D3;
- D4;
- D5;
- D6;
- D7.
Nesta montagem são utilizados todos os pinos de alimentação e comunicação, no entanto, apenas utilizamos metade dos pinos de informação, isto é possível através da utilização no código da biblioteca LiquidCrystal.h, esta permite ler o "Byte" ou 8bits de informação enviado pelo Arduino, através da divisão deste em 2 partes, ou seja, são lidos 4bits de cada vez.
Para isso esta biblioteca utiliza os pinos de comunicação, de modo a que o LCD consiga saber qual é a forma que irá receber a informação, ou seja, se com 8bits através dos pinos D0 a D7 ou com 4bits através dos pinos D4 a D7).
Instalação dos botões:
Terminada a instalação do LCD, colocamos na "Breadboard" os 3 botões de pressão e as suas respectivas resistências de 1KΩ e ligamos cada um dos botões a um dos pinos de sinal digital do Arduino, sendo assim estes os nossos controlos de navegação entre as várias páginas do menu. Para tornar mais intuitiva a utilização dos botões, estes devem ser dispostos e identificados consoante a sua função, como por exemplo, botão MENOS ou "BACK", botão MENU ou "SELECT" e ainda botão MAIS ou "FORWARD".
Para saber mais sobre os pinos de sinal digital do Arduino definidos como entradas e onde são explicamos esta características mais detalhadamente, verifiquem um tutorial anterior:
Arduino Tutorial - Digital Input - Button - Monitor Serial
https://www.instructables.com/id/Arduino-Tutorial-Digital-Input-Button-Monitor-Seri/
Step 2: Código
Estando a montagem completa ligamos o cabo USB e carregamos o código na placa do Arduino, mas primeiro aqui vai a sua explicação, como sempre começamos por importar a biblioteca LiquidCrystal.h através do gestor de bibliotecas do Arduino IDE. Esta biblioteca facilita muito a programação do código para o LCD, sendo apenas necessário configurar 2 funções para que o LCD fique a funcionar em pleno, que caso contrario seria muitas mais.
//Definir os pinos de comunicação e informação do LCD:
LiquidCrystal lcd ("RS", "E", "D7", "D6", "D5", "D4");e
void setup(){
//Inicia a comunicação com LCD 16x2:
lcd.begin(2, 16);
}Depois para escrever no LCD será necessário primeiro definir o local onde se começará a escrever, ou seja, qual a coluna e a linha, só depois imprimimos o texto que queremos, tendo em atenção que este LCD apenas tem 16 colunas e 2 linhas, no caso do texto passar esses limites do LCD não serão visíveis todos caracteres.
void loop(){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print("Texto");
}Agora para configurar os pinos de sinal digital do Arduino como entradas utilizamos da função PinMode colocando a palavra "INPUT", bastando colocar esta função para cada um dos nossos botões do menu.
//Definição do tipo de pino (Entrada): pinMode(Botao_Menos, INPUT); pinMode(Botao_Menu, INPUT); pinMode(Botao_Mais, INPUT);
Depois de definir quais os pino do Arduino como entradas, utilizamos a função DigitalRead tendo esta como objectivo ler o estado dos pinos de entrada, verificando assim se estes estão em nível baixo ou nível alto "LOW" ou "HIGH".
//Se a leitura do pino for LOW ou nível baixo:
if (digitalRead(Pino_Entrada) == LOW){
}ou
//Se a leitura do pino for HIGH ou nível alto:
if (digitalRead(Pino_Entrada) == HIGH){
}Eis então o código completo para da nossa montagem, onde são utilizados todos os conceitos descritos anteriormente, criando um menu onde é possível navegar pelas suas páginas e visualizar suas diferentes informações num LCD e tudo isto através dos 3 botões da montagem.
#include <LiquidCrystal.h> //Importar a LCD library.
//Definir os pinos de comunicação e informação do LCD.
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
int Botao_mais = 2; //Variável para selecção do pino digital (Botão 1).
int Botao_menu = 3; //Variável para selecção do pino digital (Botão 2).
int Botao_menos = 4; //Variável para selecção do pino digital (Botão 3).
int Num_Menu = 0; //Variável para selecção da página.
int Num_titulo = 1; //Variável para selecção do titulo da página.
//Variável para os títulos das páginas.
char* Titulo_Menu[] = {"Menu - 0",
"Pagina - 1",
"Menu - 2",
"Menu - 3",
"Pagina - 4",
"Pagina - 2.1", "Pagina - 2.2",
"Pagina - 3.1", "Pagina - 3.2", "Pagina - 3.3"};
//Correr a função SETUP apenas uma vez após ser pressionado Reset:
void setup(){
//Iniciar a Comunicação com LCD:
lcd.begin(2, 16);
//Definição do tipo de pino (Saída ou entrada):
pinMode(Botao_mais, INPUT);
//Definição do tipo de pino (Saída ou entrada):
pinMode(Botao_menu, INPUT);
//Definição do tipo de pino (Saída ou entrada):
pinMode(Botao_menos, INPUT);
}
//Correr a função LOOP repetidamente:
void loop(){
//Correr a função:
Pagina_Menu_0();
//Correr a função:
Pagina_1();
//Correr a função:
Pagina_Menu_2();
//Correr a função:
Pagina_2_1();
//Correr a função:
Pagina_2_2();
//Correr a função:
Pagina_Menu_3();
//Correr a função:
Pagina_3_1();
//Correr a função:
Pagina_3_2();
//Correr a função:
Pagina_3_3();
//Correr a função:
Pagina_4();
//Atraso para o próximo passo:
delay(800);
}
//Página do Menu - 0:
void Pagina_Menu_0(){
//Condição para abrir página:
if (Num_Menu == 0){
//Apaga a informação do LCD.
lcd.clear();
//Condição para escrever no LCD os nomes das páginas:
if (Num_titulo > 0 & Num_titulo < 3){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[1]);
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print(Titulo_Menu[2]);
}
//Condição para escrever no LCD os nomes das páginas:
else if (Num_titulo > 2 & Num_titulo < 5){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[3]);
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print(Titulo_Menu[4]);
}
//Condição para selecionar página 1 e 3:
if (Num_titulo == 1 || Num_titulo == 3){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(">");
}
//Condição para selecionar página 2 e 4:
else if (Num_titulo == 2 || Num_titulo == 4){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 1);
//Escreve no LCD:
lcd.print(">");
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH){
//Condição para selecionar página:
if (Num_titulo >= 1){
//Altera o valor de selecção do título do menu.
Num_titulo = Num_titulo + 1;
}
//Condição para selecionar página:
if (Num_titulo > 4){
//Altera o valor de selecção do título do menu.
Num_titulo = 4;
}
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH){
//Condição para selecionar página:
if (Num_titulo < 1){
//Altera o valor de selecção do título do menu.
Num_titulo = 1;
}
//Condição para selecionar página:
if (Num_titulo <= 4){
//Altera o valor de selecção do título do menu.
Num_titulo = Num_titulo - 1;
}
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH){
//Condição para selecionar página:
if (Num_titulo == 1){
//Altera o valor de selecção do menu.
Num_Menu = 1;
}
//Condição para selecionar página:
else if (Num_titulo == 2){
//Altera o valor de selecção do título do menu.
Num_titulo = 5;
//Altera o valor de selecção do menu.
Num_Menu = 2;
}
//Condição para selecionar página:
else if (Num_titulo == 3){
//Altera o valor de selecção do título do menu.
Num_titulo = 7;
//Altera o valor de selecção do menu.
Num_Menu = 3;
}
//Condição para selecionar página:
else if (Num_titulo == 4) {
//Altera o valor de selecção do menu.
Num_Menu = 4;
}
}
}
}
//Pagina do Menu - 1:
void Pagina_1(){
//Condição para abrir página:
if (Num_Menu == 1){
//Apaga a informação do LCD.
lcd.clear();
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[Num_titulo]);
lcd.print(":");
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 1);
//Escreve no LCD:
lcd.print("Info:TEXTO...");
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH){
//Altera o valor de selecção do menu.
Num_Menu = 0;
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH){
//Não realiza nenhuma acção.
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH){
//Não realiza nenhuma acção.
}
}
}
//Página do Menu - 2:
void Pagina_Menu_2(){
//Condição para abrir página:
if (Num_Menu == 2){
//Apaga a informação do LCD.
lcd.clear();
//Condição para escrever no LCD os nomes das páginas:
if (Num_titulo == 5 || Num_titulo == 6){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[5]);
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print(Titulo_Menu[6]);
}
//Condição para selecionar página 2.1:
if (Num_titulo == 5){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(">");
}
//Condição para selecionar página 2.2:
else if (Num_titulo == 6){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 1);
//Escreve no LCD:
lcd.print(">");
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH){
//Condição para selecionar página:
if (Num_titulo == 5){
//Altera o valor de selecção do título do menu.
Num_titulo = Num_titulo + 1;
}
//Condição para selecionar página:
else if (Num_titulo == 6){
//Altera o valor de selecção do título do menu.
Num_titulo = Num_titulo - 1;
}
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH){
//Altera o valor de selecção do título do menu.
Num_titulo = 2;
//Altera o valor de selecção do menu.
Num_Menu = 0;
}
//Atraso para o próximo passo:
delay(800);
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH){
//Condição para selecionar página:
if (Num_titulo == 5){
//Altera o valor de selecção do menu.
Num_Menu = 5;
}
//Condição para selecionar página:
else if (Num_titulo == 6){
//Altera o valor de selecção do menu.
Num_Menu = 6;
}
}
}
}
//Página do Menu - 2.1:
void Pagina_2_1(){
//Condição para abrir página:
if (Num_Menu == 5){
//Apaga a informação do LCD.
lcd.clear();
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[5]);
lcd.print(":");
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print("Info:TEXTO...");
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH) {
//Altera o valor de selecção do menu.
Num_Menu = 2;
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH) {
//Não realiza nenhuma acção.
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH) {
//Não realiza nenhuma acção.
}
}
}
//Página do Menu - 2.2:
void Pagina_2_2() {
//Condição para abrir página:
if (Num_Menu == 6){
//Apaga a informação do LCD.
lcd.clear();
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[6]);
lcd.print(":");
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print("Info:TEXTO...");
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH) {
//Altera o valor de selecção do menu
Num_Menu = 2;
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH) {
//Não realiza nenhuma acção.
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH) {
//Não realiza nenhuma acção.
}
}
}
//Página do Menu - 3:
void Pagina_Menu_3(){
//Condição para abrir página:
if (Num_Menu == 3){
//Apaga a informação do LCD.
lcd.clear();
//Condição para escrever no LCD os nomes das páginas:
if (Num_titulo > 6 & Num_titulo < 9){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[7]);
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print(Titulo_Menu[8]);
}
//Condição para escrever no LCD os nomes das páginas:
else if (Num_titulo == 9){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[9]);
}
//Condição para selecionar pagina 3.1:
if (Num_titulo == 7 || Num_titulo == 9){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(">");
}
//Condição para selecionar pagina 3.2:
else if (Num_titulo == 8){
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 1);
//Escreve no LCD:
lcd.print(">");
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH){
//Condição para selecionar página:
if (Num_titulo >= 7){
//Altera o valor de selecção do título do menu.
Num_titulo = Num_titulo + 1;
}
//Condição para selecionar página:
if (Num_titulo > 9){
//Altera o valor de selecção do título do menu.
Num_titulo = 7;
}
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH){
//Altera o valor de selecção do titulo do menu.
Num_titulo = 3;
//Altera o valor de selecção do menu.
Num_Menu = 0;
}
//Atraso para o próximo passo:
delay(800);
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH){
//Condição para selecionar página:
if (Num_titulo == 7){
//Altera o valor de selecção do menu.
Num_Menu = 7;
}
//Condição para selecionar página:
else if (Num_titulo == 8){
//Altera o valor de selecção do menu.
Num_Menu = 8;
}
//Condição para selecionar pagina:
else if (Num_titulo == 9){
//Altera o valor de selecção do menu.
Num_Menu = 9;
}
}
}
}
//Página do Menu - 3.1:
void Pagina_3_1() {
//Condição para abrir página:
if (Num_Menu == 7){
//Apaga a informação do LCD.
lcd.clear();
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[7]);
lcd.print(":");
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print("Info:TEXTO...");
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH) {
//Altera o valor de selecção do menu.
Num_Menu = 3;
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH) {
//Não realiza nenhuma acção.
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH) {
//Não realiza nenhuma acção.
}
}
}
//Página do Menu - 3.2:
void Pagina_3_2() {
//Condição para abrir página:
if (Num_Menu == 8){
//Apaga a informação do LCD.
lcd.clear();
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[8]);
lcd.print(":");
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print("Info:TEXTO...");
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH) {
//Altera o valor de selecção do menu.
Num_Menu = 3;
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH) {
//Não realiza nenhuma acção.
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH) {
//Não realiza nenhuma acção.
}
}
}
//Página do menu - 3.3:
void Pagina_3_3() {
//Condição para abrir página:
if (Num_Menu == 9){
//Apaga a informação do LCD.
lcd.clear();
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[9]);
lcd.print(":");
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print("Info:TEXTO...");
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH) {
//Altera o valor de selecção do menu.
Num_Menu = 3;
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH) {
//Não realiza nenhuma acção.
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH) {
//Não realiza nenhuma acção.
}
}
}
//Página do Menu - 4:
void Pagina_4() {
//Condição para abrir página:
if (Num_Menu == 4){
//Apaga a informação do LCD.
lcd.clear();
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(0, 0);
//Escreve no LCD:
lcd.print(Titulo_Menu[Num_titulo]);
lcd.print(":");
//Define a coluna (em 16) e a linha (em 2) do LCD onde escrever:
lcd.setCursor(1, 1);
//Escreve no LCD:
lcd.print("Info:TEXTO...");
//Condição para acção dos botões na página:
if (digitalRead(Botao_menos) == HIGH){
//Altera o valor de selecção do menu.
Num_Menu = 0;
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_menu) == HIGH){
//Não realiza nenhuma acção.
}
//Condição para acção dos botões na página:
if (digitalRead(Botao_mais) == HIGH){
//Não realiza nenhuma acção.
}
}
}Caso queiram saber mais ou tenham dúvidas sobre estas ou outras referências no código, vejam a sua explicação detalhada no site oficial do Arduino, através da ligação https://www.arduino.cc/en/Reference/HomePage.
Procurem os nossos tutoriais acerca do Arduino, onde são explicadas diversas montagens e o funcionamento dos seus componentes, já agora visitem também o nosso canal no Youtube, Instagram, Facebook ou Twitter.
Abraço e bons projectos.







