Go Down

Topic: Problemino sketch (Read 4075 times) previous topic - next topic

leo72


Scusa, ma secondo me prima di chiedere altro aiuto dovresti mostrare più impegno  :P

Quoto.
Il forum non è il CED, Centro Elaborazione Dati, dove chiami e ti fai preparare il software di cui hai bisogno. Come ripeto tante volte, se qualcuno ti scrive il codice: 1) risolvi il tuo problema; 2) non impari nulla ed alla prox difficoltà sei nuovamente a chiedere.

cece99



Scusa, ma secondo me prima di chiedere altro aiuto dovresti mostrare più impegno  :P

Quoto.
Il forum non è il CED, Centro Elaborazione Dati, dove chiami e ti fai preparare il software di cui hai bisogno. Come ripeto tante volte, se qualcuno ti scrive il codice: 1) risolvi il tuo problema; 2) non impari nulla ed alla prox difficoltà sei nuovamente a chiedere.

Si, ok, ma non ho capito bene cosa devo fare -.-'
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

leo72

Ma parliamo di pulsanti o di interruttori?
Un pulsante è un contatto che si chiude o apre temporaneamente, un interruttore è un contatto permanente.
Se usi un interruttore, basta alternare con un if: if chiuso {xxx} else {yyy}.

quello che vorrei fare è riuscire a mettere un interruttore che quando è chiuso mi permette di cambiare i tempi, e quando lo apro, mi fa partire una funzione basata sul fade,

tuxduino

Quote
Si, ok, ma non ho capito bene cosa devo fare -.-'


Secondo me dovresti fare domande più specifiche. E per fare questo dovresti provare a scrivere più codice, fare prove, sbattere la testa sul tavolo, insomma fare un po' quello che si fa tutti quanti per divertirsi con le varie arduinate più o meno semplici che vengono in mente :-)

cece99


Ma parliamo di pulsanti o di interruttori?
Un pulsante è un contatto che si chiude o apre temporaneamente, un interruttore è un contatto permanente.
Se usi un interruttore, basta alternare con un if: if chiuso {xxx} else {yyy}.

quello che vorrei fare è riuscire a mettere un interruttore che quando è chiuso mi permette di cambiare i tempi, e quando lo apro, mi fa partire una funzione basata sul fade,


ecco cosa non avevate capito!!! per passare dalla modalità "programmazione" a quella di "esecuzione" utilizzo un interruttore, mentre per fare la "programmazione" dei tempi utilizzo due pulsantini ;).
Sto provando in tutti i modi ma non riesco a far funzionare nulla :(
Questo è lo sketch (compila ma non funziona: quando muovo l'interruttore nel display non si vede più nulla :()
Code: [Select]

byte a = 0;
byte b = 25;
int val = 0;
int val1 = 0;
int val2 = 0;
int brightness = 0;   
#include <LiquidCrystal.h>


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);
  //scrivo nome e cognome :-)
}

void loop() {
  //stampo i tempi
lcd.setCursor(0, 0);
  lcd.clear();
  lcd.print("Giorno:");
  lcd.print(a);
  lcd.setCursor(0, 1);
  lcd.print("Notte:");
  lcd.print(b);
  delay(100);

       val2 = digitalRead(6); // se ho l'interruttore chiuso, vado in modalità programmazione
    if (val2 == HIGH) { 
   
       val = digitalRead(7);
    if (val == HIGH) { 
    a=a-1;
  } 

      val1 = digitalRead(8);
    if (val1 == HIGH) { 
    a=a+1;
       
}
else {// se è aperto vado in modalità esecuzione
   //codice fade
  } 
  } 
  }

 

Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

leo72

Devi creare 2 funzioni, una per programmare ed una per eseguire ciò che deve fare. Quando è in programmazione, gestisci il + ed il -.

tuxduino

#21
Sep 27, 2012, 07:02 pm Last Edit: Sep 27, 2012, 07:04 pm by tuxduino Reason: 1
Quote
ecco cosa non avevate capito!!!


vabbe' se le cose non le dici...  :P

(e insisti con il codice non indentato...)

cece99


Devi creare 2 funzioni, una per programmare ed una per eseguire ciò che deve fare. Quando è in programmazione, gestisci il + ed il -.


ma non lo sto già facendo?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

