Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1050
http://cesarecacitti.wordpress.com/
|
 |
« Reply #30 on: September 27, 2012, 01:48:42 pm » |
Dovresti descrivere meglio il problema. "Non fa quello che deve fare" è troppo generico. Devi dire cosa ti aspetti e cosa succede invece.
mi aspetto che scriva su lcd "esecuzione" mentre non fa un tubo, inibisce solo la finzione dei pulsantini 
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #31 on: September 27, 2012, 01:55:03 pm » |
Stai facendo continuamente lcd.clear(), scrivi qualcosa, poi di nuovo lcd.clear(), poi scrivi qualcosa, poi lcd.clear(), ecc., ad una velocità supersonica. Il risultato è che il display sembra non scrivere nulla perché i cristalli hanno una certa lentezza nella risposta.
La funzione loop() viene chiamata continuamente appena termina.
Fino a che ti ostini a non affrontare blinkwithoutdelay, siamo fritti.
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1050
http://cesarecacitti.wordpress.com/
|
 |
« Reply #32 on: September 27, 2012, 01:59:28 pm » |
Stai facendo continuamente lcd.clear(), scrivi qualcosa, poi di nuovo lcd.clear(), poi scrivi qualcosa, poi lcd.clear(), ecc., ad una velocità supersonica. Il risultato è che il display sembra non scrivere nulla perché i cristalli hanno una certa lentezza nella risposta.
La funzione loop() viene chiamata continuamente appena termina.
Fino a che ti ostini a non affrontare blinkwithoutdelay, siamo fritti.
a me basta che dopo il codice ci stia in un atmega8, non voglio appesantirlo per niente
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1050
http://cesarecacitti.wordpress.com/
|
 |
« Reply #33 on: September 27, 2012, 02:04:11 pm » |
Stai facendo continuamente lcd.clear(), scrivi qualcosa, poi di nuovo lcd.clear(), poi scrivi qualcosa, poi lcd.clear(), ecc., ad una velocità supersonica. Il risultato è che il display sembra non scrivere nulla perché i cristalli hanno una certa lentezza nella risposta.
La funzione loop() viene chiamata continuamente appena termina.
Fino a che ti ostini a non affrontare blinkwithoutdelay, siamo fritti.
a me basta che dopo il codice ci stia in un atmega8, non voglio appesantirlo per niente ok, così funziona decentemente per quello che devo fare io, domani continuo le prove : #include <LiquidCrystal.h>
byte a = 0; byte b = 25;
int up = LOW; int down = LOW; int check = LOW;
int brightness = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() { pinMode(7, INPUT); pinMode(8, INPUT); pinMode(6, INPUT); lcd.begin(16, 2); lcd.print("Luci presepe by"); lcd.setCursor(0, 1); lcd.print("Cesare Cacitti "); delay(5000); }
void loop() { lcd.setCursor(0, 0); lcd.clear(); lcd.print("Giorno:"); lcd.print(a); lcd.setCursor(0, 1); lcd.print("Notte:"); lcd.print(b);
delay(50); up = digitalRead(8); down = digitalRead(7); check = digitalRead(6);
if (check == HIGH) {
if (up == HIGH) { if (a<255) a++; }
if (down == HIGH) { if (a>0) a--; }
} else { lcd.clear(); lcd.print("Esecuzione"); delay(1000); } }
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #34 on: September 27, 2012, 02:19:38 pm » |
Madonna santa! Quel delay(1000) proprio non si può vedere  #include <LiquidCrystal.h>
byte a = 0; byte b = 25;
int up = LOW; int down = LOW; int check = LOW;
int brightness = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() { pinMode(7, INPUT); pinMode(8, INPUT); pinMode(6, INPUT); lcd.begin(16, 2); lcd.print("Luci presepe by"); lcd.setCursor(0, 1); lcd.print("Cesare Cacitti "); delay(5000); }
void loop() { // lettura di switch e pulsanti up = digitalRead(8); down = digitalRead(7); check = digitalRead(6);
if (check == HIGH) { // modalità programmazione: mostro i valori attuali dei parametri lcd.setCursor(0, 0); lcd.clear(); lcd.print("Giorno:"); lcd.print(a); lcd.setCursor(0, 1); lcd.print("Notte:"); lcd.print(b);
// tasto su: aumento il parametro if (up == HIGH) { if (a<255) a++; }
// tasto giù: diminuisco il parametro if (down == HIGH) { if (a>0) a--; } // nessun tasto premuto: non faccio nulla } else { // modalità esecuzione: emetto solo un messaggio lcd.clear(); lcd.print("Esecuzione"); } // ritardo di debounce(e vabbe') delay(50); }
Si dovrebbe chiamare lcd.clear() e "ridisegnare" sull'LCD solo quando necessario, cioè al cambio di modalità oppure quando varia uno dei parametri da visualizzare, ma fa niente. Questo nella versione 3.0 magari 
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1050
http://cesarecacitti.wordpress.com/
|
 |
« Reply #35 on: October 05, 2012, 09:51:53 am » |
Madonna santa! Quel delay(1000) proprio non si può vedere  #include <LiquidCrystal.h>
byte a = 0; byte b = 25;
int up = LOW; int down = LOW; int check = LOW;
int brightness = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() { pinMode(7, INPUT); pinMode(8, INPUT); pinMode(6, INPUT); lcd.begin(16, 2); lcd.print("Luci presepe by"); lcd.setCursor(0, 1); lcd.print("Cesare Cacitti "); delay(5000); }
void loop() { // lettura di switch e pulsanti up = digitalRead(8); down = digitalRead(7); check = digitalRead(6);
if (check == HIGH) { // modalità programmazione: mostro i valori attuali dei parametri lcd.setCursor(0, 0); lcd.clear(); lcd.print("Giorno:"); lcd.print(a); lcd.setCursor(0, 1); lcd.print("Notte:"); lcd.print(b);
// tasto su: aumento il parametro if (up == HIGH) { if (a<255) a++; }
// tasto giù: diminuisco il parametro if (down == HIGH) { if (a>0) a--; } // nessun tasto premuto: non faccio nulla } else { // modalità esecuzione: emetto solo un messaggio lcd.clear(); lcd.print("Esecuzione"); } // ritardo di debounce(e vabbe') delay(50); }
Si dovrebbe chiamare lcd.clear() e "ridisegnare" sull'LCD solo quando necessario, cioè al cambio di modalità oppure quando varia uno dei parametri da visualizzare, ma fa niente. Questo nella versione 3.0 magari  In queste ore ho cominciato a riprendere il progetto, ho inserito il fade, ma l'effetto PWM è molto "granuloso" e poi riesco a far fare solo dalla massima intensità alla minima, non viceversa, qualcuno mi darebbe un occhiata allo sketch? #include <LiquidCrystal.h>
byte fadeAmount = 0; // how many points to fade the LED by byte b = 0;
int up = LOW; int down = LOW; int up1 = LOW; int down1 = LOW; int check = LOW; int led = 9; int brightness = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() { pinMode(7, INPUT); pinMode(8, INPUT); pinMode(6, INPUT); pinMode(14, INPUT); pinMode(15, INPUT); pinMode(led, OUTPUT); lcd.begin(16, 2); lcd.print("Luci presepe by"); lcd.setCursor(0, 1); lcd.print("Cesare Cacitti "); delay(5000); }
void loop() { lcd.setCursor(0, 0); lcd.clear(); lcd.print("Giorno:"); lcd.print(fadeAmount); lcd.setCursor(0, 1); lcd.print("Notte:"); lcd.print(b);
delay(50); up = digitalRead(8); down = digitalRead(7); up1 = digitalRead(14); down1 = digitalRead(15); check = digitalRead(6);
if (check == HIGH) {
if (up == HIGH) { if (fadeAmount<255) fadeAmount++; }
if (down == HIGH) { if (fadeAmount>0) fadeAmount--; } if (down1 == HIGH) { if (b>0) b--; } if (up1 == HIGH) { if (b<255) b++; }
} else {
analogWrite(led, brightness);
brightness = brightness + fadeAmount;
if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } delay(30); } }
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #36 on: October 05, 2012, 10:24:12 am » |
(ripeti con me: CTRL+T! CTRL+T! CTRL+T!)
Ho dato un'occhiata veloce. Hai due delay in fila: delay(50) e delay(30). Forse è per questo che il fade è un po' "scattoso".
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1050
http://cesarecacitti.wordpress.com/
|
 |
« Reply #37 on: October 05, 2012, 10:28:19 am » |
(ripeti con me: CTRL+T! CTRL+T! CTRL+T!)
Ho dato un'occhiata veloce. Hai due delay in fila: delay(50) e delay(30). Forse è per questo che il fade è un po' "scattoso".
CTRL+T non funzionaaaaaaaaaa Ok x i delay, ma non capisco come mai il fade vada solo in un "verso".
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
ITALY
Offline
Full Member
Karma: 0
Posts: 167
|
 |
« Reply #38 on: October 05, 2012, 04:53:44 pm » |
Ciao, provo a dire la mia, io userei delle variabili int al posto del byte su fadeAmount e b.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16462
Don't know what I do
|
 |
« Reply #39 on: October 06, 2012, 12:10:56 am » |
Ok x i delay, ma non capisco come mai il fade vada solo in un "verso".
Il fade lo puoi fare in entrambi i versi, casomai io semplificherei un po' il tuo codice. Lo vedo un po' "contorto" 
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1050
http://cesarecacitti.wordpress.com/
|
 |
« Reply #40 on: October 06, 2012, 01:00:04 am » |
Ok x i delay, ma non capisco come mai il fade vada solo in un "verso".
Il fade lo puoi fare in entrambi i versi, casomai io semplificherei un po' il tuo codice. Lo vedo un po' "contorto"  Io ho messo il codice per fare il face in tutti e due i versi, ma il tutto viene "granuloso" (mi ricorda un problema con un quarzo che avevo nell'atmega8) e va solo da 255 a 0, non da 0 a 255. Se mi dici come semplificare il codice mi metto al lavoro 
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #41 on: October 06, 2012, 01:27:35 am » |
A prima vista potresti iniziare a concatenare con un AND alcune if che adesso sono nidificate, e poi la variabile "b" per cosa la usi? e brightness quando la inizializzi?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16462
Don't know what I do
|
 |
« Reply #42 on: October 06, 2012, 01:34:08 am » |
Ok x i delay, ma non capisco come mai il fade vada solo in un "verso".
Il fade lo puoi fare in entrambi i versi, casomai io semplificherei un po' il tuo codice. Lo vedo un po' "contorto"  Io ho messo il codice per fare il face in tutti e due i versi, ma il tutto viene "granuloso" (mi ricorda un problema con un quarzo che avevo nell'atmega8) e va solo da 255 a 0, non da 0 a 255. Se mi dici come semplificare il codice mi metto al lavoro  Bastano un paio di variabili. Una per tenere il valore della luminosità del led ed una per l'incremento/decremento che usi anche come direzione dello stesso. byte incremento = 1; byte valoreLed = 0;
void loop() { analogWrite(LED, valoreLED); valoreLed += incremento; if ((incremento == 255) || (incremento == 0)) { incremento *= -1; //con questo inverti la direzione } delay(qualcosa); }
|
|
|
|
|
Logged
|
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1050
http://cesarecacitti.wordpress.com/
|
 |
« Reply #43 on: October 06, 2012, 02:21:30 am » |
Ok x i delay, ma non capisco come mai il fade vada solo in un "verso".
Il fade lo puoi fare in entrambi i versi, casomai io semplificherei un po' il tuo codice. Lo vedo un po' "contorto"  Io ho messo il codice per fare il face in tutti e due i versi, ma il tutto viene "granuloso" (mi ricorda un problema con un quarzo che avevo nell'atmega8) e va solo da 255 a 0, non da 0 a 255. Se mi dici come semplificare il codice mi metto al lavoro  Bastano un paio di variabili. Una per tenere il valore della luminosità del led ed una per l'incremento/decremento che usi anche come direzione dello stesso. byte incremento = 1; byte valoreLed = 0;
void loop() { analogWrite(LED, valoreLED); valoreLed += incremento; if ((incremento == 255) || (incremento == 0)) { incremento *= -1; //con questo inverti la direzione } delay(qualcosa); } sto usando questo sketch, ma mi da sempre lo stesso problema: il PWM va da 25 a 0 ma non da 0 a 255 #include <LiquidCrystal.h>
byte b = 0; byte incremento = 1; int up = LOW; int down = LOW; int up1 = LOW; int down1 = LOW; int check = LOW; int led = 9; int a = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() { pinMode(7, INPUT); pinMode(8, INPUT); pinMode(6, INPUT); pinMode(14, INPUT); pinMode(15, INPUT); pinMode(led, OUTPUT); lcd.begin(16, 2); lcd.print("Luci presepe by"); lcd.setCursor(0, 1); lcd.print("Cesare Cacitti "); delay(5000); }
void loop() { lcd.setCursor(0, 0); lcd.clear(); lcd.print("Giorno:"); lcd.print(a); lcd.setCursor(0, 1); lcd.print("Notte:"); lcd.print(b);
delay(50); up = digitalRead(8); down = digitalRead(7); up1 = digitalRead(14); down1 = digitalRead(15); check = digitalRead(6);
if (check == HIGH) {
if (up == HIGH) { if (a<255) a++; }
if (down == HIGH) { if (a>0) a--; } if (down1 == HIGH) { if (b>0) b--; } if (up1 == HIGH) { if (b<255) b++; }
} else { analogWrite(led, incremento ); incremento += a; if ((a == 255) || (a == 0)) { a *= -1; //con questo inverti la direzione } delay(15); } }
|
|
|
|
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
Dueville (VI)
Offline
Edison Member
Karma: 15
Posts: 1050
http://cesarecacitti.wordpress.com/
|
 |
« Reply #44 on: October 06, 2012, 02:57:40 am » |
Bene,bene, ho appena aggiunto il led rgb (mi stancava il led normale  ) e dopo varie prove sono riuscito ad ottenere un effetto bruttissimo, io dovrei fare: primo led da 0 a 255, poi da 255 a 0, dopo entra il secondo che fa 0-255 e 255-0 e dopo riparte il loop, ma non riesco a combinare nulla Ecco lo sketch: #include <LiquidCrystal.h>
byte b = 0; byte incremento = 1; byte incremento1 = 1; int up = LOW; int down = LOW; int up1 = LOW; int down1 = LOW; int check = LOW; int led = 9; byte a = 0;
LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
void setup() { pinMode(7, INPUT); pinMode(8, INPUT); pinMode(6, INPUT); pinMode(14, INPUT); pinMode(15, INPUT); pinMode(led, OUTPUT); lcd.begin(16, 2); lcd.print("Luci presepe by"); lcd.setCursor(0, 1); lcd.print("Cesare Cacitti "); delay(5000); }
void loop() { lcd.setCursor(0, 0); lcd.clear(); lcd.print("Giorno:"); lcd.print(a); lcd.setCursor(0, 1); lcd.print("Notte:"); lcd.print(b);
delay(50); up = digitalRead(8); down = digitalRead(7); up1 = digitalRead(14); down1 = digitalRead(15); check = digitalRead(6);
if (check == HIGH) {
if (up == HIGH) { if (a<255) a++; }
if (down == HIGH) { if (a>0) a--; } if (down1 == HIGH) { if (b>0) b--; } if (up1 == HIGH) { if (b<255) b++; }
} else { analogWrite(led, incremento); incremento += a; if ((a == 255) || (a == 0)) { a *= -1; } delay(15); analogWrite(led, incremento); incremento = incremento + a; if (incremento == 0 || incremento == 255) { a = -a ; } delay(30); analogWrite(10, incremento1); incremento1 = incremento1 + b; if (incremento1 == 255 || incremento1 == 0) { b = -b ; } delay(30); } }
|
|
|
|
« Last Edit: October 06, 2012, 03:16:30 am by cece99 »
|
Logged
|
Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield. Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586
|
|
|
|
|