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  

Exibições: 1722

Responder esta

Respostas a este tópico

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço