Pages: [1]   Go Down
Author Topic: Difficoltà nel decifrare il codice....  (Read 510 times)
0 Members and 1 Guest are viewing this topic.
(Italy)
Offline Offline
Full Member
***
Karma: 2
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti,

Sto incontrando alcune difficoltà nel capire queste righe di codice che ho estrapolato dagli esempi di gestione del display "Nokia 6600" e che adesso vorrei utilizzare per gestire un display a cristalli liquidi a due righe.
Tra i vari sketch che ho trovato in rete, ho sempre notato che le le tecniche di programmazione per "stampare" sul display le ore, minuti e secondi, erano parecchio diverse da questa e forse risultavano più leggibili e intuitive, fino a quando mi sono imbattuto in questo codice che reputo interessante, ma che forse per un profano, risulta essere molto meno intuitivo e di difficile interpretazione, almeno per quanto riguarda alcuni passaggi chiave.

Le prime perplessità nascono dalla dichiarazione delle variabili all'interno del "void", senza peraltro l'azzeramento delle stesse, seconda domanda come
fa il software a trasformare le "x" in zeri, terza e ultima domanda, a cosa serve lo "+=0x30", dopo il ciclo di for.
Per molti esperti saranno domande stupide, ma per adesso sto facendo fatica a venirne a capo.
Nel frattempo ho cercato di adattare il codice gestendo un display a due righe e il risultato è stato (00:00:00), inserendo in testa al programma un
"sec++" e un "delay(1000)" per scandire il tempo, dopodichè ho stampato il valore "timeChar" tramite la funzione "lcd.print(timeChar)" e impostato
tramite "lcd.setCursor(5,1)", la posizione sul display, ma il risultato finale è stato solo una indecifrata scansione di caratteri alfanumerici, negli utimi due zeri stampati sul display.



Code:
void displayDigitalTime(int h, int m, int s, int ap)
{
  char timeChar[13] = {'x', 'x', 0x0A, 'x', 'x', 0x0A, 'x', 'x', ' ', ' '};
  
 
  timeChar[0] = h/10;
  timeChar[1] = h - (timeChar[0] * 10);
  timeChar[3] = m/10;
  timeChar[4] = m - (timeChar[3] * 10);
  timeChar[6] = s/10;
  timeChar[7] = s - (timeChar[6] * 10);
  
  
  for (int i=0; i<8; i++)
    timeChar[i] += 0x30;

Ciao



« Last Edit: February 08, 2013, 05:00:44 pm by matrix77 » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7191
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le prime perplessità nascono dalla dichiarazione delle variabili all'interno del "void", senza peraltro l'azzeramento delle stesse

Le variabili dichiarate nella definizione della funzione sono variabili locali e il tipo di variabile è dichiarato esplicitamente. L'inizializzazione non serve perchè esse assumono il valore delle variabili o costanti passate durante la chiamata della funzione.
In pratica h, m, s e ap esistono solo all'interno della funzione.
Quando tu richiami la funzione gli passerai dei parametri, così
Code:
displayDigitalTime(ora, minuti, secondi, 1);
La funzione quindi associa
h = ora
m = minuti
s = secondi
ap = 1

seconda domanda come fa il software a trasformare le "x" in zeri
Non è che le trasforma. Fa un assegnamento al primo componente dell'array e lo sovrascrive.
Code:
timeChar[0] = h/10;
Scrive le decine della variabile ora (chiamata h all'interno della funzione)

terza e ultima domanda, a cosa serve lo "+=0x30", dopo il ciclo di for.
E' il valore ascii dello zero. (48 decimale) In questo modi puoi trasformare quello che per Arduino è un numero in un carattere comprensibile da noi.
Se il valore di timeChar[0] è 0, sommando 0x30, timeChar[0] assume il valore 0x30. Stampandolo apparirà uno zero.
E' se stampo timeChar[0] quando è 0?
Non ottieni niente perchè corrisponde al carattere NULL
--> http://www.asciitable.com/

 
« Last Edit: February 08, 2013, 04:34:23 pm by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

(Italy)
Offline Offline
Full Member
***
Karma: 2
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie mille sei stato molto esauriente nella risposta, adesso continuo con gli esperimenti eheh

Logged

0
Offline Offline
Faraday Member
**
Karma: 47
Posts: 5964
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

complimenti sia alla domanda che alla risposta, +1karma ad entrambi  smiley-wink
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

(Italy)
Offline Offline
Full Member
***
Karma: 2
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

complimenti sia alla domanda che alla risposta, +1karma ad entrambi  smiley-wink
Ciao Testato e grazie  smiley-sweat
Logged

Pages: [1]   Go Up
Jump to: