Go Down

Topic: 'secondi' cannot be used as a function (Read 2155 times) previous topic - next topic

iw1evm (Tecno)

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

Nikka93

mi posti il codice bene con tutti i void nei tag
Quote
Code: [Select]

iw1evm (Tecno)

#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);
}

Federico

Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

iw1evm (Tecno)

Code: [Select]
#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);
}

lesto

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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

iw1evm (Tecno)

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

Code: [Select]
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

lesto

#7
Jan 08, 2011, 10:10 pm Last Edit: Jan 08, 2011, 10:10 pm by lestofante Reason: 1
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ì:
http://arduino.cc/en/Reference/HomePage
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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

iw1evm (Tecno)

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

lesto

#9
Jan 08, 2011, 10:36 pm Last Edit: Jan 08, 2011, 10:36 pm by lestofante Reason: 1
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 :-)
quando l'intero è <=0 hai finito. aggiungi il simbolo - in coda all'array di char(se serve), lo ribalti e voilà
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

iw1evm (Tecno)

ok ti ringrazio domani vedo come fare

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy