quero fazer um dispositivo com dois modos, 1 ele pisca a lus continuamente e o segundo ele liga/desliga ;
DETALHE é que quero fazer esse controle utilizando o wifi com esp32 , problema e que guando entro no modo pisca o esp para de receber informações pela rede e se eu colocar o modo pisca junto com as configurações que estabelece a comunicacao trava pois fica esperando novos dados do cliente, se eu utilizar 2 esp consigo traquilo . Sera que ai tem auguem que consegue entra e sair de um while() pelo wifi com um esp só ?
obs:se n me entendeu n pessa mais informações , apenas tente ajudar aguem que vc entenda !simples
Tags:
As respostas para este tópico estão encerradas.
Existe uma solução bastante simples para esse problema... utilize a função millis.
A função millis vai te retornar quanto tempo o codigo esta rodando, atraves disso voce consegue fazer o led piscar.
Altere seu codigo da seguinte forma:
//Antes do setup CRIE ESTAS VARIAVEIS
unsigned long delay = 1000; //mude este valor conforme for o delay que voce precisa - 1000 = 1segundo
unsigned long tempoAtual;
unsigned long tempoAnterior = 0;
bool statusLed = LOW;
void setup(){
...
}
void loop(){
//aqui voce chama a função
}
void piscar(){
tempoAtual = millis();
if(tempoAtual - tempoAnterior > delay && modo == 'a')
{
tempoAnterior = millis();
}
}
shooow depois vou tentar colocar esse codigo com o do wifi
Olá,
Se entendi sua dificuldade é que o pisca() trava o processamento e não permite o fluxo do principal.
Existem várias formas de fazer o pisca() ele parar de fazer isso. Todas envolvem fazer o processador trabalhar em 2 tarefas "ao mesmo tempo".
Por sorte vc está usando um ESP32 e ele possui 2 cores independentes. Vc pode fazer duas programações e ele executa de forma independente.
É um pouco complexo para criar, veja o tutorial: https://randomnerdtutorials.com/esp32-dual-core-arduino-ide/
Outra possibilidade, que não precisa de 2 cores, seria por interrupção de tempo.
Vc faria uma interrupção onde o processador vai por ex 100 vezes por segundo (100Hz) e conta as idas.
Por ex na ida 120 vc troca de cor, na ida 180 troca dnovo e na ida 200 vc troca e zera essa contagem. Algo assim.
https://www.dobitaobyte.com.br/isr-interrupcoes-e-timer-com-esp32/
sabe professo eu fiz isso aqui mas quando uso 2 core independentes a variavel de um não pode ser utilizada no outro correto ? o wifi aqui ficou caindo , e eu tenho que poder optar por ligar/desligar o pisca ! vou tentar aprender a trabalhar o esse interrupção de tempo . OBRIGADO PELA AJUDA é de grande valo pra mim
á e o plicativo que to fazendo tmbm tem um analisador de amplitude de som que fazer o led piscar conforme o ritmo e pra isso acontecer sem atraso grande , vou precisar da comunicação mais esperta que conseguir , então me diga uso 2 esp ? um so pra destravar a função
Em interrupções e variáveis que precisa ser lidas pelos 2 cores é necessário colocar um volatile na frente.
https://www.arduino.cc/reference/pt/language/variables/variable-sco...
ex:
No inicio do programa (fora das funções):
volatile int x;
Aih a variável pode ser lida pelos 2 cores.
Acredito que se vc fizer com um só fica melhor.
ai sim ! vou ver aqui se consigo utilizar o interrupto te tempo criando essa variante volatile int ;
consequi finalmente aqui colocando uma task1 para o pisca piscar em outro luga rs .
eu tava usando task1 e task2 para o wifi e o pisca mais ficou ocilando .
ai eu coloquei os codigos da config do wifi direto no loop ai parou de ocilar o wifi
agora ta um coloço rs
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por