Boa tarde, eu estou fazendo um TCC sobre Automação Residêncial, onde tem um display que mostra a temperatura e luminosidade do local, além disso as luzes da casa podem ser ligadas e desligadas pelo celular via bluetooth, consegui fazer a programação só que eu coloquei 5 segundos de delay no display, então o display fica 5 segundos mostrando a temperatura e 5 segundos a luminosidade, porém esse delay está interferindo no tempo de resposta do celular, ou seja, a lâmpada demora alguns segundos para ligar ou desligar porque o arduíno tem que esperar o delay para começar a fazer a varredura novamente, gostaria de saber se tem como eu definir a parte de controle das lâmpadas como prioridade ou seja toda vez que eu mandar o comando via bluetooth ele seja execuado na hora.
Não sei se deixei claro minha duvida, mas se alguém puder me ajudar.
Grato Alexandre
Tags:
Você está usando a função delay(), veja o exemplo do arduino, blink without delay, você pode implementar no seu sistema.
Boa Tarde Marcelo, eu dei uma olhada no blink without delay só que meu inglês não é um dos melhores você pode me explicar mais ou menos como funciona por favor
long ultimomillis = 0;// Guarda o valor recebido na ultima função millis
long intervalo = 5000;// Define o tempo em que o arduino irá aguardar para realizar a ação 5s no seu caso
void setup() {
}
void loop()
{
unsigned long atualmillis= millis(); //Guarda o retorno da função millis
if(atualmillis - ultimomillis > intervalo) { // Se o millis atual - o ultimo for maior que o intervalo faça:
ultimomillis = atualmillis; //Passa o millis atual para ultimo millis
//SUA AÇÃO AQUI
}
}
Raphael não estou conseguindo incluir o millis na minha programação se você puder me ajudar a substituir o delay, agradeço:
#include <LiquidCrystal.h> // declara a utilização da biblioteca LiquidCrystal
#define Luz_Fundo 6
#include <Servo.h>
Servo servo1;
//cria um objeto tipo LiquidCrystal que chamei de "lcd" nos pinos citados:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensor = 3;
int valor = 0;
const float CELSIUS_BASE = 0.4887585532746823069403714565; //Base de conversão para Graus Celsius ((5/1023) * 100)
void setup()
{
lcd.begin(16, 2); // Iniciando o objeto "lcd" de 2 linhas e 16 colunas
pinMode(Luz_Fundo,OUTPUT); //define o pino como saída
digitalWrite(Luz_Fundo,HIGH); // Liga a luz do display.
Serial.begin(9600);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
servo1.attach(13); // Porta onde ira ser ligado o servo
Serial.begin(9600);
}
void loop()
{ char c = Serial. read();
if (c == '1') digitalWrite (7, HIGH);
if (c == '2') digitalWrite (8, HIGH);
if (c == '3') digitalWrite (9, HIGH);
if(c == '4') digitalWrite(10, HIGH);
if (c == 'a') digitalWrite (7, LOW);
if (c == 'b') digitalWrite (8, LOW);
if (c == 'c') digitalWrite (9, LOW);
if (c == 'd') digitalWrite (10, LOW);
if (c == 'e') servo1.write (90);
if (c == '5') servo1.write (0);
int valor = analogRead(A3);
int valorModificado = map(valor,0, 1000, 0, 100);
lcd.setCursor(0,0); // seta o cursor para: (coluna = 0, linha = 0)
lcd.print("- LUMINOSIDADE -");
lcd.setCursor(0,1); // seta para linha 1, ou seja, a linha de baixo
lcd. print (valorModificado);
lcd. print ("% ");
if (valorModificado < 50)
lcd.print("Pouca Luz");
if (valorModificado > 50)
lcd.print("Muita Luz");
delay (3500);
int valorSensorTemp = analogRead(A1);
int temperatura = (analogRead(A0) * CELSIUS_BASE); /* PINO A0 arduino entrada do LM 35 */
digitalWrite (6, HIGH);
lcd.setCursor(0,0);
lcd.print("- TEMPERATURA - "); //imprime a string no display do LCD.
lcd.setCursor(0,1);
lcd.print(" ");
lcd.print( temperatura);
lcd.write(B11011111); //Simbolo de graus celsius
lcd.print("C .");
delay (3500);
}
#include <LiquidCrystal.h> // declara a utilização da biblioteca LiquidCrystal
#define Luz_Fundo 6
#include <Servo.h>
Servo servo1;
long ultimomillis = 0;
long intervalo;
//cria um objeto tipo LiquidCrystal que chamei de "lcd" nos pinos citados:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensor = 3;
int valor = 0;
const float CELSIUS_BASE = 0.4887585532746823069403714565; //Base de conversão para Graus Celsius ((5/1023) * 100)
void setup()
{
lcd.begin(16, 2); // Iniciando o objeto "lcd" de 2 linhas e 16 colunas
pinMode(Luz_Fundo,OUTPUT); //define o pino como saída
digitalWrite(Luz_Fundo,HIGH); // Liga a luz do display.
Serial.begin(9600);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
servo1.attach(13); // Porta onde ira ser ligado o servo
Serial.begin(9600);
}
void loop()
{
unsigned long atualmillis= millis()
char c = Serial. read();
if (c == '1') digitalWrite (7, HIGH);
if (c == '2') digitalWrite (8, HIGH);
if (c == '3') digitalWrite (9, HIGH);
if(c == '4') digitalWrite(10, HIGH);
if (c == 'a') digitalWrite (7, LOW);
if (c == 'b') digitalWrite (8, LOW);
if (c == 'c') digitalWrite (9, LOW);
if (c == 'd') digitalWrite (10, LOW);
if (c == 'e') servo1.write (90);
if (c == '5') servo1.write (0);
int valor = analogRead(A3);
int valorModificado = map(valor,0, 1000, 0, 100);
lcd.setCursor(0,0); // seta o cursor para: (coluna = 0, linha = 0)
lcd.print("- LUMINOSIDADE -");
lcd.setCursor(0,1); // seta para linha 1, ou seja, a linha de baixo
if((atualmillis - ultimomillis >= 3500) || (atualmillis - ultimomillis <= 3600){
lcd. print (valorModificado);
lcd. print ("% ");
if (valorModificado < 50)
lcd.print("Pouca Luz");
if (valorModificado > 50)
lcd.print("Muita Luz");
}
if(atualmillis - ultimomillis > 7000) {
ultimomillis = atualmillis;
int valorSensorTemp = analogRead(A1);
int temperatura = (analogRead(A0) * CELSIUS_BASE); /* PINO A0 arduino entrada do LM 35 */
digitalWrite (6, HIGH);
lcd.setCursor(0,0);
lcd.print("- TEMPERATURA - "); //imprime a string no display do LCD.
lcd.setCursor(0,1);
lcd.print(" ");
lcd.print( temperatura);
lcd.write(B11011111); //Simbolo de graus celsius
lcd.print("C .");
}
}
Tenta assim, não testei pois estou de viagem.
Além de não usar o Delay(), pesquise sobre interrupções. Acho que é mais nesse sentido que você está querendo ir.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por