Show Posts
Pages: 1 ... 90 91 [92] 93 94 ... 287
1366  International / Generale / Re: blocco orologio on: February 18, 2014, 06:58:20 am
Ok ... allora non dovrebbero esserci problemi smiley-wink

Prova il tutto, anche con la nuova funzione e vedi se ti è tutto chiaro ... smiley

Guglielmo

1367  International / Generale / Re: Delucidazioni domotica on: February 18, 2014, 06:55:21 am
Sul sito della RS ne hanno svariati ... sono prodotti di qualità e la RS non è esattamente economica ... quindi ... aspettati prezzi piuttosto salati ... però trovi di tutto  smiley-lol smiley-lol smiley-lol

Guglielmo
1368  International / Generale / Re: Delucidazioni domotica on: February 18, 2014, 06:40:47 am
Quell'esempio è la versione "minima" di quello che stai facendo ... usando al posto di un MOSFET un piccolo transistor ...

Ti consiglio di proseguire sulla strada che stai seguendo ora ... ti permetterà di pilotare vari tipi di carichi smiley-wink

Per quel motorino, a parte che, non so se hai visto, funziona al massimo a 1.6v ... non saprei proprio indicarti chi lo ha ...

Guglielmo
1369  International / Generale / Re: blocco orologio on: February 18, 2014, 06:23:32 am
Sempre pensare FACILE smiley-grin smiley-grin smiley-grin

Piuttosto ... tu sai vero che millis() torna a 0 dopo poco più di 49gg.

Quindi ... immagino che l'oggetto che stai facendo NON deve mai restare acceso per un tempo così lungo perché altrimenti ... è stato un bell'esercizio, ma, "fatte le ossa", occorrerà ridisegnarlo in modo sostanzialmente diverso ...  smiley-roll

Guglielmo
1370  International / Generale / Re: Delucidazioni domotica on: February 18, 2014, 05:52:57 am
Si, la M rappresenta un "generico" motore a corrente continua ... smiley-wink

Guglielmo
1371  International / Generale / Re: Delucidazioni domotica on: February 18, 2014, 05:43:07 am
Il diodo va in anti-parallelo alla ventola, assieme al condensatore, serve a proteggere il MOSFET. il MOSFET lo metti tra la ventola ed il GND (D e S) mentre il pilotaggio (G) lo fai tramite le due resistenze da Arduino.

Guglielmo
1372  International / Hardware / Re: Self Balancing Robot on: February 18, 2014, 05:37:58 am
Non conosco così bene quel chip, però ... leggi bene pagina 26 del datasheet, in particolare il punto "7.11 Auxiliary I2C Serial Interface" ... spiega le due modalità di funzionamento della porta ausiliaria e cosa ci si può fare smiley-wink

Guglielmo
1373  International / Generale / Re: Delucidazioni domotica on: February 18, 2014, 05:27:34 am
Guarda QUI (... sperando che il sito funzioni ... è comunque piuttosto lento), scheda No. 5, in basso a sinistra ... è come la dovresti collegare smiley-wink

Puoi scaricare anche il pdf in alta risoluzione ... QUI  smiley

Guglielmo
1374  International / Software / Re: [RISOLTO] comprensione loop(), millis(), do while on: February 18, 2014, 02:01:50 am
Dubbio ...
... faccio il check-out, prendo la macchina e mi avvio, il proprietario pigia il bottone e scattano i 10 min.

Dopo 5 minuti, arriva un altro e fa check-out anche lui, prende la macchina e si avvia ... e il padrone che fa ? Preme di nuovo il pulsante ? E cosa avviene al tempo ?

Perché a me mancano ancora 5 minuti per arrivare al cancello, mentre al secondo ne mancano 10 ...
... hai previsto questa cosa ??? smiley-wink

Guglielmo
1375  International / Generale / Re: blocco orologio on: February 18, 2014, 01:09:56 am
Niente eh ... quando ti fissi su un'idea non riesci a seguire la strada più semplice ...
... perché creare un'inutile funzione blocco() che non serve a nulla ???

Code:
#include <LiquidCrystal.h>
//
const byte button  = 8;
const byte button1 = 9;
const byte start   = 6;
const byte stop    = 7;
//
int secs, mins, hrs, val, secc, minc, hrsc, secSt, minSt, hrsSt;
unsigned long currmillis, prevmillis, startmillis, durata;
byte fStoContando;
//
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
//
void setup() {
  prevmillis = 0;
  val        = 0;
  secs       = 0;
  mins       = 0;
  hrs        = 0;
  fStoContando = false;

  //
  lcd.begin (16,2);
  lcd.setCursor(4,0);
  lcd.print(" 0:00:00");
  //
  pinMode(button, INPUT_PULLUP);
  pinMode(button1, INPUT_PULLUP);
  pinMode(start,INPUT_PULLUP);
  pinMode(stop,INPUT_PULLUP);
  
}
//
void loop(){
  aumenta();  
  orologio();
  cronometro();
}
//
void orologio() {
  currmillis = millis();
  if(currmillis-prevmillis > 999){
    prevmillis = currmillis;
    // Aggiorna l'orario
    secs++;
    if (secs > 59) {
      secs = 0;      
      mins++;
      if (mins > 59) {
        mins = 0;
        hrs++;
        if (hrs > 24) {
          hrs = 0;
        }      
      }
    }
    // Aggiorna il display
    lcd.setCursor(4,0);
    if (hrs < 10) lcd.print(" ");
    lcd.print(hrs);
    lcd.print(":");
    if (mins < 10) lcd.print("0");
    lcd.print(mins);
    lcd.print(":");
    if (secs < 10) lcd.print("0");
    lcd.print(secs);
  }
}
//
void aumenta() {
  // Controlla bottone minuti (button)
  val = digitalRead(button);
  if (val == LOW) {
    delay(50); // <<<<<<<<<<<<<<<< si può provare ad abbassarlo
    val = digitalRead(button);
    if (val == LOW) {
      // Pulsante premuto e rimbalzi finiti
      mins++;
      if (mins > 59) mins = 0;
      //
      lcd.setCursor(7,0);
      if (mins < 10) lcd.print("0");
      lcd.print(mins);
    }
  }
  // Controlla bottone ore (button1)
  val = digitalRead(button1);
  if (val == LOW) {
    delay(100); // <<<<<<<<<<<<<<<< si può provare ad abbassarlo
    val = digitalRead(button1);
    if (val == LOW) {
      // Pulsante premuto e rimbalzi finiti
      hrs++;
      if (hrs > 23) hrs = 0;
      //
      lcd.setCursor(4,0);
      if (hrs < 10) lcd.print(" ");
      lcd.print(hrs);
    }
  }
}

void cronometro(){
   //
   // Controlo se già sto contando o no ...
   //
   if ( fStoContando) {
      //
      // Si, sto già contando, aggiorno solo il display ...
      //
      secc = (millis() - startmillis) / 1000;
      hrsc = secc / 3600;
      secc = secc - (hrsc * 3600);
      minc = secc / 60;
      secc = secc - (minc * 60);
      // Aggiorna durante il conteggio la seconda riga del display
      /*
       * --- temporaneamente commentato per non occupare la seconda riga
       * --- andrà poi posizionato sulla terza riga
       *
      lcd.setCursor(4,1);
      if (hrsc < 10) lcd.print(" ");
      lcd.print(hrsc);
      lcd.print(":");
      if (minc < 10) lcd.print("0");
      lcd.print(minc);
      lcd.print(":");
      if (secc < 10) lcd.print("0");
      lcd.print(secc);
      */
   }
   else {
      //
      // No, non sto contando quindi ... verifico la pressione del bottone Start ...
      //
      val = digitalRead(start);
      if (val == LOW) {
         delay(75); // <<<<<<<<<<<<<<<< si può provare ad abbassarlo
         val = digitalRead(start);
         if (val == LOW) {
            startmillis = millis();
            fStoContando = true; // ... si segna che ha iniziato a contare
            // Visualizza sul display l'hora a cui è partito ...
            secSt = startmillis / 1000;
            hrsSt = secSt / 3600;
            secSt = secSt - (hrsSt * 3600);
            minSt = secSt / 60;
            secSt = secSt - (minSt * 60);
            //
            lcd.setCursor(4,1);
            if (hrsSt < 10) lcd.print(" ");
            lcd.print(hrsSt);
            lcd.print(":");
            if (minSt < 10) lcd.print("0");
            lcd.print(minSt);
            lcd.print(":");
            if (secSt < 10) lcd.print("0");
            lcd.print(secSt);
            //
         }
      }  
   }
   // Controlla se premuto Stop e calcola durata
   val = digitalRead(stop);
   if (val == LOW) {
      delay(75); // <<<<<<<<<<<<<<<< si può provare ad abbassarlo
      val = digitalRead(stop);
      if (val == LOW) {
        durata = millis() - startmillis;
        fStoContando = false; // ... si segna che ha terminato di contare
        //
        // <<<<<<<<< aggiungi qui come vuoi visualizzare la durata allo STOP
        //
      }
   }
}

... già stai verificando lo Start ... non puoi verificarlo un'altra volta ... devi fare le cose all'interno del blocco che già esiste ... ed è anche la cosa più semplice ...  smiley-mr-green

Guglielmo
1376  International / Generale / Re: Delucidazioni domotica on: February 18, 2014, 12:27:10 am
Se l'hai collegata ai pin +5V/GND non hai fatto nessun danno ... l'importante è non superare i 500 mA massimi ... ma non ti venisse in mente di collegarla ad altri pin perché ... li bruceresti !

Ricorda che ogni pin di Arduino può dare al massimo 40 mA e, per sicurezza, mai superare il 65-70% di tale valore smiley-wink

Guglielmo
1377  International / Generale / Re: blocco orologio on: February 17, 2014, 06:23:21 pm
Praticamente ... riparti con una cronometro() in cui non usi il display :

Code:
void cronometro(){
   // Controlo se già sto contando o no ...
   if ( fStoContando) {
      // Si, aggiorna solo il display ...
      secc = (millis() - startmillis) / 1000;
      hrsc = secc / 3600;
      secc = secc - (hrsc * 3600);
      minc = secc / 60;
      secc = secc - (minc * 60);
      // Aggiorna durante il conteggio la seconda riga del display
      /*
      lcd.setCursor(4,1);
      if (hrsc < 10) lcd.print(" ");
      lcd.print(hrsc);
      lcd.print(":");
      if (minc < 10) lcd.print("0");
      lcd.print(minc);
      lcd.print(":");
      if (secc < 10) lcd.print("0");
      lcd.print(secc);
      */
   }
   else {
      // No, verifica la pressione del bottone Start ...
      val = digitalRead(start);
      if (val == LOW) {
         delay(75); // <<<<<<<<<<<<<<<< si può provare ad abbassarlo
         val = digitalRead(start);
         if (val == LOW) {
            startmillis = millis();
            fStoContando = true; // ... si segna che ha iniziato a contare
         }
      }  
   }
   // Controlla se premuto Stop e calcola durata
   val = digitalRead(stop);
   if (val == LOW) {
      delay(75); // <<<<<<<<<<<<<<<< si può provare ad abbassarlo
      val = digitalRead(stop);
      if (val == LOW) {
        durata = millis() - startmillis;
        fStoContando = false; // ... si segna che ha terminato di contare
        //
        // <<<<<<<<< aggiungi qui come vuoi visualizzare la durata allo STOP
        //
      }
   }
}

... e prosegui inserendo la parte che visualizza l'orario di Start smiley

Guglielmo

P.S. : Praticamente ho racchiuso tutta la parte di visualizzazione tra /*  e */ ... poi, quando avrai il display a 4 righe, basterà togliere il commento e tutto tornerà come prima smiley-wink
1378  International / Generale / Re: blocco orologio on: February 17, 2014, 06:19:10 pm
Rimetti esattamente come era ...
... poi commentiamo SOLO le righe che usavano la seconda riga del display e ci aggiungiamo quelle che servono ora !

Non puoi stravolgere tutta la logica di un programma, devi ..."aggiustarlo" passo passo ... se stravolgi tutto non vai più da nessuna parte ... ti tocca ogni volta ricominciare tutti i  ragionamenti ...  smiley-fat

Guglielmo
1379  International / Generale / Re: blocco orologio on: February 17, 2014, 06:03:19 pm
E cosa è questo codice ???  smiley-eek smiley-eek smiley-eek

Dove è finita la funzione cronometro() ???  smiley-eek smiley-eek smiley-eek

Certo che se butti via tutta la logica poi non ti puoi lamentare che non funzioni più ! Praticamente c'erano da aggiungere 4 o 5 righe ...  smiley-twist

Inoltre ... senza il display a 4 righe, non hai lo spazio per visualizzare tutto quello che a te serve ...  smiley-roll

Guglielmo
1380  International / Software / Re: comprensione loop(), millis(), do while on: February 17, 2014, 05:44:46 pm
Se provi a spiegare bene il problema, descrivendo tutte le varie fasi, magari troviamo una forma ... "più pulita"  per fare quello che ti serve smiley-wink

Guglielmo
Pages: 1 ... 90 91 [92] 93 94 ... 287