tuxduino

Ecco un esempio di quello che secondo me è un codice molto più leggibile, quindi comprensibile.

Code: [Select]
#include <LiquidCrystal.h>

byte cntGiorno = 0;
byte cntNotte = 25;
int brightness = 0;   

// pin dell'interruttore di programmazione
const int modeSwitchPin = 6;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
    pinMode(modeSwitchPin, INPUT);
    pinMode(7, INPUT);     
    pinMode(8, INPUT);   
    lcd.begin(16, 2);
    lcd.print("Luci presepe by");
    lcd.setCursor(0, 1);
    lcd.print("Cesare Cacitti  ");
    delay(5000);
    //scrivo nome e cognome :-)
}

void loop() {
    //stampo i tempi
    lcd.setCursor(0, 0);
    lcd.clear();
    lcd.print("Giorno:");
    lcd.print(cntGiorno);
    lcd.setCursor(0, 1);
    lcd.print("Notte:");
    lcd.print(cntNotte);
    delay(100);

    // determino se siamo in modalità programmazione
    // o normale funzionamento
    programModeActive = (digtalRead(modeSwitchPin) == HIGH));
   

    if (programModeActive) {
        decBtnState = digitalRead(decBtnPin);
        incBtnState = digitalRead(incBtnPin);
       
        if (decBtnState == HIGH) {
            cntGiorno--;
        }
        else if (incBtnState == HIGH) {
            cntGiorno++;
        }
       
        // come si seleziona il contatore notte ?
    } 
    else {
        // codice fade
    }
}


Ora vo' a cena, buona fortuna! :)

PaoloP

#24
Sep 27, 2012, 07:12 pm Last Edit: Sep 27, 2012, 07:14 pm by PaoloP Reason: 1
Ti ho modificato leggermente il codice.
Non l'ho provato, ma dovrebbe funzionare.
Se premi il pulsante sul pin 8 incrementa a fino al valore 255, se premi il pulsante sul pin 7 decrementa a fino al volore 0.
Ho aggiunto un controllo per l'overflow.
Ho tolto il codice per il fade perché sinceramente non ho capito con quale sequenza di pulsanti lo volessi attivare.
Code: [Select]
#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--;
   }  

 }
}

Qualcuno sul forum ha scritto del codice per attivare le funzioni a seconda di quanto si tiene premuto il pulsante: pressione breve fai una cosa, pressione lunga fanne un'altra.
Non ricordo chi, ma se fai una ricerca forse esce qualcosa.

Invece di scrivere come in basic a=a+1; in C si può usare la sintassi a++; per incrementare o a--; per decrementare.
Esistono anche ++a; e --a;, ma è un'altro discorso.  :P

cece99

@paoloP
grazie mille per il codice, ti spiego a cosa serve il codice del fade: questa è una centralina per presepe, con i pulsantini seleziono il tempo di quanto deve durare alba e tramonto (il tramono o sera lo devo ancora implementare :D), dopo, quando vado in modalità esecuzione il codice del fade mi serve x modificare la luminosità dei led.
Una cosa: visto che ho praticamente finito tutti i pin del micro, posso usare i pin analogici come digital input?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

PaoloP


visto che ho praticamente finito tutti i pin del micro, posso usare i pin analogici come digital input?

Si, i pin analogici A0..A5 sono anche pin digitali numerati da 14 a 19.
Se usi A4 e A5 non puoi usare l'I2C, cosi come se ti servisse la SPI non devi usare i pin dal 10 al 13.

cece99



visto che ho praticamente finito tutti i pin del micro, posso usare i pin analogici come digital input?

Si, i pin analogici A0..A5 sono anche pin digitali numerati da 14 a 19.
Se usi A4 e A5 non puoi usare l'I2C, cosi come se ti servisse la SPI non devi usare i pin dal 10 al 13.

bene, quando finisco i compiti continuo la sperimentazione, intanto GRAZIEEEE
;)
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

cece99

allora... con questo sketch, quando cambio la posizione del deviatore, non fa quello che deve fare:
Code: [Select]
#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");
}
}

qualcuno ha un idea?
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

tuxduino

Dovresti descrivere meglio il problema. "Non fa quello che deve fare" è troppo generico. Devi dire cosa ti aspetti e cosa succede invece.

Go Up