Go Down

Topic: Informazioni su Attiny... (Read 3 times) previous topic - next topic

?R


Però c'è un problema... quando fa il case 1 va tutto bene, il led resta acceso e ok... quando gli faccio fare il case 2 quando ripete il ciclo mi fa "lampeggiare" il led.. cioè, riparte da valoreFade = 51 arriva a 103 e continua sempre così... come posso fare per bloccare la cosa?!

per "bloccare la cosa" intendi che una volta arrivato a 103 resta lì fermo aspettando delle variazioni sul capSense? o che da 103 torna gradualmente a 51 in modo da non lampeggiare quando va a ripetere il caso 2?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

maggio93


per "bloccare la cosa" intendi che una volta arrivato a 103 resta lì fermo aspettando delle variazioni sul capSense?

Esatto, in patica voglio che toccando il filo (capsense) la prima volta il led vada da 0 a 51, e se io non tocco deve restare acceso, non tornare a 0 e poi di nuovo a 51 facendo così un ciclo infinito... se tocco invece la seconda volta deve andare da 51 a 102 e uguale a prima, se non tocco il led una volta raggiunto il valore 102 deve restare acceso... non tornare a 51 e poi a 102... se mi riesci ad aiutare mi fai un gran favore, io non ci salto fuori e non so come fare.. :D Grazie a te e a tutti gli altri che rispondono a questo topic!! ;)
Pagina FB: https://www.facebook.com/pages/LaLed/442032022502554?ref=hl

Sito: http://www.laled.altervista.org

leo72

Devi mettere qualche variabile e gestire i vari eventi con quella.
Basta un flag: arrivato a 51, lo imposti a 1 ed al successivo controllo eseguire il fading fino a 100. Qui lo passi a 2. Al successivo passaggio al controllo, verifichi dov'è: se è a 2 continui da 101 ecc...

PS:
Sarebbe buona cosa scaricarsi una guida o prendere un libro che insegni il C. Ci sono sempre degli esempi allegati che spiegano man mano che avanzi nella lettura cosa stai facendo.

maggio93


Devi mettere qualche variabile e gestire i vari eventi con quella.
Basta un flag: arrivato a 51, lo imposti a 1 ed al successivo controllo eseguire il fading fino a 100. Qui lo passi a 2. Al successivo passaggio al controllo, verifichi dov'è: se è a 2 continui da 101 ecc...


Code: [Select]
{
case 1:
if (flag == 1) valoreFade = 52;
for (valoreFade = 0 ; valoreFade < 52; valoreFade++) {   
    analogWrite(LED, valoreFade);
if (valoreFade == 52) flag = 1;
    delay(100);   
  } 
                           
break;

case 2:
for (valoreFade = 51 ; valoreFade < 103; valoreFade++) {   
    analogWrite(LED, valoreFade);     
if (valoreFade == 103) flag = 2;
    delay(100);   
                 
  }   
   
break;

case 3:
for (valoreFade = 102 ; valoreFade < 154; valoreFade++) {   
    analogWrite(LED, valoreFade);   
if (valoreFade == 154) flag = 3;
    delay(10);   
               
  }   
   
break;

Circa così?? :S Per la guida ci sto pensando... e mi sa che seguirò il tuo consiglio dopo questo progettino!! :S ;)
Pagina FB: https://www.facebook.com/pages/LaLed/442032022502554?ref=hl

Sito: http://www.laled.altervista.org

leo72

Così però stai mettendo dei case, non ti servono poi i check sul flag interni al case.
Se hai diversi schemi di fading e ciò che vuoi fare deve stare solo dentro ad uno di questi, devi fare:
Code: [Select]
switch.....
  case 1:
    .....
  case 2:
    switch flag
      case 0:
        ..
      case 1:
        ..

ecc...

maggio93


Così però stai mettendo dei case, non ti servono poi i check sul flag interni al case.
Se hai diversi schemi di fading e ciò che vuoi fare deve stare solo dentro ad uno di questi, devi fare:
Code: [Select]
switch.....
  case 1:
    .....
  case 2:
    switch flag
      case 0:
        ..
      case 1:
        ..

ecc...


Niente... non ci riesco, mi potresti fare un esempio su una parte del codice? Perchè proprio non so cosa fare... :S
Poi ti farò una statua!! xD
Pagina FB: https://www.facebook.com/pages/LaLed/442032022502554?ref=hl

Sito: http://www.laled.altervista.org

?R

il problema del capSense è che non è proprio come un pulsante, ovvero tu pensi di premere una volta ma non sai quante volte il programma va a leggere quel tocco, dovresti controllare che sia rilasciato il "contatto" sul capSense prima di andare a leggere se è premuto di nuovo, ma può funzionare anche come hai fatto tu, questa è solo un'avertenza...

comunque puoi fare che la variabile non viene impostata ogni volta, ma mantiene il valore, tipo così:

Code: [Select]
#include <CapSense.h>
#define LED 11
CapSense cs_4_2 = CapSense(4,2);
int i = 0;
int valoreFade = 0;
void setup()
{
pinMode(LED,OUTPUT);
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
}
void loop()
{
long total = cs_4_2.capSense(30);
delay(15);
if (total >60)
{
i++;
}

switch (i)
{
case 1:
for (valoreFade = 0 ; valoreFade < 52; valoreFade++) {   
    analogWrite(LED, valoreFade);

    delay(100);   
  } 
                           
break;

case 2:
for (valoreFade = valoreFade ; valoreFade < 103; valoreFade++) {   
    analogWrite(LED, valoreFade);     

    delay(100);   
                 
  }   
   
break;

case 3:
for (valoreFade = valoreFade ; valoreFade < 154; valoreFade++) {   
    analogWrite(LED, valoreFade);   

    delay(10);   
               
  }   
   
break;

case 4:
for (valoreFade = valoreFade ; valoreFade < 205; valoreFade++) {   
    analogWrite(LED, valoreFade);     

    delay(10);   

  }   
   
break;

case 5:

    for (valoreFade = valoreFade ; valoreFade < 256; valoreFade++) {   
    analogWrite(LED, valoreFade);

    delay(10);   
                       
  }   
   
break;

case 6:
for(valoreFade = valoreFade ; valoreFade > -1; valoreFade--) { 
    analogWrite(LED, valoreFade);   

   delay(15);   
                           
  }   
   
  i=0;
break;
}
}

così si ricorda il valore precedente che aveva assunto e riparte da lì ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

maggio93


il problema del capSense è che non è proprio come un pulsante, ovvero tu pensi di premere una volta ma non sai quante volte il programma va a leggere quel tocco, dovresti controllare che sia rilasciato il "contatto" sul capSense prima di andare a leggere se è premuto di nuovo, ma può funzionare anche come hai fatto tu, questa è solo un'avertenza...

comunque puoi fare che la variabile non viene impostata ogni volta, ma mantiene il valore, tipo così:

Code: [Select]
#include <CapSense.h>
#define LED 11
CapSense cs_4_2 = CapSense(4,2);
int i = 0;
int valoreFade = 0;
void setup()
{
pinMode(LED,OUTPUT);
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
}
void loop()
{
long total = cs_4_2.capSense(30);
delay(15);
if (total >60)
{
i++;
}

switch (i)
{
case 1:
for (valoreFade = 0 ; valoreFade < 52; valoreFade++) {   
    analogWrite(LED, valoreFade);

    delay(100);   
  } 
                           
break;

case 2:
for (valoreFade = valoreFade ; valoreFade < 103; valoreFade++) {   
    analogWrite(LED, valoreFade);     

    delay(100);   
                 
  }   
   
break;

case 3:
for (valoreFade = valoreFade ; valoreFade < 154; valoreFade++) {   
    analogWrite(LED, valoreFade);   

    delay(10);   
               
  }   
   
break;

case 4:
for (valoreFade = valoreFade ; valoreFade < 205; valoreFade++) {   
    analogWrite(LED, valoreFade);     

    delay(10);   

  }   
   
break;

case 5:

    for (valoreFade = valoreFade ; valoreFade < 256; valoreFade++) {   
    analogWrite(LED, valoreFade);

    delay(10);   
                       
  }   
   
break;

case 6:
for(valoreFade = valoreFade ; valoreFade > -1; valoreFade--) { 
    analogWrite(LED, valoreFade);   

   delay(15);   
                           
  }   
   
  i=0;
break;
}
}

così si ricorda il valore precedente che aveva assunto e riparte da lì ;)

Col codice che mi hai dato il problema persiste... come posso fare? :S
Pagina FB: https://www.facebook.com/pages/LaLed/442032022502554?ref=hl

Sito: http://www.laled.altervista.org

?R

lampeggia ancora?  :smiley-roll:
apparte che guardando meglio il caso 0 lo fa solo all'inizio... prova con questo:

Code: [Select]

#include <CapSense.h>
#define LED 11
CapSense cs_4_2 = CapSense(4,2);
int i = 0;
int valoreFade = 0;
void setup()
{
pinMode(LED,OUTPUT);
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
}
void loop()
{
long total = cs_4_2.capSense(30);
delay(15);
if (total >60)
{
if(i<=6) i++;
else i=0;
}

switch (i)
{
case 1:
for (valoreFade = valoreFade ; valoreFade < 52; valoreFade++) {   
    analogWrite(LED, valoreFade);

    delay(100);   
  } 
                           
break;

case 2:
for (valoreFade = valoreFade ; valoreFade < 103; valoreFade++) {   
    analogWrite(LED, valoreFade);     

    delay(100);   
                 
  }   
   
break;

case 3:
for (valoreFade = valoreFade ; valoreFade < 154; valoreFade++) {   
    analogWrite(LED, valoreFade);   

    delay(10);   
               
  }   
   
break;

case 4:
for (valoreFade = valoreFade ; valoreFade < 205; valoreFade++) {   
    analogWrite(LED, valoreFade);     

    delay(10);   

  }   
   
break;

case 5:

    for (valoreFade = valoreFade ; valoreFade < 256; valoreFade++) {   
    analogWrite(LED, valoreFade);

    delay(10);   
                       
  }   
   
break;

case 6:
for(valoreFade = valoreFade ; valoreFade > -1; valoreFade--) { 
    analogWrite(LED, valoreFade);   

   delay(15);   
                           
  }   
break;
}
}
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

maggio93

Ciao ?R ho risolto... però purtroppo non ho avuto modo di provare il tuo codice... ho perso un po' di tempo da solo e non ho guardato sul forum... mi è stato utile però il tuo consiglio del valoreFade=valoreFade :D poi è venuto fuori un altro problema che ho risolto!! :D Grazie mille! ;)
Da questa volta mi tocca studiare senno @leo72 mi ammazza!! xD
Per la parte del codice ho risolto!! SIIIIIII
Pagina FB: https://www.facebook.com/pages/LaLed/442032022502554?ref=hl

Sito: http://www.laled.altervista.org

?R

bene :) per curiosità, quale era il problema?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

maggio93


bene :) per curiosità, quale era il problema?

Guarda, io non so programmare, ho messo su questo codice per intuizione... ho solo letto un po' qua e la e rubacchiato parti di codice e messe insieme... quindi sinceramente non te lo so dire... so solo che mi hai aiutato con il valoreFade=valoreFade... in modo che così non "lampeggiasse"... poi è venuto fuori un altro problema... dopo il primo ciclo di cambiamento di luminosità, arrivato allo spegnimento, alla successiva accensione andava prima su e poi giu... e lì ho risolto con il reset della variabile del fade... :D
Pagina FB: https://www.facebook.com/pages/LaLed/442032022502554?ref=hl

Sito: http://www.laled.altervista.org

leo72


Da questa volta mi tocca studiare senno @leo72 mi ammazza!! xD

Saper scrivere 2 righe di codice è importante. Se tu oggi hai un problema e chiedi di risolvertelo a qualcuno scrivendo il codice al posto tuo, tu: 1) non hai imparato nulla; 2) domani, quando avrai un altro problema, dipenderai nuovamente da qualcuno che faccia le cose al posto tuo.

maggio93



Da questa volta mi tocca studiare senno @leo72 mi ammazza!! xD

Saper scrivere 2 righe di codice è importante. Se tu oggi hai un problema e chiedi di risolvertelo a qualcuno scrivendo il codice al posto tuo, tu: 1) non hai imparato nulla; 2) domani, quando avrai un altro problema, dipenderai nuovamente da qualcuno che faccia le cose al posto tuo.

Ma hai ragione!! però oggi non mi sgridare che è il mio compleanno!! haha ...no, comunque mi tocca davvero studiare... è una cosa bruttissima non saper fare... è vero che questo codice l'ho copiato un po' in qua e in la... però almeno sono riuscito a vedere un po' come fare... mi consigli qualche guida online??
Pagina FB: https://www.facebook.com/pages/LaLed/442032022502554?ref=hl

Sito: http://www.laled.altervista.org

leo72

Ti basta cercare un corso di C gratuito. Ce ne sono tantissimi gratuiti. Ti scarichi il PDF e lo leggi. Sono fatti per l'uso su PC quindi salterai tutte le parti di comunicazione con l'utente perché non hai né terminali né tastiera  ;)

Go Up