Go Down

Topic: Informazioni su Attiny... (Read 4598 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy