'secondi' cannot be used as a function

Saluti a tutti questo è il mio secondo post.Sto cercando di far visualizare un intero long sul lcd 12864 st7920 sto usando una libreria trovata su http://www.dfrobot.com/image/data/FIT0021/LCD12864RSPI.rar A scrivere un messaggio si riesce bene mi serve poter scrivere anche un numero qundi ho aggiunto queste righe :
#include <DFrobot_char.h>
#include <LCD12864RSPI.h>

#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
#define SCR 10 // scr collegato pin 10
unsigned char Titolo[]="Timer";
unsigned char Testo1[]="Minuti";
unsigned char Testo2[]="Secondi";
char secondi_char[16];
questo in void loop
LCDA.DisplayString(2,1,Testo2,7);
unsigned long secondi_ulong = secondi();
sprintf(secondi_char,"%lu", secondi_ulong); // Works OK: sprintf uses char arrays.
LCDA.DisplayString(0, 0, (unsigned char *)secondi_char, 16);// The LCDA function requires unsigned char arrays.
quando provo a compilarlo mida il seguente errore
'secondi' cannot be used as a function
non riesco a capire il perche
Grazzie

mi posti il codice bene con tutti i void nei tag


#include <DFrobot_char.h>
#include <LCD12864RSPI.h>

#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
#define SCR 10 // scr collegato pin 10
unsigned char Titolo[]="Timer";
unsigned char Testo1[]="Minuti";
unsigned char Testo2[]="Secondi";
char secondi_char[16];
int tempo = 0;
int T_totale = 0;
int long minuti = 0;
int long secondi = 0;

void setup()
{
LCDA.Initialise(); // INIT SCREEN
//delay(5000);
minuti = 1; // tempo in minuti
secondi = 45; // tempo in secondi
T_totale = (minuti * 60) + secondi; //tempo totale in secondi
Serial.begin(9600); // apre la porta seriale x il pc
}

void loop() {
LCDA.CLEAR(); //Cancella display
LCDA.DisplayString(0,2,Titolo,6);
LCDA.DisplayString(1,1,Testo1,7);
LCDA.DisplayString(2,1,Testo2,7);
unsigned long secondi_ulong = secondi();
sprintf(secondi_char,"%lu", secondi_ulong); // Works OK: sprintf uses char arrays.
LCDA.DisplayString(0, 0, (unsigned char *)secondi_char, 16);// The LCDA function requires unsigned char arrays.

delay(1500);
while ((minuti > 0) || (secondi > 0))
{
delay(1000);
T_totale = (minuti * 60) + secondi; //tempo totale in secondi
if (secondi > 0) {
digitalWrite(SCR, 1);
secondi--;
Serial.println(minuti); //stampa il valore sulla porta seriale
Serial.println(secondi); //stampa il valore sulla porta seriale
}
else {
if (minuti > 0) {
minuti--;
secondi = 60;
}
}
}
digitalWrite(SCR, 0);
}

Meno male che hai messo il tag code ``

 #include <DFrobot_char.h>
#include <LCD12864RSPI.h>

#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )
#define SCR 10 // scr collegato pin 10
unsigned char Titolo[]="Timer";
unsigned char Testo1[]="Minuti"; 
unsigned char Testo2[]="Secondi"; 
char secondi_char[16];
int tempo = 0;
int T_totale = 0;
int long minuti = 0;
int long secondi = 0;

void setup()
{
  LCDA.Initialise(); // INIT SCREEN
  //delay(5000);
   minuti = 1;              // tempo in minuti
  secondi = 45;            // tempo in secondi
  T_totale = (minuti * 60) + secondi;  //tempo totale in secondi
 Serial.begin(9600);       // apre la porta seriale x il pc
}

void loop() {
  LCDA.CLEAR(); //Cancella  display
  LCDA.DisplayString(0,2,Titolo,6);
  LCDA.DisplayString(1,1,Testo1,7);
  LCDA.DisplayString(2,1,Testo2,7);
   unsigned long secondi_ulong = secondi();
   sprintf(secondi_char,"%lu", secondi_ulong); // Works OK: sprintf uses char arrays.
   LCDA.DisplayString(0, 0, (unsigned char *)secondi_char, 16);// The LCDA function requires unsigned char arrays. 

  delay(1500);
  while ((minuti > 0) || (secondi > 0))
  {
  delay(1000);
  T_totale = (minuti * 60) + secondi;  //tempo totale in secondi
  if (secondi > 0) {
    digitalWrite(SCR, 1);
    secondi--;
     Serial.println(minuti);  //stampa il valore sulla porta seriale
     Serial.println(secondi);  //stampa il valore sulla porta seriale
   } 
    else {
         if (minuti > 0) {
           minuti--;
           secondi = 60;
          }
 }  
}
digitalWrite(SCR, 0);
}

unsigned long secondi_ulong = secondi();

ecco la riga incriminata!
e anche la dichiarazioni che fai "int long" non è che mi convincano proprio... ma quì non so se creano problemi, sinceramente io uso direttamente long

Io ho cercato di usare per mio uso questa parte di codice

char millis_char[16];
   unsigned long millis_ulong = millis();
   sprintf(millis_char,"%lu", millis_ulong); // Works OK: sprintf uses char arrays.
   LCDA.DisplayString(0, 0, (unsigned char *)millis_char, 16);// The LCDA function requires unsigned char arrays.

che ho trovato in rete. che ho provato cosi nel mio programma funziona stampando sul dispay i millisecondi
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1287283512
tecnico

ah ok, tu hai visto che esiste la millis() e allora ti sei inventato la secondi(), giusto?
l'elenco di funzioni di arduino lo trovi quì:

allora, leggi i MilliSecondi (che partono da 0 ogni volta che accendi arduino, e continuano a aumentare per circa 55 giorni, poi overflow e riprende da 0) e dividi per 1000...
A questo punto potresti crearti la funzione secondi() che fa questo al posto tuo mi dirai... NO!
perchè la parola secondi è già stata usata come nome di variabile nel tuo codice, quindi o chiami in altro modo la variabile o la funzione.
Ah a lungo andare (se ti metti a contare minuti, ore ecc..) ti accorgerai che arduino è impreciso, si usano orologi esterni per precisione da orologio, appunto ;D

il problema è in più generale come stampare sul diplay lcd un intero o qualsia numero con segno oppure senza .Quindi come convertire un intero a unsigned char il fatto di aver preso i secondi era solo un prova per vedere se funzionava.
Tecno

ah ok...
hai il tuo intero, ok?
il resto della divisione per 10 è la cifra più a sinistra.
questa cifra + il valore dello '0' char ti da il valore del char corrispondente a quel numero.
salvi il valore nella prima cella dell'array.
ora fai che il tuo numero è uguale a se stesso diviso 10, ciò vuol dire che elimini la cifra che hai letto prima.
ricomincia :slight_smile:
quando l'intero è <=0 hai finito. aggiungi il simbolo - in coda all'array di char(se serve), lo ribalti e voilà

ok ti ringrazio domani vedo come fare