Sera que ai tem auguem que consegue entra e sair de um while pelo wifi com um esp só ?

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 

Exibições: 258

As respostas para este tópico estão encerradas.

Respostas a este tópico

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();

    if (statusLed== LOW)
        statusLed = HIGH;
    else
        statusLed = LOW;
    digitalWrite(led,statusLed);

}

}

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço