Pages: 1 [2] 3 4 5   Go Down
Author Topic: Problemino sketch  (Read 3161 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa, ma secondo me prima di chiedere altro aiuto dovresti mostrare più impegno  smiley-razz
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.
Logged


Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1745
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa, ma secondo me prima di chiedere altro aiuto dovresti mostrare più impegno  smiley-razz
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 -.-'
Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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,
Logged


Offline 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)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1745
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink.
Sto provando in tutti i modi ma non riesco a far funzionare nulla smiley-sad
Questo è lo sketch (compila ma non funziona: quando muovo l'interruttore nel display non si vede più nulla smiley-sad)
Code:
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
  } 
  } 
  }

 

Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline 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)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
ecco cosa non avevate capito!!!

vabbe' se le cose non le dici...  smiley-razz

(e insisti con il codice non indentato...)
« Last Edit: September 27, 2012, 12:04:57 pm by tuxduino » Logged

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1745
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
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 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)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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! smiley
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6993
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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.  smiley-razz
« Last Edit: September 27, 2012, 12:14:58 pm by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1745
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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 smiley-grin), 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?
Logged

Arduino UNO r3, Arduino MEGA 1280, adafruit motor shield, bluetooth module, enc28j60 shield.
Ultimi acquisti: un sacco di componenti elettronici, ATTEN AT 8586

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6993
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1745
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
smiley-wink
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 Offline
Edison Member
*
Karma: 28
Posts: 1745
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

allora... con questo sketch, quando cambio la posizione del deviatore, non fa quello che deve fare:
Code:
#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?
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 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)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: 1 [2] 3 4 5   Go Up
Jump to: