<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2017-08-27 15:50 GMT+02:00 Valerio Talora <span dir="ltr"><<a href="mailto:valerio.talora@gmx.com" target="_blank">valerio.talora@gmx.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Per quanto concerne la colorazione è necessario inventarsi una funzione<br>
che, preso come argomento un parametro (diciamo t, la temperatura),<br>
restituisca una tripla (RGB nel nostro caso). Matematicamente avremo una<br>
funzione vettoriale di una variabile del tipo F = (R(t), G(t), B(t)).<br>
<br>
Adesso un esempio pratico: se lo spazio di colori è a 16 bit allora R,<br>
G, B possono variare tra 0 e 15 ognuno; per semplicità assumiamo che il<br>
parametro t sia normalizzato in modo da variare anch'esso tra 0 e 15.<br>
Una possibile mappa di colori potrebbe essere la seguente: (t, t, t).<br>
Con questa mappa 'a scala di grigi' il colore varia da nero (0, 0, 0),<br>
quando la temperatura è minima, a bianco (15, 15, 15) quando la<br>
temperatura è massima, passando per le diverse gradazioni di grigio a<br>
temperature intermedie. Assumendo che tutti i colori possibili siano<br>
racchiusi in un cubo in cui l'asse del Rosso coincide con l'asse x,<br>
l'asse del Verde con quello delle y e l'asse del Blu con l'asse z,<br>
allora la mappa (t, t, t) rappresenta un insieme di punti su una retta<br>
che taglia il cubo in diagonale dallo spigolo (0, 0, 0) allo spigolo<br>
(15, 15, 15).<br>
Se si utilizza una mappa di questo tipo (15-t, t, 0), allora i colori<br>
varieranno tra Verde (0, 15, 0) a temperatura minima e Rosso (15, 0, 0)<br>
a temperatura massima, passando per le diverse gradazioni Rosso-Verde<br>
(in questo caso si sta tagliando la faccia del cubo che giace sul piano<br>
xy in diagonale).<br>
Ovviamente il percorso all'interno del 'cubo di colori' non deve per<br>
forza giacere su una retta: si potrebbero individuare una successione di<br>
N colori a proprio piacimento (per esempio 16 colori differenti) e<br>
memorizzarli in un array Nx3<br>
<br>
 ((R0, G0, B0),<br>
  (R1, G1, B1),<br>
        .<br>
        .<br>
        .<br>
  (R15, G15, B15))<br>
