Pages: [1]   Go Down
Author Topic: 'secondi' cannot be used as a function  (Read 1551 times)
0 Members and 1 Guest are viewing this topic.
grugliasco
Offline Offline
Jr. Member
**
Karma: 0
Posts: 94
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Rome - Italy
Offline Offline
Full Member
***
Karma: 2
Posts: 246
Arduino UNO &quot;Noob&quot; User
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi posti il codice bene con tutti i void nei tag
Quote
Code:
Logged

grugliasco
Offline Offline
Jr. Member
**
Karma: 0
Posts: 94
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Milano, Italy
Offline Offline
Faraday Member
**
Karma: 11
Posts: 3091
Sideralis Arduino!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Meno male che hai messo il tag code
Code:
Logged

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

grugliasco
Offline Offline
Jr. Member
**
Karma: 0
Posts: 94
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

grugliasco
Offline Offline
Jr. Member
**
Karma: 0
Posts: 94
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: January 08, 2011, 04:10:32 pm by lestofante » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

grugliasco
Offline Offline
Jr. Member
**
Karma: 0
Posts: 94
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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à
« Last Edit: January 08, 2011, 04:36:59 pm by lestofante » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

grugliasco
Offline Offline
Jr. Member
**
Karma: 0
Posts: 94
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok ti ringrazio domani vedo come fare
Logged

Pages: [1]   Go Up
Jump to: