INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Hochdimmen Runterdimmen
31.12.2015, 14:51
Beitrag #1
Hochdimmen Runterdimmen
Hallo Community,

ich bin ein absoluter Neuling in Sachen Arduino und dessen programmierung. Da ich sehr an Elektronik interesiert bin, möchte ich mich gerne mit dem Thema Arduino auseinandersetzen.

Ich möchte gerne ein kleines Projekt realisieren.

Es soll mittels eines Tasters eine LED geschaltet werden.

Wenn der Taster einmal betätigt wird, soll die LED langsam auf halbe Leuchtstärke hochdimmen,
erneutes einmaliges drücken des Tasters lässt die LED runterdimmen und geht aus.

Wird der Taster zweimal betätigt ("Doppelklick") soll die LED auf volle Leuchtstärke hochdimmen,
erneutes einmaliges betätigen lässt die LED runterdimmen und geht aus.

Ich habe schon einen Sketch geschrieben komme aber nicht recht weiter. Huh
In dem Sketch habe ich die OneButton Library eingebunden. Den Einfachklick und den Doppelklick habe ich mittlerweile realisiert bekommen. Leider komme ich beim Hoch- und Runterdimmen nicht weiter.
Hier mein Code:
Code:
#include "OneButton.h"

const int buttonPin = 2;
const int ledPin = 9;

OneButton button(buttonPin, false);

int ledState = 100;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);

button.attachClick(clickedIt),100;
button.attachDoubleClick(doubleClickedIt);
}

void loop() {
button.tick();

delay(10);
}


void clickedIt() {
ledState = !ledState;

analogWrite(ledPin, ledState);
}

void doubleClickedIt() {
   ledState = !ledState;

digitalWrite(ledPin, ledState);

}
Vielleicht weiß jenmad einen Rat wie ich in der Sache weiter komme.
Ich denke für viele von Euch ist das keine große Sache. Für eure Mühen und Tips danke ich euch jetzt schon mal....

Kommt alle gut ins neue Jahr

Gruß malawi242
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.12.2015, 15:41
Beitrag #2
RE: Hochdimmen Runterdimmen
Du musst in einer Schleife nach und nach das Hochdimmen ansteuern.
Geht am einfachsten mit einer For-Schleife und einem kleinen Delay.
Das hat aber den Nachteil, das während des Hochfahrens nichts anderes mehr passiert, also kannst Du per Taster den Einschaltvorgang nicht unterbrechen.

Deshalb lieber ein paar Variablen/Konstante anlegen
Code:
#define t  100 // Je kleiner desto schneller
int Sollwert;
int Istwert;
unsigned long Zeit_Alt;

Dann in Deinem bisherigen Code den Sollwert verändern
Zum Einschalten auf 255 setzen
zum Ausschalten auf 0 setzen

Unten im Loop dann folgendes:

Code:
void loop()
{

  // Hier Deinen bisherigen Code verwenden
  // Damit dann den Sollwert verändern, je nach Tastendruck

  //Dann folgendes:
  
if(Istwert<Sollwert) //Lampe soll hell werden "hochdimmen"
{
  if(millis() > Zeit_Alt+t)   // Kleine Verzögerung
  {
    Istwert = Istwert-1;
    Zeit_Alt = millis();
  }
  
}
if(Istwert>Sollwert)    //Lampe soll abgeschaltet werden
  {
    Istwert = Sollwert; //Ohne Verzögerung
  }
//Am Ende den Ausgang ansteuern:
//Sicherstellen, das der Istwert zwischen 0 und 255 liegt
Istwert = constrain(Istwert, 0, 255);
// den Istwert an den Ausgang legen
  analogWrite(LED,Istwert);
  
} //Ende Loop

So in etwa müsste es funktionieren


Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.12.2015, 17:08
Beitrag #3
RE: Hochdimmen Runterdimmen
Hallo Binatone,

vielen Dank für die schnelle Antwort.

Habe versucht das mal umzusetzen . Leider ohne großen Erfolg.

Hier der Code:
Code:
#include "OneButton.h"
#define t  100 // Je kleiner desto schneller
int Sollwert = 100;
int Istwert = 0;
unsigned long Zeit_Alt;
const int buttonPin = 2;
const int ledPin = 9;

OneButton button(buttonPin, false);

int ledState = LOW;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);

button.attachClick(clickedIt),100;
button.attachDoubleClick(doubleClickedIt);
}

void loop() {
button.tick();

delay(10);

if(Istwert<Sollwert) //Lampe soll hell werden "hochdimmen"
{
  if(millis() > Zeit_Alt+t)   // Kleine Verzögerung
  {
    Istwert = Istwert-1;
    Zeit_Alt = millis();
  }
  
}
if(Istwert>Sollwert)    //Lampe soll abgeschaltet werden
  {
    Istwert = Sollwert; //Ohne Verzögerung
  }
}
void clickedIt() {
ledState = !ledState;
Istwert = constrain(Istwert, 0, 255);
analogWrite(ledPin, ledState);
}

void doubleClickedIt() {
   ledState = !ledState;

digitalWrite(ledPin, ledState);

}

Hier muss doch sicher noch ein Wert angegeben werden.
Code:
unsigned long Zeit_Alt;

Sobald ich an der Stelle
Code:
analogWrite(ledPin, ledState);

"ledState" durch "Istwert" ersetzte, funktioniert der einfachklick nicht mehr.

Allerdings findet auch keine Dimmung statt.

Gruß Malawi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.12.2015, 18:13 (Dieser Beitrag wurde zuletzt bearbeitet: 31.12.2015 18:21 von Scheams.)
Beitrag #4
RE: Hochdimmen Runterdimmen
Code:
bool ledState = 1;
int maxHelligkeit;

void clickedIt() {

  if (ledState) {
    maxHelligkeit = 256 / 2;
    /* Schleife zum hochzählen. 256 /2 --> halbe helligkeit */
    for (int helligkeit = 0; helligkeit < maxHelligkeit / 2; helligkeit++) {
      /* Achtung ist in deinem Sketch falsch: analogWrite(LEDpin, PWM-Signal! (von 0-256)) || Vergiss auch nicht, dass der Pin an einem PWM-Pin (evtl mit ~ bezeichnet am Board) angesteckt ist */
      analogWrite(ledPin, helligkeit);
      delay(10); /* Damit die Helligkeit nicht zu schnell auf max ist. Kannst du selber wählen */
    }
    ledState = 0;
  }
  else {
    /* Selbe Spielchen rückwärts */
    for (int helligkeit = maxHelligkeit; helligkeit >= 0; helligkeit --) {
      analogWrite(ledPin, helligkeit);
      delay(10);
    }
    ledState = 1;
  }
}

void doubleClickedIt() {
  if (ledState) {
    maxHelligkeit = 256;
    /* Selbe Geschichte nur dass bis 256 (volle Heligkeit gezählt wird */
    for (int helligkeit = 0; helligkeit < maxHelligkeit; helligkeit++) {
      analogWrite(ledPin, helligkeit);
      delay(10);
    }
    ledState = 0;
  }
}

Versuch das hier mal.
loop() und alles darüb lassen, bis auf "int ledState = 100" weg.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2016, 14:05
Beitrag #5
RE: Hochdimmen Runterdimmen
Frohes Neues Jahr 2016!!!!

Hallo Scheams,

Dein Code funktioniert bestens, Vielen Dank dafür.

Kann nun mein Projekt fortsetzen.

LG Malawi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste