Robótica Livre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
Gigio
Gigio
Mensagens : 68
Data de inscrição : 09/03/2022
Idade : 16
Escola : Colegio Estadual Professor Lindaura Ribeiro Lucas

Exercício 3.17 Empty Exercício 3.17

Qua Set 21, 2022 1:50 pm
/*
CURSO DE ROBOTICA 2019

Exercicio: 3.17
Tema: Controle RGB pelo terminal
Atividade: Controlar os leds RGB pelo terminal, Letras maiusculas acendem o LEDs e minusculas apagam os LEDs (R, G e B)
Descrição: Receber o caractere pela serial, reconhecer o caractere e comandar os LEDS RGB, quando receber Miuscula acende o led e minuscula apaga o led
Hardware: Display ligado RS=>pino D12; EN=>pino D13; D4=>pino D4; D5=>pino D5; D6=>pino D6; D7=>pino D7, o terminal usa a porta USB do arduino,
Hardware2: Neste exercício vamos configurar os pinos analógicos para funcionar como pinos digitais, no caso A4=D18 ; A3=D17 ; A2=D16 ;
Comandos: Serial.begin(9600); lcd.print(); Serial.available(); Serial.print(); pinMode();
Dica1: A configuração da serial usa velocidade padrão de 9600, poderia ser alterado caso necessite maior performance
Dica2: Na interface do arduino abrir o terminal em ferramentas - Monitor serial ou ctr+shift+M
Dica3: Enviar para o terminal \n para nova linha ou \r para retorno de carro
Dica4: Checar se o valor enviado está correto e enviar mensagem de erro se os valores não forem numeros
Dica5: O digito R acende o led Vermelho e o digito r apaga o led Vermelho
Dica6: O digito G acende o led Verde e o digito g apaga o led Verde
Dica7: O digito B acende o led Azul e o digito b apaga o led Azul
Dica8: Para converter os pinos analógicos em digital, por exemplo, para o pino A2 Usar pinMode(16, OUTPUT);
Dica9: No terminal enviar texto informando o status do led
Dica10:No display informas R=OFF G=OFF na outra linha B=OFF
*/

//DEFINICOES INICIAIS
#include //Carrega a biblioteca com as funções do display
#define ledR 16 //led vermelho ligado no pino A2 que convertido para digital 16
#define ledG 17 //led vermelho ligado no pino A3 que convertido para digital 17
#define ledB 18 //led vermelho ligado no pino A4 que convertido para digital 18

//DECLARAcAO DE VARIAVEIS GLOBAIS
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //Setup conforme as ligações realizadas RS-EN-D4-D5-D6-D7
byte caractere; //Variavel usda para guardar a leitura da serial
byte numero; //Variavel usada para guardar o estado do LED Vermelho,
byte numero2; //Variável usada para guardar o estado do LED Verde,
byte numero3; //Variável usada para guardar o estado do LED Azul,

//INICIALIZAÇÃO DO HARDWARE
void setup() {
lcd.begin(16, 2); //Inicia o LCD,
lcd.clear(); //Limpa o LCD,
lcd.print("R: OFF | G: OFF"); //Manda ao LCD - R: OFF | G: OFF,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha,
lcd.print("B: OFF"); //Manda ao LCD - B: OFF,
Serial.begin(9600); //Inicia o monitor serial,
pinMode(ledR, OUTPUT); //Define o LED Vermelho como OUTPUT,
pinMode(ledG, OUTPUT); //Define o LED Verde como OUTPUT,
pinMode(ledB, OUTPUT); //Define o LED Azul como OUTPUT,
}

//FUNÇÕES COMPLEMENTARES
void Ligado() { //Função para ligar os LEDs:
if (caractere == 82) { //Se o valor de caractere for 82:
digitalWrite(ledR, HIGH); //Liga o LED Vermelho,
numero = 1; //A variável número será equivalente a 1,
}
if (caractere == 71) { //Se o valor de caractere for 71:
digitalWrite(ledG, HIGH); //Liga o LED Verde,
numero2 = 1; //A variável número 2 será equivalente a 1,
}
if (caractere == 66) { //Se o valor de caractere for 66:
digitalWrite(ledB, HIGH); //Liga o LED Azul,
numero3 = 1; //A variável número 3 será equivalente a 1,
}
}
void Desligado() { //Função para desligar os LEDs:
if (caractere == 114) { //Se o valor de caractere for 114:
digitalWrite(ledR, LOW); //Desliga o LED Vermelho,
numero = 0; //A variável número será equivalente a 0,
}
if (caractere == 103) { //Se o valor de caractere for 103:
digitalWrite(ledG, LOW); //Desliga o LED Verde,
numero2 = 0; //A variável número 2 será equivalente a 0,
}
if (caractere == 98) { //Se o valor de caractere for 98:
digitalWrite(ledB, LOW); //Desliga o LED Azul,
numero3 = 0; //A variável número 3 será equivalente a 0,
}
}

