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

Ir para baixo
Thiaguin
Thiaguin
Mensagens : 201
Data de inscrição : 03/03/2020

Exercício 3.17 Empty Exercício 3.17

Ter Jun 15, 2021 4:34 pm
/*
* CURSO DE ROBOTICA 2021
*
* 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 //A biblioteca com as funções do display está carregada
#define ledR 3//Definido que o pino 3 irá se chamar ledR          
#define ledG 4//Definido que o pino 4 irá se chamar ledG
#define ledB 5//Definido que o pino 5 irá se chamar ledB

//DECLARAcAO DE VARIAVEIS GLOBAIS
LiquidCrystal lcd(12,11,10,9,8,7);//Os pinos serão ligados nessa sequência ao display                        
char caractere;//Variável para serem guardados os caracteres recebidos pela porta serial

//INICIALIZAÇÃO DO HARDWARE
void setup() {
Serial.begin(9600);//Porta serial inicializada com velocidade de 9600 bps
Serial.print("Digite uma letra RGB ou rgb pra controlar o led \n");//O texto entre aspas será escrito no monitor serial, e o programa irá para a próxima linha
lcd.begin(16,2);//Display inicializado, o display usado possui 16 colunas e 2 linhas  
pinMode(ledR, OUTPUT);//Configurado o pino 3 como saída
pinMode(ledG, OUTPUT);//Configurado o pino 4 como saída
pinMode(ledB, OUTPUT);//Configurado o pino 5 como saída
lcd.home();//O cursor irá para o início da primeira linha do display
lcd.print("R=OFF G=OFF");//O texto entre aspas será escrito no display
lcd.setCursor(0,1);//O cursor irá para o início da segunda linha do display
lcd.print("B=OFF");//O texto entre aspas será escrito no display            
}

//FUNÇÕES COMPLEMENTARES


//PROGRAMA PRINCIPAL
void loop() {
if(Serial.available() > 0){//Se a porta serial receber um valor, irá rodar o bloco abaixo
caractere = Serial.read();//Os valores lidos na porta serial serão atribuídos à variável caractere
}
if(caractere != 0){//Se houver algum valor que seja diferente de 0 na variável caractere, irá rodar o bloco abaixo
switch(caractere){//Irá testar o conteúdo da variável caractere
 case('R')://Se houver um R, irá rodar o bloco abaixo
  digitalWrite(ledR,HIGH);//O ledR irá acender
  Serial.print("Led R está aceso \n");//O texto entre aspas será escrito no monitor serial, e o programa irá para a próxima linha
  lcd.setCursor(2,0);//O cursor irá para a coluna 2 da primeira linha do display
  lcd.print("ON ");//O texto entre aspas será escrito no display
  break;//O programa irá sair desse bloco
 case('G')://Se houver um G, irá rodar o bloco abaixo
  digitalWrite(ledG,HIGH);//O ledG irá acender
  Serial.print("Led G está aceso \n");//O texto entre aspas será escrito no monitor serial, e o programa irá para a próxima linha
  lcd.setCursor(8,0);//O cursor irá para a coluna 8 da primeira linha do display
  lcd.print("ON ");//O texto entre aspas será escrito no display
  break;//O programa irá sair desse bloco
 case('B')://Se houver um B, irá rodar o bloco abaixo
  digitalWrite(ledB,HIGH);//O ledB irá acender
  Serial.print("Led B está aceso \n");//O texto entre aspas será escrito no monitor serial, e o programa irá para a próxima linha
  lcd.setCursor(2,1);//O cursor irá para a coluna 2 da segunda linha do display
  lcd.print("ON ");//O texto entre aspas será escrito no display
  break;//O programa irá sair desse bloco
 case('r')://Se houver um r, irá rodar o bloco abaixo
  digitalWrite(ledR,LOW);//O ledR irá apagar
  Serial.print("Led R está apagado \n");//O texto entre aspas será escrito no monitor serial, e o programa irá para a próxima linha
  lcd.setCursor(2,0);//O cursor irá para a coluna 2 da primeira linha do display
  lcd.print("OFF");//O texto entre aspas será escrito no display
  break;//O programa irá sair desse bloco
 case('g')://Se houver um r, irá rodar o bloco abaixo
  digitalWrite(ledG,LOW);//O ledG irá apagar
  Serial.print("Led G está apagado \n");//O texto entre aspas será escrito no monitor serial, e o programa irá para a próxima linha
  lcd.setCursor(8,0);//O cursor irá para a coluna 8 da primeira linha do display
  lcd.print("OFF");//O texto entre aspas será escrito no display
  break;//O programa irá sair desse bloco
 case('b')://Se houver um r, irá rodar o bloco abaixo
  digitalWrite(ledB,LOW);//O ledB irá apagar
  Serial.print("Led B está apagado \n");//O texto entre aspas será escrito no monitor serial, e o programa irá para a próxima linha
  lcd.setCursor(2,1);//O cursor irá para a coluna 2 da segunda linha linha do display
  lcd.print("OFF");//O texto entre aspas será escrito no display
  break;//O programa irá sair desse bloco
 default://Se não for nenhum dos caracteres acima, irá rodar o bloco abaixo
  Serial.print("Letra incorreta, digite novamente \n");//O texto entre aspas será escrito no monitor serial, e o programa irá para a próxima linha
  break;//O programa irá sair desse bloco
}
caractere = 0;//O valor da variável caractere passará a ser 0
Serial.print("Digite uma letra RGB ou rgb pra controlar o led \n");//O texto entre aspas será escrito no monitor serial, e o programa irá para a próxima linha
}
}
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5715
Data de inscrição : 11/02/2019
Idade : 53
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Exercício 3.17 Empty Re: Exercício 3.17

Qua Jun 16, 2021 11:06 pm
Muito bom Thiago, Nota 10.0
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos