Pages: 1 ... 5 6 [7] 8   Go Down
Author Topic: Ram+Seriale+Overflow  (Read 7726 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9492
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

e' la variabile che inspiegabilmente non fa il suo dovere
io leo e lesto abbiamo provato, il led resta spento.

Le variabili fanno sempre il loro dovere, siete voi che sbagliate ad interpretare le cose, comunque posta lo sketch esatto che stai usando e ti dico dove sta esattamente il problema.
Logged

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

Usa questo, e vedrai,

con UNSIGNED INT l'IF fa il suo dovere, dopo un minuto overflow e led sempre fisso
con INT niente da fare, l'overflow avviene dopo 30 secondi (giustamente la meta' del tempo di Unsigned Int), ma il led resta spento
Code:
unsigned long Tempo;
unsigned int  ScrollTime; // TUTTO OK
//int  ScrollTime; // SI BLOCCA

void setup ()
{
 pinMode(13, OUTPUT);     
}

void loop ()
{

Tempo=millis();

 if (Tempo > ScrollTime + 300)
    {
     digitalWrite(13, HIGH); 
     delay (300);
    ScrollTime = millis();
    }
 else
    digitalWrite(13, LOW); 
}
Logged

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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9492
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La risposta è molto semplice cambia "if ( Tempo > (ScrollTime + 300))" in "if ((unsigned long) Tempo > (ScrollTime + 300))" e vedrai che funziona, il motivo te lo lascio scoprire da solo, ma è facile arrivarci, se vi dico sempre tutto non imparate nulla, è meglio se vi lascio fare un pochino di fatica da soli  smiley-mr-green
Logged

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

Non funziona,

la devo aggiungere alla lista (piccolissima) delle volte in cui Testato batte Astro ? smiley

Code:
unsigned long Tempo;
// unsigned int  ScrollTime; // TUTTO OK
int  ScrollTime; // SI BLOCCA

void setup ()
{
 pinMode(13, OUTPUT);    
}

void loop ()
{

Tempo=millis();

 if ((unsigned long)Tempo > (ScrollTime + 300))
    {
     digitalWrite(13, HIGH);  
     delay (300);
    ScrollTime = millis();
    }
 else
    digitalWrite(13, LOW);  
}
Logged

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

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 332
Posts: 22803
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non funziona per forza smiley-wink
Tempo è già unsigned long. Il casting va fatto per il secondo membro del confronto.
Code:
if (Tempo > ((unsigned long)ScrollTime + (unsigned long)300))

Così funziona senz'altro (penso).
Alternativamente prova
Code:
if (Tempo > ((unsigned long)(ScrollTime + 300)))
Logged


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

niente da fare, nessuno dei due

Scrivo a Massimo ?  smiley-yell
Logged

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

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 332
Posts: 22803
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Una domanda: mi spieghi esattamente cosa stai cercando di fare?  smiley-sweat
Logged


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

semplice, imparare

e se mostri sacri come te, astro e lesto, che tale siete in ambito di programmazione rispetto a me, non sanno spiegare perche' quest IF non si verifica, vuol dire che il tutto non e' banale.

Se vogliamo ammettere che c'e' un bug in arduino allora io chiudo qui, ma se si vuole dire che questo comportamento e' normale lo si deve spiegare

Il comportamento secondo me deve essere questo:
Il led deve lampeggiare fino all'overflow della variabile, da li' in poi deve stare sempre fisso, perche' l'IF e' sempre True.

Questo con Unsigned Int funziona, con Int no, perche' ?
Le ultime prove vanno nella direzione della corretta gestione del casting credo, ma con unsigned Int perche' va tutto liscio senza aggiungere nulla al codice ?
E cmq anche gli utimi tentativi Vostri sono falliti, quindi nessuno per ora conosce la spiegazione
« Last Edit: April 29, 2012, 04:57:06 am by Testato » Logged

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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9492
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non funziona,

Funziona perfettamente, e l'ho pure provato in pratica  smiley
Logged

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

e io te lo riprovo subito,,spetta un attimo
Logged

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

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 332
Posts: 22803
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Boh, io sono senza "hardware" per cui vado avanti a parole.
Cmq fare il casting verso unsigned long di un dato che è già unsigned long mi sa che serve a poco  smiley-sweat

e se mostri sacri come te, astro e lesto, che tale siete in ambito di programmazione rispetto a me
ROTFL
Stai scherzando, spero  smiley-yell
Logged


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

Allora, ritestato quello di astro
NON FUNZIONA
Code:
unsigned long Tempo;
// unsigned int  ScrollTime; // TUTTO OK
int  ScrollTime; // SI BLOCCA

void setup ()
{
 pinMode(13, OUTPUT);    
}

void loop ()
{

Tempo=millis();

 if ((unsigned long) Tempo > (ScrollTime + 300))        
    {
     digitalWrite(13, HIGH);  
     delay (300);
    ScrollTime = millis();
    }
 else
    digitalWrite(13, LOW);  
}

Riprovo i due tuoi
Logged

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

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

Nemmeno il Primo di Leo funziona
Code:
unsigned long Tempo;
// unsigned int  ScrollTime; // TUTTO OK
int  ScrollTime; // SI BLOCCA

void setup ()
{
 pinMode(13, OUTPUT);     
}

void loop ()
{

Tempo=millis();

 if (Tempo > ((unsigned long)ScrollTime + (unsigned long)300))
    {
     digitalWrite(13, HIGH); 
     delay (300);
    ScrollTime = millis();
    }
 else
    digitalWrite(13, LOW); 
}

aspettate l'ultimo
Logged

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

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

Nemmeno il secondo funziona
Code:
unsigned long Tempo;
// unsigned int  ScrollTime; // TUTTO OK
int  ScrollTime; // SI BLOCCA

void setup ()
{
 pinMode(13, OUTPUT);     
}

void loop ()
{

Tempo=millis();

 if (Tempo > ((unsigned long)(ScrollTime + 300)))
    {
     digitalWrite(13, HIGH); 
     delay (300);
    ScrollTime = millis();
    }
 else
    digitalWrite(13, LOW); 
}

Che si fa ?
Io uso IDE1.0 su Win7-64 con ArduinoUnoR1
Logged

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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9492
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se vogliamo ammettere che c'e' un bug in arduino allora io chiudo qui, ma se si vuole dire che questo comportamento e' normale lo si deve spiegare

Semmai il bug è nel compilatore e non certo in Arduino che è semplicemente un utilizzatore finale.
Comunque per distrazione ti ho scritto di fare il cast ad "unsigned long" invece devi farlo a "long", oppure dichiara Tempo direttamente come long.
« Last Edit: April 29, 2012, 05:05:39 am by astrobeed » Logged

Pages: 1 ... 5 6 [7] 8   Go Up
Jump to: