Show Posts
Pages: [1]
1  International / Software / Re: Aiuto su codice base pulsante-led on: November 22, 2012, 11:04:42 am
Veramente esaustivo, grazie mille! E il codice funziona anche su base pratica smiley-grin

Avevo già intuito da ciò che mi avevi spiegato in precedenza che dovevo dividere in due casi il codice, una parte a LED spento e l'altra a LED lampeggiante ma non ho afferrato subito l'idea di poter usare "stato == 0" per spegnerlo in pratica o in caso contrario accenderlo e "stato == 1" per farlo lampeggiare. Se ho capito bene è questo che hai fatto nel codice.

Funziona perfettamente, l'ultimo "digitalWrite" non è necessario come sostenevi già tu e inoltre mi ritengo soddisfatto di aver appreso di più sulla funzione Millis e anche sulla stesura totale del codice con le varie parti.

Grazie mille a tutti!
2  International / Software / Re: Aiuto su codice base pulsante-led on: November 21, 2012, 06:48:18 pm
Innanzitutto grazie tuxduino per il consiglio sull'indentazione del codice, spero di tenerlo sempre a mente. smiley

Ritornando al mio stupido problema, ma che ahimè non sono riuscito a risolvere.
Ho riflettuto sul consiglio datomi, tonid, ma non riesco a capire come far accendere il led prima di mettere il Millis; mi spiego:

Code:
// Il led lampeggia se premo il pulsante  
// premendo una seconda volta il pulsante si spegne il led  

#define LED 13                  
#define BUTTON 7                
int val = 0;                    
int vecchio_val = 0;          
int stato = 0;
int ledState = LOW;            
long previousMillis = 0;      
long interval = 1000;


void setup() {  
  pinMode(LED, OUTPUT);        
  pinMode(BUTTON, INPUT);      
}  

void loop() {  
  val = digitalRead(BUTTON);    


  if ((val == HIGH) && (vecchio_val == LOW)){  
    stato = 1 - stato;  
    delay(15);                  
  }  

  vecchio_val = val;          

  if (stato == 1) {

    digitalWrite(LED, ledState);
    unsigned long currentMillis = millis();

    if(currentMillis - previousMillis > interval) {

      previousMillis = currentMillis;  


      if (ledState == LOW)
        ledState = HIGH;
      else
        ledState = LOW;


      digitalWrite(LED, ledState);
    }
  }  
  else {  
    digitalWrite(LED, LOW);      
  }  
}  



Come potete vedere ho aggiunto il comando, stupidamente penso, digitalWrite [che è l'unico che conosco per accendere il LED] con la variabile ledState; ho fatto ciò perché aggiungendo digitalWrite (LED, HIGH) [come per accendere il LED] avevo come risultato un normale circuito con tocco di pulsante - led accesso, tocco di pulsante - led spento.
Ho notato il cambiamento, ma ovviamente come ben sapete non è assolutamente ciò di cui avevo bisogno :-/
Mi stimola risolvermi questi piccoli problemi; scusate, ma cerco di apprendere quanto più possibile queste nozioni base!
Grazie ancora per i consigli!
3  International / Software / Re: Aiuto su codice base pulsante-led on: November 21, 2012, 02:25:56 pm
Sapevo di poter contare sul vostro aiuto e infatti sono riuscito ad ottenere ciò che volevo smiley-grin

Ecco, adesso non vorrei essere troppo palloso, ma è sorto un altro piccolo problema che penso e spero sia di facile risoluzione.
In pratica adesso ho un ritardo, probabilmente di 1 o 2 secondi massimo all'accensione dell led dopo aver premuto il pulsante.
Posto nuovamente il codice in modo da capire anche se ho manomesso troppo con la funzione milliss:

Code:
// Il led lampeggia se premo il pulsante  
// premendo una seconda volta il pulsante si spegne il led  
  
#define LED 13                  
#define BUTTON 7                
int val = 0;                    
int vecchio_val = 0;            
int stato = 0;
int ledState = LOW;            
long previousMillis = 0;        
long interval = 800;


void setup() {  
  pinMode(LED, OUTPUT);        
  pinMode(BUTTON, INPUT);      
}  
  
void loop() {  
  val = digitalRead(BUTTON);    
  
  // controlla se è accaduto qualcosa  
  if ((val == HIGH) && (vecchio_val == LOW)){  
    stato = 1 - stato;  
                  
  }  
  
  vecchio_val = val;          
  
    if (stato == 1) {
      unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    
    previousMillis = currentMillis;  

    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    
    digitalWrite(LED, ledState);
  }
    }  
  else {  
    digitalWrite(LED, LOW);    
  }  
}  


