Pages: 1 2 [3] 4   Go Down
Author Topic: Informazioni su Attiny...  (Read 2671 times)
0 Members and 1 Guest are viewing this topic.
Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Offline Offline
Sr. Member
****
Karma: 0
Posts: 294
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.. smiley-grin Grazie a te e a tutti gli altri che rispondono a questo topic!! smiley-wink
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Sr. Member
****
Karma: 0
Posts: 294
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
{
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 smiley-wink
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
switch.....
  case 1:
    .....
  case 2:
    switch flag
      case 0:
        ..
      case 1:
        ..

ecc...
Logged


Offline Offline
Sr. Member
****
Karma: 0
Posts: 294
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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ì smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Offline Offline
Sr. Member
****
Karma: 0
Posts: 294
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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ì smiley-wink
Col codice che mi hai dato il problema persiste... come posso fare? :S
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
#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;
 }
}
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Offline Offline
Sr. Member
****
Karma: 0
Posts: 294
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-grin poi è venuto fuori un altro problema che ho risolto!! smiley-grin Grazie mille! smiley-wink
Da questa volta mi tocca studiare senno @leo72 mi ammazza!! xD
Per la parte del codice ho risolto!! SIIIIIII
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bene smiley per curiosità, quale era il problema?
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Offline Offline
Sr. Member
****
Karma: 0
Posts: 294
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bene smiley 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... smiley-grin
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Sr. Member
****
Karma: 0
Posts: 294
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21619
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink
Logged


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