<br>
alla temperatura t corrisponderà la tripla (Rt, Gt, Bt).<br>
<br>
Se ho capito bene la seconda domanda e se stai/puoi programmare in C,<br>
situazioni di questo tipo si possono gestire con una opportuna<br>
combinazione delle funzioni sigaction(), kill() ed opzionalmente fork(),<br>
per esempio:<br>
<br>
il programma parte e crea un child con la funzione fork(); il programma<br>
padre esegue le operazioni senza curarsi dell'input asincrono; il<br>
programma figlio rimane in attesa dell'input (ad esempio attraverso<br>
read(), non so...) e, quando lo riceve invia un segnale con kill() al<br>
processo padre. Al ricevimento del segnale il processo padre, grazie ai<br>
parametri forniti a sigaction(), blocca l'esecuzione delle istruzioni in<br>
corso e passa ad eseguire l'opportuna funzione handler. Terminata<br>
l'esecuzione dell'handler il processo padre riprende a fare ciò che<br>
stava facendo prima (sempre che nell'handler non si decida di fare<br>
diversamente).<br>
<br>
Potendo sfruttare il multithreading si potrebbero creare due thread<br>
anziché due processi; in questo caso bisogna stare attenti ad eventuali<br>
race conditions, poiché alcuni segmenti di memoria dei threads sono<br>
condivisi.<br>
<br>
P.S.: Interessanti quei giocattolini... Si interfacciano solo ad Arduino<br>
o si possono gestire anche da PC? (Premessa: non ho mai utilizzato Arduino).<br>
<div class="gmail-HOEnZb"><div class="gmail-h5"><br>
<br>
On 08/07/17 14:15, Jio wrote:<br>
> Con la calura pomeridiana che mi costringe a non uscire, ho iniziato un<br>
> paio di progettini con questi cosucci:<br>
> <a href="https://www.amazon.it/dp/B015MGHH6Q/ref=pe_3310731_189395851_TE_dp_1" rel="noreferrer" target="_blank">https://www.amazon.it/dp/<wbr>B015MGHH6Q/ref=pe_3310731_<wbr>189395851_TE_dp_1</a><br>
><br>
> Il primo è un termometro interno esterno basato su questi sensori:<br>
> <a href="http://www.gearbest.com/development-boards/pp_70501.html" rel="noreferrer" target="_blank">http://www.gearbest.com/<wbr>development-boards/pp_70501.<wbr>html</a><br>
> e questo display<br>
> <a href="http://www.gearbest.com/lcd-led-display-module/pp_219113.html" rel="noreferrer" target="_blank">http://www.gearbest.com/lcd-<wbr>led-display-module/pp_219113.<wbr>html</a><br>
> L'idea è di mostrare temperatura interna, temperatura esterna,<br>
> differenza e sotto un grafico dell'andamento nelle ultime 24 ore<br>
> (rilevazione ogni 15 minuti)<br>
> Tutto bene, solo vorrei colorare il grafico, ma non trovo online un<br>
> riferimento a come colorare il grafico tipo lo schema colore di questo sito:<br>
> <a href="https://meteo.search.ch/temp" rel="noreferrer" target="_blank">https://meteo.search.ch/temp</a><br>
> Secondo voi che formula posso applicare?<br>
> Lo spazio colore del TFT è 16bit (RRRRRGGGGGGBBBBB) se può essere utile.<br>
><br>
> Secondo problema un po' più interessante: striscia LED RGB basata su<br>
> WS2812 con la'ggiunta di un pulsantino capacitivo con cui vorrei<br>
> cambiare la programmazione delle sequenze.<br>
> Le sequenze sono abbastanza lunghe e complesse. Pensavo di attaccare un<br>
> interrupt al pulsante per cambiare le sequenze. C'è modo di interrompere<br>
> l'esecuzione di una funzione senza fare polling su una variabile nei<br>
> tempi morti (sostituire un delay(1000) con un ciclo che controlla quanti<br>
> millisecondi son passati e una variabile di stato e nel caso esce dalla<br>
> funzione)?<br>
><br>
> Spero di essermi spiegato<br>
><br>
><br>
><br>
<br>
<br>
</div></div><span class="gmail-HOEnZb"><font color="#888888">--<br>
<br>
Valerio Talora<br>
<br>
</font></span><br><br>
--<br>
Mailing list info: <a href="https://lists.linux.it/listinfo/gl-como" rel="noreferrer" target="_blank">https://lists.linux.it/<wbr>listinfo/gl-como</a><br>
<br></blockquote></div>Grazie per le risposte. Nel mentre ho risolto.<br></div><div class="gmail_extra">Per la parte colore: funzione che controlla t e per -10<t<0 parte con (0,0,FF) a -10 e linearmente arriva a (FF,FF,FF), per 0<t<20 parte da (FF,FF,FF) e linearmente arriva a (00,FF,00) e per 20<t<40 da (00,FF,00) a (FF,00,00) un po' spartano ma efficace.<br></div><div class="gmail_extra">Per l'interrupt, purtroppo niente C, mi sono arrangiato con delle macro della libreria FastLED ( <a href="https://github.com/FastLED/FastLED">https://github.com/FastLED/FastLED</a> ) non ho sottomano l'esempio da cui son partito, se serve ad altri lo recupero, ma sostanzialmente fa polling sul bottone.<br></div><div class="gmail_extra">I giocattolini sono degli equivalenti dell'arduino nano ed hanno più o meno le stesse funzioni. Non so cosa intendi per collegarsi al PC, ma ti posso dire che hanno una bella porta micro usb con cui li programmi e ci puoi parlare in seriale vedi qui: <a href="https://www.arduino.cc/en/Reference/Serial">https://www.arduino.cc/en/Reference/Serial</a><br></div></div>