Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Codice bloccante Blynk

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Codice bloccante Blynk

Messaggioda Foto UtenteTheMask » 19 feb 2021, 18:02

Buongiorno,
ho un problema con la libreria Blynk. Ho scritto un semplice schedulatore dove ogni 100ms mi accende e spegne un led, ogni secondo legge un sensore di temperatura e ogni 3 secondi invia questo dato all'applicazione installata sul telefono.
Per mandare il dato all'applicazione uso la funzione:
Codice: Seleziona tutto
Blynk.virtualWrite( V0, TempSensor1);


il problema è che essendo bloccante mi sballa i tempi del task da 100ms...qualcuno sà come poter ovviare al problema?
La maggior parte delle funzioni di Blynk sono bloccanti e non so perché ?%
Avatar utente
Foto UtenteTheMask
55 5
Frequentatore
Frequentatore
 
Messaggi: 102
Iscritto il: 14 gen 2015, 16:05

0
voti

[2] Re: Codice bloccante Blynk

Messaggioda Foto UtenteMarcoD » 19 feb 2021, 18:26

Sono incuriosito dal problema; sono andato a cercare informazioni sulla libreria Blink,
forse ho cercato poco, ma non ho trovato info su come funzionano e se le chiamate sono bloccanti o meno.

Premesso che sono poco capace e informaticamente ormai invecchiato, risolverei il problema inserendo un secondo arduino:
il primo rimane per la gestione realtime con scheduler 100 ms, il secondo per l'uso dei comandi Blink.
I due arduino sono connessi tramite linea seriale. Il primo invia periodicamente l'informazione della temperatura ( con un serial.print() ), senza preoccuparsi se viene ricevuta.
Il secondo, se non è bloccato in attesa la riceve e la utilizza.
Forse un header nel messaggio per un protocollo rudimentale nella comunicazione fra i due arduino non guasterebbe.

La variabile Tempsensor è reale o intera o è una stringa ?

O_/
Avatar utente
Foto UtenteMarcoD
8.844 4 9 13
Master EY
Master EY
 
Messaggi: 4123
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[3] Re: Codice bloccante Blynk

Messaggioda Foto Utentedadduni » 19 feb 2021, 18:41

Ciao, dipende "bloccanti" a che livello. L'AtMega ha delle Interrupt che ti potrebbero permettere di interrompere qualsiasi "blocco" ci sia in libreria, eseguire un pezzo di codice tuo, e poi tornare a fare quello che si stava facendo in precedenza.
Questo dipende da cosa vuol dire "bloccante" e da quanto è importante la temporizzazione itnerna delle funzione blynk se possono essere interrotte o meno.
Davide
Avatar utente
Foto Utentedadduni
1.720 2 7 12
Expert EY
Expert EY
 
Messaggi: 1149
Iscritto il: 23 mag 2014, 16:26

0
voti

[4] Re: Codice bloccante Blynk

Messaggioda Foto UtenteTheMask » 19 feb 2021, 19:27

Io ho guardato ma non c'è scritto nulla in merito, purtroppo però un secondo arduino non è fattibile.
La variabile è di tipo float.

In pratica il FW è suddiviso così:

Task 100ms:
UpdateRTC(); --> Ricava ore-minuti e secondi
OnOffRGB(); --> Gestisce l'alba e tramonto di 4 strisce leds
ReadSwitch(); --> Lettura in manuale di 8 interruttori

Task 1000ms:
ReadTemperatureSensor1(); --> Lettura primo sensore
ReadTemperatureSensor2(); --> Lettura secondo sensore
ShowCurrent(); --> Misura la corrente che passa in 8 Relays
CheckTemp(); --> Gestione/Attivazione di 4 ventole in base alla temperatura rilevata

Task 3000ms:
httpSendData(); --> Invio/Ricezione dati WiFi
ManageRelaySwitch(); --> Gestione remota relays
CheckWiFiConnection(); --> Gestione della connessione wifi...Se manca il segnale continua in automatico
SyncPin(); --> Se il wifi riprende a funzionare sincronizzo tutti gli stati dei relays

Il problema è nella funzione OnOffRGB(); questa funzione in base all'ora fa il fade tra due soglie calcolato su 100ms e deve essere preciso.
In parole semplici se parto con duty= 85% e dalle 17:00 alle 18:00 voglio passare al 65% gradualmente lui calcola gli step in modo da avere una graduale diminuzione della luminosità.

Se elimino tutte le funzioni inerenti il wifi funziona a meraviglia mentre con quellle attive sballa tutto il fade. Ho inserito nella funziona da 100ms un semplice
Codice: Seleziona tutto
  ledState = !ledState;
  digitalWrite(LEDTEST, ledState);

e si vede chiaramente che per un un certo periodo ho un segnale a 5Hz e poi si allungano i tempi, poi ritorna a 5Hz e così via.
Avatar utente
Foto UtenteTheMask
55 5
Frequentatore
Frequentatore
 
Messaggi: 102
Iscritto il: 14 gen 2015, 16:05

0
voti

[5] Re: Codice bloccante Blynk

Messaggioda Foto Utentealessandrovo » 19 feb 2021, 20:00

mancano info sulla board e sui sensori p.es su ESP almeno 1 ADC e' condiviso con la WiFi allo scopo per misurare la potenza del segnale
Avatar utente
Foto Utentealessandrovo
188 1 3
New entry
New entry
 
Messaggi: 86
Iscritto il: 2 giu 2020, 17:50

0
voti

[6] Re: Codice bloccante Blynk

Messaggioda Foto UtenteTheMask » 19 feb 2021, 20:08

Scheda: Arduino Mega
Sensori di temperatura: n°2 DS18B20
RTC: RTC DS3231
Wifi: ESP-01s
Immagine.png
Avatar utente
Foto UtenteTheMask
55 5
Frequentatore
Frequentatore
 
Messaggi: 102
Iscritto il: 14 gen 2015, 16:05

0
voti

[7] Re: Codice bloccante Blynk

Messaggioda Foto UtenteMarcoD » 19 feb 2021, 20:10

Mi ricordo che, quando ero più giovane, nei favolosi anni '80, i PC avevano il DOS, era facile sviluppare programmi che operavano direttamente sulla porta parallela e seriale, se ben mi ricordo
all'indirizzo &H378 o simili, e leggendo il bit " busy" di stato era possibile utilizzare le linee seriali come si voleva.
Ora c'è di mezzo il sistema operativo ed è tutto più complicato.
Riguardo ad Arduino, i driver sono gratis, ma la documentazione e la descrizione del funzionamento è inesistente o di difficile comprensione.

O_/
Avatar utente
Foto UtenteMarcoD
8.844 4 9 13
Master EY
Master EY
 
Messaggi: 4123
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[8] Re: Codice bloccante Blynk

Messaggioda Foto UtenteTheMask » 19 feb 2021, 20:20

Questo è uno dei motivi per cui è l'ultima volta che userò un Arduino...Solitamente uso STM8 o STM32 e solo che avevo già tutto bello pronto per Blynk #-o
Per non parlare del PWM delle ventole...ho bisogno di 21-24KHz per pilotarle e invece sono costretto a usarle con 490 Hz, poi si si funzionano ma se cambi la frequenza base sballi tutti i vari mills e amenicoli vari...va beh
Avatar utente
Foto UtenteTheMask
55 5
Frequentatore
Frequentatore
 
Messaggi: 102
Iscritto il: 14 gen 2015, 16:05

0
voti

[9] Re: Codice bloccante Blynk

Messaggioda Foto UtentedrGremi » 19 feb 2021, 20:20

TheMask ha scritto:In parole semplici se parto con duty= 85% e dalle 17:00 alle 18:00 voglio passare al 65% gradualmente lui calcola gli step in modo da avere una graduale diminuzione della luminosità.

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.
Avatar utente
Foto UtentedrGremi
1.229 4 9
Master
Master
 
Messaggi: 650
Iscritto il: 20 nov 2019, 19:49

0
voti

[10] Re: Codice bloccante Blynk

Messaggioda Foto Utentelemure64 » 19 feb 2021, 20:21

MarcoD ha scritto:Mi ricordo che, quando ero più giovane, nei favolosi anni '80, i PC avevano il DOS, era facile sviluppare programmi che operavano direttamente sulla porta parallela e seriale

O anche accesso diretto alla scheda video. Si poteva avere il puntatore diretto alla memoria, poi... :(
Avatar utente
Foto Utentelemure64
675 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 382
Iscritto il: 23 giu 2020, 12:26

Prossimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti