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
Ablaufsteuerung ohne delay - tageszeitabhängige Dimmer- Funktion
22.08.2014, 22:42 (Dieser Beitrag wurde zuletzt bearbeitet: 22.08.2014 22:44 von MaHa1976.)
Beitrag #25
RE: tageszeitabhängige Funktion
[quote='Sascha' pid='6704' dateline='1408737860']
int led = 10;
int brightness = 0;
int fadeAmount = 1;
int ButtonPin = 2;
int Taste = 0;
int Sensor = 0;
int ValueSensor = 0;
int Empfindlichkeit = 180;
long previousMillis = 0; ///////bis hier hast du es denke ich mal verstanden
long interval = 10; /////// so zusagen der ersatz für delay, hier 10 millis() --- da wäre jetzt die Frage ob ich hier für jeden "delay- Ersatz" einen interval definieren muss. DEnn wie sagen ich der Funktion jetzt wann es Zeit ist die LEDs wieder auf LOW zu fahren? - bzw. richtig an dieser Stelle nicht wie sondern wann?

void setup()
{
pinMode(led, OUTPUT);
pinMode(ButtonPin, INPUT);
}

void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) //wenn aktuelle zeit minus startzeitpunkt deiner Pause größer als der Intervall (in deinem fall 0,01sek) passiert was da folgt
{
previousMillis = currentMillis; //also das hiermit stellst du die zeit glaube ich wieder auf 0 - genau, aber ob es richtig ist kann ich nicht sicher sagen
ValueSensor = analogRead(Sensor);//und das das muss glaube ich nicht hier drin stehn
Taste = digitalRead(ButtonPin);//und das das auc hnicht

if(((Taste == HIGH) && (ValueSensor >= Empfindlichkeit)) && (brightness < 255)) //und die Funktion läuft auch in der pause, da du vorher kein= hast - an welche Stelle müßte das?
{
analogWrite(led, brightness);
brightness = brightness + fadeAmount;
}
}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.08.2014, 22:45 (Dieser Beitrag wurde zuletzt bearbeitet: 22.08.2014 23:17 von Sascha.)
Beitrag #26
RE: tageszeitabhängige Funktion
? Was meinst du damit?
Ok sorry ich habe den Code nicht getestet aber ich habe versucht ihn einfach und ausführlich zu halt in der Hoffnung, dass du ihn verstehst und nachvollziehen kannst, oder kam der Post nicht an?

ah ups übersehn

guck dir den code an den ich auf seite 3 gepostet habe, da habe ich es dazu geschrieben, interval ist nicht genau das selbe wie delay, aber wenn man weiß wie, kann man das gleich damit machen, aber ich bin kein Profi.

Im letzten teil meines codes habe ich versucht sowas einzubauen, wenn du den taster drückst und loslässt, hat er den wert 1 hinterlegt, deine led geht an und danach hab ich gesagt, dass wenn der wert 1 ist, das Programm 5 Sekunden runterzählen soll und dann den wert wieder auf 0 setzt, denn
if(Counter ==1){
digitalwrite(Led1, HIGH);
}
also nur wenn es 1 ist ist sie an, somit bei 0 wieder aus.
Und an stelle von digitalwrite(Led1, HIGH); kannst du da halt hinschreiben was du willst, sollte nur ein kurzes bsp sein, denn ich bin nicht so schnell im schreiben.

Du kannst es auch noch mit else verbessern.
if(counter ==1){
digitalwrite(Led1, HIGH);
}
else //bedeutet hier so viel wie "sonst"
{
digitalwrite(Led1, LOW);
}

Guck dir das am besten mal an http://arduino.cc/en/pmwiki.php?n=Reference/HomePage
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.08.2014, 23:31 (Dieser Beitrag wurde zuletzt bearbeitet: 25.08.2014 11:02 von MaHa1976.)
Beitrag #27
RE: tageszeitabhängige Funktion
hm.... das von Seite 3 bekomme ich nicht ganz nachvolzigen bzw. bei mir so eingebastelt dass es läuft... Der Taster ist korrekt angeschlossen- funktioniert ja auch.... mit folgendem Code blendet die LED langsam schön langsam auf wenn der Taster gedrückt wird, und so bald man ihn losläßt blendet die LED wieder sanft aus... nach gleichem Schema habe ich quasi versucht die Hellgkeit konstant zu halten, bis "intervalldelay" abgelaufen wäre... klappt aber nicht...
Bei der 2. angezielten Helligkeit kann ich auch jede beliebige Helligkeit angeben, die dann gehalten wird- z.B. auch 255... dann wird die max. Helligkeit gehalten... also muss ich das nur 2 mal verwenden und eine Verzögerung dazwischen bekommen...

Ich schau mir deins noch mal genauer an- vielleicht verstehe ich es dann...

Code:
int led = 10;          
int brightness = 0;    
int fadeAmount = 5;
int ButtonPin = 2;
int Taste = 0;
int Sensor = 0;
int ValueSensor = 0;
int Empfindlichkeit = 180;
long previousMillis = 0;
long interval = 10;  
long intervaldelay = 1000;

void setup()
{
pinMode(led, OUTPUT);
pinMode(ButtonPin, INPUT);
}

void loop()
{
       unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval)
   {
       previousMillis = currentMillis;  
       ValueSensor = analogRead(Sensor);
       Taste = digitalRead(ButtonPin);
      
  if(((Taste == HIGH) && (ValueSensor >= Empfindlichkeit)) && (brightness < 255))
    {
    analogWrite(led, brightness);    
    brightness = brightness + fadeAmount;
    }
else  
  if((Taste == LOW) && (brightness > 10))
    {
    analogWrite(led, brightness);    
    brightness = brightness - fadeAmount;  
    }
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.08.2014, 23:46 (Dieser Beitrag wurde zuletzt bearbeitet: 22.08.2014 23:47 von Sascha.)
Beitrag #28
RE: tageszeitabhängige Funktion
int buttonState = 0;// die 0 bedeutet, das der startwert 0 ist
int counter = 0; //Zähler funktion, die dir beim umgang mit dem Taster hilft
int buttonStateHIGH = 0;
int brightness = 0;
int fadeAmount = 5;

long previousMillis = 0;
long interval = 5000; //5sekunden

int Led1 = 10;
int buttonPin = 8;

void setup() {
Serial.begin(9600); //sagt, dass du dir Werte auf derm serialmonitor anschauen kannst, mit einer übertragung von 9600
pinMode(buttonPin, INPUT);
pinMode(Led1, OUTPUT);
}

void loop(){

Serial.print("ZÄHLER");//Die "" nedeuten, dass der tect dazwichen im s.monitor zu sehen sein wird
Serial.println(counter);//der wert der Zählers wir auf dem s.monitor angezeigt

unsigned long currentMillis = millis();

buttonState = digitalRead(buttonPin);// buttonState, auslesen vom pin 8
if (buttonState == HIGH) //liegt Spannung am pin 8 an,
{ //dann
buttonStateHIGH = 1; //ist der buttonStateHIGH = 1
}
if (buttonState == LOW && buttonStateHIGH == 1)//ist pin 8 wieder low und buttonStateHIGH gleich 1 //alles zusammen bis hier heißt einfach nut, taster wurde gedrückt und losgelassen
{
counter++;//dann wir der counter +1 gerechnet, also 0von 0 auf 1 oder von 1 auf 2 usw
buttonStateHIGH = 0;//buttonStateHIGH muss wiedr auf 0 gesetz werden, da man sonst den knopf nicht wieder betätigen kann
}
/*if(counter==2){////der counter kann max bis 2 gehn, da er dann wieder auf 0 gesetzt wird
counter=0;
}*/ //brauchen wir für das bsp nicht

if( counter == 1 && brightness < 255 )
{
analogWrite(led, brightness);
brightness = brightness + fadeAmount;
counter =0;
}
Und das gleiche nochmal für den anderen wert, ist nicht gerade elegant aber sollte funtionieren


}

Hab das gerade am Tablet gemacht und konnte es nicht testen, hab hier nicht mal einen Editor, nur Word als kann sein, dass da einiges
nicht ganz richtig ist.
Mfg Sascha gute Nachte
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.08.2014, 07:11
Beitrag #29
RE: tageszeitabhängige Funktion
OK; also ch sehe zwar, dass der Status bzw. Änderungszustand des Tasters abgefragt wird...

Aber wo wird der Änderungsstatus genutzt um die Zeit zu triggern?

Ich möchte ja, dass das HIGH was der Taster setzt immer eine Zeit X gehalten wird- und das soll immer gestartet werden, egal wie lang das letzte HIGH her ist...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.08.2014, 09:18
Beitrag #30
RE: tageszeitabhängige Funktion
Aber wo wird der Änderungsstatus genutzt um die Zeit zu triggern?

Das habe ich dir überlassenWink
Ich wollte die nur zeigen, wie du einen Taster richtig abfragst ihm dann eine Funktion zuweist.
Die Funktion die er auslösen soll, hier willst du ja etwas mit Zeit machen, musst du noch schreiben und einfügen.
Ich habe jetzt auch leider keine Zeit um danach zu gucken, denn ich muss jetzt weg.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.08.2014, 10:00
Beitrag #31
RE: tageszeitabhängige Funktion
OK, danke schon mal für deine Hilfe. Das hat mich schon mal ein Stück weiter gebracht....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.08.2014, 10:58 (Dieser Beitrag wurde zuletzt bearbeitet: 25.08.2014 11:08 von MaHa1976.)
Beitrag #32
RE: tageszeitabhängige Funktion
Dank Hilfe bin ich mal noch etwas weiter... Es paßt aber die Reihenfolge nicht- ich sehe grad den Wald vor Bäumen nicht...

Bei Tastendruck blendet die LED auf, nach loslassen wieder ab...

Code:
// Konstanten
// Pins
const unsigned int led = 10;        // LED - später dann MOSFeT für Power-LED
const unsigned int ButtonPin = 2;   // Taster - später PIR- Sensor
const unsigned int Sensor = 0;      // Helligkeitssensor für UMgebungshelligkeit
// Fadingraster
const unsigned int fadeAmount = 1;  // Stufen im Fadingraster
// Richtwert Helligkeit
const unsigned int Empfindlichkeit = 20;  // anpassbare Helligkeitsschwelle
// Zeiten
const unsigned long interval1 = 1;   // Zeitraum zwischen Fadingstufen
const unsigned long interval2 = 30;  // Haltezeit der LED wenn
// Variablen
unsigned int brightness = 0;        // aktuelle Helligkeit der LED
unsigned int ValueSensor = 0;       // aktueller Helligkeitswert des Sensors
unsigned int Taste = 0;            // Status Taster
// Zeiten
unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 1;
unsigned long currentMillis1;
unsigned long currentMillis2;

void setup()
{
pinMode(led, OUTPUT);
pinMode(ButtonPin, INPUT);
}

void loop()
{
       unsigned long currentMillis1 = millis();
       unsigned long currentMillis2 = millis();
       ValueSensor = analogRead(Sensor);
       Taste = digitalRead(ButtonPin);
      
  if(((Taste == HIGH) && (ValueSensor >= Empfindlichkeit))
                      && (brightness < 255) && (currentMillis1 - previousMillis1 > interval1))
                                            // wenn die Taste gedrückt und es dunkel ist, die LED die max. Helligkeit
                                            // noch nicht erreicht hat, dann ->
    {  
    analogWrite(led, brightness);          // erhöhe die Helligkeit der LED ->
    brightness = brightness + fadeAmount;  // in den Schritten wie oben definiert
    previousMillis1 = currentMillis1;      // setze die Zeit wieder auf 0
    }

                                           // halte den aktuellen Helligkeitswert der LED für die oben definierte Haltezeit

  if((Taste == LOW) && (brightness > 2) && (currentMillis1 - previousMillis1 > interval1))  
                                           // die Taste ist nicht gedrückt und die LED ist an? ->
    {
    analogWrite(led, brightness);          // dann blende die LED wieder aus
    brightness = brightness - fadeAmount;  //blende in den oben definierten Schritten aus
    previousMillis1 = currentMillis1;      // setze die Zeit auf 0
}}

Ich werde einfach bei den delays bleiben- hier wird ja die Soße inzwischen teurer als der Braten. Man kann ja auch vor den Delays alle relevanten Zustände abfragen- und wenn alle Randbedingungen vorhanden sind um die Lampen einzublenden, dann ist das doch in Ordnung...

Alles andere mit dem Ersetzen der Delays ist doch nur Spielerei die mich nicht weiterbringen....

Wenn ich bedenke was ich jetzt schon an Zeit dafür investiert habe... und wenn ich mal durch das Forum schaue entdecke ich da keine vergleichbare Anwednung, die ohne delays arbeiten kann.

Auch in anderen Foren ist man soweit, dass man auf das Blinken ohne Delay verweisen kann... aber wie man das abaptiert auf andere Anwendungen hat da auch noch keiner geschaftt, wie es scheint.

Danke an alle, die versucht haben zu helfen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe beim Problem mit dem Delay raspido 11 2.857 14.06.2015 22:31
Letzter Beitrag: raspido
Wink Pulse Sensor Amped ohne Processing Sandmannn 16 3.730 18.02.2015 17:05
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


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