Go Down

Topic: accendere dimmare e spegnere un led con un solo tasto (Read 980 times) previous topic - next topic

zorroman

Ciao a tutti, come sempre le cose semplici possono essere le piu difficili.
Come da titolo ho delle difficolta a accendere, spegnere e dimmare un led (collegato ad una uscita digitale di un arduino mega e pilotato da un n-mosfet) con UN solo tasto.

Ho cercato tanto ma non riesco a trovare una soluzione che vada bene.

Ho visto che forse si potrebbe usare la libreria buttons ma ce poca documantazione.

Il programma dovrebbe essere semplicissimo, se premo una volta il tasto il led si accende, se lo ripremo si spegne, e se lo tengo premuto comincia a dimmarsi e al rilascio memorizza il valore..

Forse qualcuno ha qualche suggerimento...  :)  :)

brunello22

c'è ad esempio la libreria oneButton  https://github.com/mathertel/OneButton
che fà tutto lei

esempio

Code: [Select]

#include "OneButton.h" // https://github.com/mathertel/OneButton

OneButton button(A1, true);  // Pulsante collegato tra pin A1 e GND
const byte ledPin = 11 ;         // Led collegato al pin PWM 11
byte ledState = LOW;     
int val_analog = 0 ;

void setup() {
  Serial.begin(115200);
  Serial.println("Starting ...");
  pinMode(ledPin,OUTPUT);
   
  button.attachClick(click1);
  button.attachDoubleClick(doubleclick1);
  button.attachLongPressStart(longPressStart1);
  button.attachLongPressStop(longPressStop1);
  button.attachDuringLongPress(longPress1);
}

void loop() {
  button.tick();

   delay(10);
}
//********************************************************
// This function will be called when the button1 was pressed 1 time
void click1() {
  Serial.println("Button click.");
  ledState = !ledState ;
  digitalWrite(ledPin, ledState);
}

// This function will be called when the button1 was pressed 2 times in a short timeframe.
void doubleclick1() {
  Serial.println("Button doubleclick.");
}

// This function will be called once, when the button1 is pressed for a long time.
void longPressStart1() {
  Serial.println("Button longPress start");
 }

// This function will be called often, while the button1 is pressed for a long time.
void longPress1() {
  Serial.print("Button longPress...  ");
  val_analog++ ;
  if (val_analog >255) val_analog = 0;
  delay(20);
  Serial.println(val_analog);
  analogWrite(ledPin,val_analog);
}

// This function will be called once, when the button1 is released after beeing pressed for a long time.
void longPressStop1() {
  Serial.println("Button longPress stop");
}

ExperimentUno

Acceso con una pressione breve, spento con una seconda pressione breve e variare la luminosità con una pressione lunga permanente (al raggiungimento del massimo si inizia a diminuire e viceversa)

pablos71

Vuoi ripetere i varialuce della Relco :) ... il tuo scopo finale è collegarlo a un triak e variare la luce di una lampada 220?
Se è così, fai molto prima a usare quel dispositivo.
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

ExperimentUno

@pablos
OP cita un N-mosfet, quindi credo che non sia da usare in alternata.

pablos71

infatti non è quello che ho detto, "replicare" per poi applicare un triack è ben diverso, tu trovi una ragione nel prendere un leddino da solo poverello che già fa una luce inutile e dimmerarla?
Comunque ho fatto una domanda, niente di transcindentale
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

ExperimentUno

prendere un leddino da solo poverello che già fa una luce inutile e dimmerarla?
Sarà un leddone-one (come quello dei faretti) o striscia di led ;)
Quote from: pablos
niente di transcindentale
Anche da qui :)

zorroman

inanzitutto brunello grazie questa libreria funzione veramente bene e anche il codice è comprensibile..
In poche parolie avevo aquistato un 12v in dc a 12v out pwm della qtl o qlt che funzionava proprio cosi, ma purtroppo ho fatto un corto, si è subito rotto il processore e non volevo aquistarne uno nuovo dato che ho tanti arduini e il circuito lato mosfet era ancora buono.
cmq si deve pilotare 4 led da 12v dc e dimmarli.

i triac vengono usati tanto in ac, in dc si possono anche usare..
i mosfet vanno sempre bene  :D  :D  :D

Go Up