Go Down

Topic: 'secondi' cannot be used as a function (Read 1 time) 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