Accensione led da pulsante [RISOLTO]

Ciao ragazzi sono nuovo del mondo arduino e anche del forum, spero sia questa la sezione giusta, per prendere la mano con arduino ho provato a fare qualche progettino a caso e mi sono imbattuto in questo problema. Volevo far un circuito per cui si accende un led e rimane acceso quando premo il pulsante ma che poi si dee spegnere quando lo ripremo. Mi si accende senza problemi ma non si spegne fin quando non tolgo alimentazione ad arduino. Posto il codice e il fritzing del progetto. Riuscireste a darmi una mano?

/*
Modifiche schetch "button" per comunicazione seriale 
 dello stato del led
 */

//dichiaro costanti
const int buttonPin = 2; // pin pulsante
const int ledPin = 4; // pin led
const int debounceDelay = 50; // valore ritardo in millisecondi

//dichiaro variabili
int buttonState = 0; // memorizza stato del pulsante
int lastBtnState = LOW; // memorizza precedente stato del pulsante
int ledState = LOW; // da uno stato al led

void setup() {
  pinMode(ledPin, OUTPUT); // imposto il pin del led come out
  pinMode(buttonPin, INPUT); // imposto il pin del pulsante come input
  Serial.begin(9600);
}
void loop(){
  buttonState = digitalRead(buttonPin); // metto in variabile stato del pulsante
  if (buttonState != lastBtnState && buttonState == HIGH) {
    ledState = !ledState;
    if (ledState == HIGH) {
      digitalWrite(ledPin, HIGH);
      Serial.println("ON");
    } else {
      digitalWrite(ledPin, LOW);
      Serial.println("OFF");
    }
  }
    lastBtnState = buttonState;
    delay(debounceDelay);
}

Sketch bottone e led.fzz (3.39 KB)

http://www.arduino.cc/en/Tutorial/Switch dai un occhiata qui

E ma ti dirò... ho provato col led 13 e funziona... peso sia più un banale problema del circuito... il problema me lo presenta soltanto se collego un led esterno alla breadboard, per esempio al pin 4 come ho fatto io.

il circuito non l'ho visto primo perchè fritzing non è gradito da tutti, secondo hai postato un file con estensione fzz quindi obblighi gli utenti a scaricare il programma per leggerlo (scusa, ma io non lo scarico).

Comunque si tratta di un pulsante e una R di pull-** e un led con una R di limitazione.
esempio tipo http://www.luntianlaboratory.com/arduino/on-led-after-push-button/

grazie per la risposta :slight_smile:

@barra con fritzing puoi esportare lo “schema” come immagine. Meglio quella del file .fzz
(file->esporta->as image->jpg)

nid69ita:
@barra con fritzing puoi esportare lo “schema” come immagine. Meglio quella del file .fzz
(file->esporta->as image->jpg)

Grazie e scusa ma sono alle prime armi come puoi notare :disappointed_relieved:

Qua sotto allego l’immagine del circuito :slight_smile:

pablos:
il circuito non l'ho visto primo perchè fritzing non è gradito da tutti, secondo hai postato un file con estensione fzz quindi obblighi gli utenti a scaricare il programma per leggerlo (scusa, ma io non lo scarico).

Comunque si tratta di un pulsante e una R di pull-** e un led con una R di limitazione.
esempio tipo http://www.luntianlaboratory.com/arduino/on-led-after-push-button/

grazie per la risposta :slight_smile:

Ho provato con il link che mi hai dato ma quello fa passare corrente solo per il tempo in cui io tengo premuto il pulsante appena lo rilascio non passa più nulla e non era quello che volevo fare :~
Volevo che il led rimanesse acceso una volta premuto il pulsante e si spegnesse una volta che lo ripremo proprio come un interrutore della luce.

Nella risposta all'altro utente ho postato come richiesto l'immagine del circuito :slight_smile:

scusa ma hai notato l'errore del tuo circuito?
confrontalo con questo http://www.luntianlaboratory.com/arduino/on-led-after-push-button/
così velocemente a occhio hai visto il nodo delle 2 resistenze?

Ho provato con il link che mi hai dato ma quello fa passare corrente solo per il tempo in cui io tengo premuto il pulsante appena lo rilascio non passa più nulla e non era quello che volevo fare smiley-confuse
Volevo che il led rimanesse acceso una volta premuto il pulsante e si spegnesse una volta che lo ripremo proprio come un interrutore della luce.

A parte gli errori di collegamento, il sistema passo-passo o switch lo fa il software non l'hardware, riprova e controlla

pablos:
scusa ma hai notato l'errore del tuo circuito?
confrontalo con questo http://www.luntianlaboratory.com/arduino/on-led-after-push-button/
così velocemente a occhio hai visto il nodo delle 2 resistenze?

Ho provato con il link che mi hai dato ma quello fa passare corrente solo per il tempo in cui io tengo premuto il pulsante appena lo rilascio non passa più nulla e non era quello che volevo fare smiley-confuse
Volevo che il led rimanesse acceso una volta premuto il pulsante e si spegnesse una volta che lo ripremo proprio come un interrutore della luce.

A parte gli errori di collegamento, il sistema passo-passo o switch lo fa il software non l'hardware, riprova e controlla

E' vero. Così funziona non avevo proprio notato :~ Grazie mille così funziona anche il mio codice XD

Mi scuso ancora per la mia impreparazione ma son le prime volte che ci metto mano eheh.

Non ci siamo capiti, comprendo che è difficile alle prime armi, ma hai messo un pulsante in serie al led, ti sei preso la libertà di togliere un componente perchè tanto non serve, come fai a sostenere che funziona in modo passo-passo?
Il led si trova connesso direttamente tra gnd e il 4 senza limitazione con un lieve rischio di una sovracorrente sul pin, manca la resistenza di pull-down verso gnd sul pulsante

ciao

pablos:
Non ci siamo capiti, comprendo che è difficile alle prime armi, ma hai messo un pulsante in serie al led, ti sei preso la libertà di togliere un componente perchè tanto non serve, come fai a sostenere che funziona in modo passo-passo?
Il led si trova connesso direttamente tra gnd e il 4 senza limitazione con un lieve rischio di una sovracorrente sul pin, manca la resistenza di pull-down verso gnd sul pulsante

ciao

Scusa ho ripostato il vecchio circuito. Questo è quello corretto :open_mouth:. Ringrazio per la pazienza nei miei confronti :~

il filo nero va tra le 2 resistenze … poi è corretto

pablos:
il filo nero va tra le 2 resistenze .... poi è corretto

Come mai non va bene tra resistenza e led?

barra1995:

pablos:
il filo nero va tra le 2 resistenze … poi è corretto

Come mai non va bene tra resistenza e led?

perchè Ti ritrovi nuovamente senza resistenza di limitazione in serie al led
lo schema da seguire è questo (in figura) rispettando i colori che hai usato tu

Aaah okey ora ho capito. :smiley: Grazie mille gentilissimo davvero :slight_smile:

@barra se hai risolto, puoi modificare il titolo del tuo thread e aggiungere [Risolto].

ciao :slight_smile:

nid69ita:
@barra se hai risolto, puoi modificare il titolo del tuo thread e aggiungere [Risolto].

ciao :slight_smile:

Faccio subito. Grazie :slight_smile:

Per completezza, ecco circuito e codice corretti e funzionanti. Ringrazio ancora tutti i partecipati alla discussione. :slight_smile:

/*
Modifiche schetch "button" per comunicazione seriale 
dello stato del led
*/

//dichiaro costanti
const int buttonPin = 4; // pin pulsante
const int ledPin = 8; // pin led
const int debounceDelay = 50; // valore ritardo in millisecondi

//dichiaro variabili
int buttonState = 0; // memorizza stato del pulsante
int lastBtnState = LOW; // memorizza precedente stato del pulsante
int ledState = LOW; // da uno stato al led

void setup() {
  pinMode(ledPin, OUTPUT); // imposto il pin del led come out
  pinMode(buttonPin, INPUT); // imposto il pin del pulsante come input
  Serial.begin(9600);
}
void loop(){
  buttonState = digitalRead(buttonPin); // metto in variabile stato del pulsante
  if (buttonState != lastBtnState && buttonState == HIGH) {
    ledState = !ledState;
    if (ledState == HIGH) {
      digitalWrite(ledPin, HIGH);
      Serial.println("ON");
    } else {
      digitalWrite(ledPin, LOW);
      Serial.println("OFF");
    }
  }
    lastBtnState = buttonState;
    delay(debounceDelay);
}