Considerate che sono alle primissime armi, quindi per la funzione milliss mi sono limitato a capire dove dovevo copiare le varie parti dall'esempio nel reference.
4  International / Software / Re: Aiuto su codice base pulsante-led on: November 21, 2012, 12:08:12 pm
Molto interessante. C'è un modo per ovviare al problema evitando di togliere quei ritardi che mi danno il lampeggiamento del led?
5  International / Software / Aiuto su codice base pulsante-led on: November 21, 2012, 11:56:57 am
Salve a tutti,
sono appena arrivato in questo forum e solo da qualche giorno sto utilizzando Arduino (con precisione Arduino Duemilanove). Seguendo vari tutorial online ho svolto vari esercizietti che mi hanno fatto capire alcune meccaniche di Arduino, subito interessanti.

Ecco però che sorge il primo problema: seguendo una guida sull'interazione di un pulsante con un led, dovevo far in modo di attivare il pulsante e fa andare in lampeggiamento il led e al secondo tocco del pulsante il led dovrebbe spegnersi. Il mio problema sorge nel secondo momento, lo spegnimento, che non avviene istantaneamente.

Posto il codice per capirci meglio:
Code:
// Il led lampeggia se premo il pulsante 
// premendo una seconda volta il pulsante si spegne il led 
 
#define LED 13                // LED collegato al pin digitale 13 
#define BUTTON 7              // pin di input dove è collegato il pulsante 
int val = 0;                  // val per conservare lo stato del pin di input 
int vecchio_val = 0;          // vecchio_val per conservare lo stato del pin di input al passo precedente 
int stato = 0;                // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso 
 
void setup() { 
  pinMode(LED, OUTPUT);       // imposta il pin digitale come output 
  pinMode(BUTTON, INPUT);     // imposta il pin digitale come input 

 
void loop() { 
  val = digitalRead(BUTTON);  // legge il valore dell'input e lo conserva 
 
  // controlla se è accaduto qualcosa 
  if ((val == HIGH) && (vecchio_val == LOW)){ 
    stato = 1 - stato; 
    delay(15);                // attesa di 15 millisecondi 
  }   
 
  vecchio_val = val;          // ricordiamo il valore precedente di val 
 
    if (stato == 1) { 
    digitalWrite(LED, HIGH);  // accende il LED 
    delay(1000);              // aspetta un secondo 
    digitalWrite(LED, LOW);   // spegne il LED 
    delay(1000);              // aspetta un secondo 
  } 
  else { 
    digitalWrite(LED, LOW);    //spegne il led 
  } 

Il problema è appunto che per spegnere il led in pratica devo tener premuto per qualche secondo il pulsante, al contrario io invece vorrei che il pulsante funzionasse all'istante e facendo quindi tornare, in un istante, il led allo stato 0, ossia spento.

Spero di essere stato chiaro nella spiegazione del problema e spero altrettanto che qualcuno possa darmi una mano! Grazie mille in anticipo smiley-grin
6  International / Generale / Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! on: November 21, 2012, 11:46:04 am
Salve a tutti smiley-grin
Mi chiamo Alessio, sono uno studente del liceo scientifico con una grande passione per la programmazione.
Praticamente da qualche giorno ho preso in mano il mio primo Arduino (Arduino Duemilanove), donatomi da mio padre (esperto di elettronica) e subito mi sono trovato appassionato.
Ho già avuto i miei primi problemi con la programmazione e spero di risolverli grazie al vostro aiuto!
Buon lavoro a tutti!
Pages: [1]