void Tela() { //Função para a tela:
if (numero == 0 && numero2 == 0 && numero3 == 0) { //Se Número = 0, Número 2 = 0, Número 3 = 0:
lcd.clear(); //Limpa o conteúdo do LCD,
lcd.print("R: OFF | G: OFF"); //Manda as informações do LEDs ao monitor serial,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha co LCD,
lcd.print("B: OFF"); //Manda as informações do LEDs ao monitor serial,
}
else if (numero == 1 && numero2 == 0 && numero3 == 0) { //Se Número = 1, Número 2 = 0, Número 3 = 0:
lcd.clear(); //Limpa o conteúdo do LCD,
lcd.print("R: ON | G: OFF"); //Manda as informações do LEDs ao monitor serial,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha co LCD,
lcd.print("B: OFF"); //Manda as informações do LEDs ao monitor serial,
}
else if (numero == 1 && numero2 == 1 && numero3 == 0) { //Se Número = 1, Número 2 = 1, Número 3 = 0:
lcd.clear(); //Limpa o conteúdo do LCD,
lcd.print("R: ON | G: ON "); //Manda as informações do LEDs ao monitor serial,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha co LCD,
lcd.print("B: OFF"); //Manda as informações do LEDs ao monitor serial,
}
else if (numero == 1 && numero2 == 1 && numero3 == 1) { //Se Número = 1, Número 2 = 1, Número 3 = 1:
lcd.clear(); //Limpa o conteúdo do LCD,
lcd.print("R: ON | G: ON "); //Manda as informações do LEDs ao monitor serial,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha co LCD,
lcd.print("B: ON "); //Manda as informações do LEDs ao monitor serial,
}
else if (numero == 0 && numero2 == 1 && numero3 == 1) { //Se Número = 0, Número 2 = 1, Número 3 = 1:
lcd.clear(); //Limpa o conteúdo do LCD,
lcd.print("R: OFF | G: ON "); //Manda as informações do LEDs ao monitor serial,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha co LCD,
lcd.print("B: ON "); //Manda as informações do LEDs ao monitor serial,
}
else if (numero == 0 && numero2 == 0 && numero3 == 1) { //Se Número = 0, Número 2 = 0, Número 3 = 1:
lcd.clear(); //Limpa o conteúdo do LCD,
lcd.print("R: OFF | G: OFF"); //Manda as informações do LEDs ao monitor serial,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha co LCD,
lcd.print("B: ON "); //Manda as informações do LEDs ao monitor serial,
}
else if (numero == 0 && numero2 == 0 && numero3 == 0) { //Se Número = 1, Número 2 = 0, Número 3 = 0:
lcd.clear(); //Limpa o conteúdo do LCD,
lcd.print("R: OFF | G: ON "); //Manda as informações do LEDs ao monitor serial,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha co LCD,
lcd.print("B: OFF"); //Manda as informações do LEDs ao monitor serial,
}
else if (numero == 1 && numero2 == 0 && numero3 == 1) { //Se Número = 1, Número 2 = 0, Número 3 = 1:
lcd.clear(); //Limpa o conteúdo do LCD,
lcd.print("R: ON | G: OFF"); //Manda as informações do LEDs ao monitor serial,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha co LCD,
lcd.print("B: ON"); //Manda as informações do LEDs ao monitor serial,
}
else if (numero == 0 && numero2 == 1 && numero3 == 0) { //Se Número = 0, Número 2 = 1, Número 3 = 0:
lcd.clear(); //Limpa o conteúdo do LCD,
lcd.print("R: OFF | G: ON "); //Manda as informações do LEDs ao monitor serial,
lcd.setCursor(0, 1); //Coloca o cursor na segunda linha co LCD,
lcd.print("B: OFF"); //Manda as informações do LEDs ao monitor serial,
}
}
//PROGRAMA PRINCIPAL
void loop() {
caractere = Serial.read(); //Caractere é a leitura do monitor serial,
if (caractere != 255) { //Se o valor de caractere NÃO for 255:
Serial.print("Caractere: "); //Manda "Caractere: " ao monitor serial,
Serial.print(caractere); //Manda o valor da variável Caractere ao monitor serial,
Serial.print("\n"); //Pula uma linha no monitor serial,
}
Ligado(); //Invoca a função Ligado(),
Desligado(); //Invoca a função Desligado(),
Tela(); //Invoca a função Tela(),
delay(80); //Delay de 80MS para que o LCD não oscile tanto.
}
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5039
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Exercício 3.17 Empty Re: Exercício 3.17

Qua Set 21, 2022 10:00 pm
Fala Giovanni, descobriu como transformar os pinos analógicos em digitais então, boa.
Testei e funcionou, parabéns
Nos comentários vou cobrar que faça diferente, essa interpretação linha a linha do óbvio não combina com o seu nível de programador. Quero que coloque o porque do comando ou bloco, como ele afeta no contexto do programa.
No seu comentário está basicamente respondendo o que é o comando, troca para como afeta o programa ou porque está ali, e nos blocos a função dele no contexto. Com isso pode até não responder linha a linha, pois sei que sabe os comandos, pode até fazer comentário em bloco no inicio da função. Comando matemáticos ou que tem uma lógica estratégica daí sim comenta a linha.

Nota 10.0
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos