Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Codice bloccante Blynk

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[11] Re: Codice bloccante Blynk

Messaggioda Foto UtenteTheMask » 19 feb 2021, 20:25

drGremi ha scritto:Non ho capito una cosa, ma hai necessità di aggiornarla veramente ogni 100ms? Soprattutto è importante venga aggiornato ogni 100ms? Se lo aggiorno una volta dopo 100ms e una volta dopo 600 che cambia? Hai un intervallo di variazione del duty cycle del 20% in un ora credo tu possa essere un po' più elastico.


Si perché così non vedo variazioni nella luce, l'ho semplificata con striscia ma è una plafoniera per acquario e deve fare questo:

From 7:00 to 08:00 PWM fade 0 to 10
From 08:00 to 10:00 PWM fix 10

From 10:00 to 11:00 PWM fade 10 to 65
From 11:00 to 12:00 PWM fix 65

From 12:00 to 13:00 PWM fade 65 to 85
From 13:00 to 16:00 PWM fix 85

From 16:00 to 17:00 PWM fade 85 to 65
From 17:00 to 18:00 PWM fix 65

From 18:00 to 19:00 PWM fade 65 to 10
From 19:00 to 22:00 PWM fix 10

From 22:00 to 23:00 PWM fade 10 to 0
From 23:00 to 07:00 PWM fix 0
Avatar utente
Foto UtenteTheMask
55 5
Frequentatore
Frequentatore
 
Messaggi: 105
Iscritto il: 14 gen 2015, 16:05

1
voti

[12] Re: Codice bloccante Blynk

Messaggioda Foto Utentealessandrovo » 19 feb 2021, 20:33

aaaaaaaaaa.PNG
aaaaaaaaaa.PNG (5.34 KiB) Osservato 9478 volte


se l'hai fatto la soluzione e' delegare a un timer
Codice: Seleziona tutto

void gestoreEventiWifi(){
    Blynk.virtualWrite( V0, TempSensor1);
}
void setup()
{
  timer.setInterval(1000L, gestoreEventiWifi);
}

void loop()
{
  Blynk.run();
  timer.run();
}
Ultima modifica di Foto Utentealessandrovo il 19 feb 2021, 20:36, modificato 1 volta in totale.
Avatar utente
Foto Utentealessandrovo
254 1 5
Frequentatore
Frequentatore
 
Messaggi: 165
Iscritto il: 2 giu 2020, 17:50

0
voti

[13] Re: Codice bloccante Blynk

Messaggioda Foto UtenteTheMask » 19 feb 2021, 20:36

Si ma è all'interno di uno schedulatore e gira ogni 3 secondi...In pratica dovrei usare i loro timer e non il mio scheduler?
Avatar utente
Foto UtenteTheMask
55 5
Frequentatore
Frequentatore
 
Messaggi: 105
Iscritto il: 14 gen 2015, 16:05

0
voti

[14] Re: Codice bloccante Blynk

Messaggioda Foto Utentealessandrovo » 19 feb 2021, 20:37

esatto, cosa peraltro segnalata dagli sviluppatori di Blynk proprio per i "difettucci" in cui ti se imbattuto
Avatar utente
Foto Utentealessandrovo
254 1 5
Frequentatore
Frequentatore
 
Messaggi: 165
Iscritto il: 2 giu 2020, 17:50

0
voti

[15] Re: Codice bloccante Blynk

Messaggioda Foto UtenteTheMask » 19 feb 2021, 20:40

Però scusa ho fatto una prova semplice con l'oscilloscopio
Codice: Seleziona tutto
digitalWrite(LEDTEST, HIGH);
Blynk.virtualWrite( V0, TempSensor1);
digitalWrite(LEDTEST, LOW);


Se guardo il segnale "LEDTEST" dura 65.5ms quindi a prescindere la virtualWrite introdurrà quel ritardo non creo che riscrivendo l'intero FW si risolva poi mai dire mai

p.s.hai il link dove parlano di questi bug? io non sono riuscito proprio a trovarlo
Avatar utente
Foto UtenteTheMask
55 5
Frequentatore
Frequentatore
 
Messaggi: 105
Iscritto il: 14 gen 2015, 16:05


2
voti

[17] Re: Codice bloccante Blynk

Messaggioda Foto Utentedjnz » 19 feb 2021, 20:49

C'è ancora una cosa non chiara, come è realizzato lo scheduler attuale, cioè in che modo calcola i 100ms. Perché ci sono due sistemi profondamente diversi...

Codice: Seleziona tutto
if (millis()-t >= 100)
{
    t = millis();
    ...altro...
}
Codice: Seleziona tutto
if (millis()-t >= 100)
{
    t += 100;
    ...altro...
}
Una domanda ben posta è già mezza risposta.
Avatar utente
Foto Utentedjnz
1.590 1 4 7
Master
Master
 
Messaggi: 708
Iscritto il: 26 lug 2020, 14:52

1
voti

[18] Re: Codice bloccante Blynk

Messaggioda Foto UtentedrGremi » 19 feb 2021, 20:50

TheMask ha scritto:Se guardo il segnale "LEDTEST" dura 65.5ms quindi a prescindere la virtualWrite introdurrà quel ritardo non creo che riscrivendo l'intero FW si risolva poi mai dire mai

Quindi? Quale è il problema se c'è un ritardo? Forse una cosa migliore potrebbe essere che spieghi cosa stai facendo e posti l'intero firmware. Ho il sentore che sia sbagliata l'impostazione architetturale.
Tra l'altro che temperature stai misurando?
Avatar utente
Foto UtentedrGremi
2.294 3 5 9
Master EY
Master EY
 
Messaggi: 1455
Iscritto il: 20 nov 2019, 19:49

0
voti

[19] Re: Codice bloccante Blynk

Messaggioda Foto UtenteTheMask » 19 feb 2021, 22:51

Grazie alessandrovo, appena riesco li leggo.
Cerco di rispondere in ordine:
djnz ha scritto:C'è ancora una cosa non chiara, come è realizzato lo scheduler attuale, cioè in che modo calcola i 100ms. Perché ci sono due sistemi profondamente diversi...

Lo scheduler(abbrevviato) è questo:
Codice: Seleziona tutto
void InitScheduler(void)
{
  time_tmp = millis();
  task_1 = millis();
  task_2 = millis();
  task_3 = millis();
}

void UpdateScheduler(void)
{
  time_tmp = millis();

  //Task 100msec
  if (time_tmp > task_1 + TIME_TASK_1)
  {
    Task_100ms();
    task_1 = millis();
  }

  //Task 1000msec
  if (time_tmp > task_2 + TIME_TASK_2)
  {
    Task_1000ms();
    task_2 = millis();
  }

  //Task 3000msec
  if (time_tmp > task_3 + TIME_TASK_3)
  {
    Task_3000ms();
    task_3 = millis();
  }
}


Dove:
- InitScheduler() viene richiamato nel setup()
- UpdateScheduler() nel loop()
-Task_100ms();Task_1000ms();Task_3000ms(); sono ciò che deve eseguire

drGremi ha scritto:Quindi? Quale è il problema se c'è un ritardo? Forse una cosa migliore potrebbe essere che spieghi cosa stai facendo e posti l'intero firmware. Ho il sentore che sia sbagliata l'impostazione architetturale.
Tra l'altro che temperature stai misurando?


Postare l'intero FW mi viene difficile perché sono 20 moduli compreso il main.
Le temperature vanno da 22°C a 30°C perché?

Cercando di semplificare al massino il problema del ritardo è questo:
All'interno del task da 100ms ho questa funzione:
Codice: Seleziona tutto
void OnOffRGB(void)
{
  if (Hours >= 7 && Hours < 8)
  {
    step++;
    if (step == CalculateFade(60, 10, 0))
    {
      calculate_Duty_out++;
      step = 0;
    }
  }


Mentre
Codice: Seleziona tutto
int CalculateFade(byte TotalMinute, byte Duty_max, byte Duty_min)
{
  Time_Step_minutes = TotalMinute / (Duty_max - Duty_min);
  Time_Step_seconds = (uint8_t)Time_Step_minutes * 60;
  increment_duty = Time_Step_seconds * 10;
  return (uint8_t)increment_duty;
}


in pratica dalle 7:00 alle 8:00 sono 60min increment_duty = 3600
se sbaglia il 100ms a contare mi sballa gli step e arriva o prima o dopo al duty=10%

Spero di aver risposto a tutto
Avatar utente
Foto UtenteTheMask
55 5
Frequentatore
Frequentatore
 
Messaggi: 105
Iscritto il: 14 gen 2015, 16:05

0
voti

[20] Re: Codice bloccante Blynk

Messaggioda Foto Utentenicsergio » 19 feb 2021, 23:24

Io nell'UpdateScheduler(), all'esecuzione di un task, prima memorizzerei il tempo di riferimento per l'esecuzione successiva, poi eseguirei il task.

Per il fade non mi baserei sul numero di step, ma memorizzerei ad esempio in fadeStart il tempo di partenza con millis() nel momento in cui si entra nella finestra di regolazione (Hours >= 7) e calcolerei il fade in funzione di (millis()-fadeStart).
Avatar utente
Foto Utentenicsergio
4.701 3 9 13
Master
Master
 
Messaggi: 938
Iscritto il: 1 gen 2020, 16:42

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti