Forum: Mikrocontroller und Digitale Elektronik Arduino verkürzt Ausschalten?


von R6er R. (r6er)


Lesenswert?

Hey zusammen!

Ich komm gerade leider nicht bei meinem Sketch weiter, und zwar will ich 
das eine Led 50ms Sekunden aktiv ist sobald ein Taster betätigt wird, 
nun hab ich aber das Problem das er länger leuchtet wenn ich länger 
drück. Find leider keine Lösung gibt es soetwas wie eine Positive 
Flanke?
1
  buttonState = digitalRead(buttonPin);
2
  if ((buttonState == HIGH)&&(analogRead(A0)>512)) {        
3
    digitalWrite(ledPin, HIGH);  
4
    delay (0050);
5
    digitalWrite(ledPin, LOW);
6
  }


Ich hoffe ihr könnt mir helfen!

mfg

von Timmo H. (masterfx)


Lesenswert?

0050, wird das nicht als Oktal gewertet?

von R6er R. (r6er)


Lesenswert?

Das bedeutet? =D

von TobinatorXXL (Gast)


Lesenswert?


von Tom K. (ez81)


Lesenswert?

R6er Rj05 schrieb:
> gibt es soetwas wie eine Positive
> Flanke

Eine pos. Flanke bedeutet: "Vorher war das Signal low, jetzt ist es 
high."

Du musst Dir also den Zustand, den das Signal bei der vorherigen Abfrage 
hatte, merken und den aktuellen Zustand und den vorherigen auswerten.

: Bearbeitet durch User
von Panorama (Gast)


Lesenswert?

Setz ein "while(buttonState == HIGH);" dahinter, damit musst du den 
Taster loslassen bevor es wieder los geht.
Oder mal bei Entprellung: Softwareentprellung reinschauen.

von hexen (Gast)


Lesenswert?

pseudocode:
1
while(1)
2
{
3
  if(gedrückt)
4
  {
5
     blink_led;
6
    wait 50ms; // warte insgesamt mindestens 50ms wegen prellen undso
7
     while(nicht_losgelassen); //warte bis losgelassen
8
    wait 50ms; // warte wegen prellen undso
9
  }
10
11
}

von Cpp (Gast)


Lesenswert?

Oder um nicht sinnlos Rechenzeit zu verschwenden:
1
loop()
2
{
3
  static bool buton_pressed_old = false;
4
  
5
  bool buton_pressed_new = (digitalRead(buttonPin) == HIGH);
6
  if(buton_pressed_new && !buton_pressed_old)
7
  {
8
    // Do something if rising edge
9
  }
10
  buton_pressed_old = buton_pressed_new;
11
  
12
  // Do some other tasks
13
}

von Dirk K. (dekoepi)


Lesenswert?

Die static-Deklaration vor den loop. Dann kann das was werden. Den 
Unterschied 200 zu 50 ms sieht man wahrscheinlich nicht mal (Prellen).

von Cpp (Gast)


Lesenswert?

Dirk K. schrieb:
> Die static-Deklaration vor den loop. Dann kann das was werden.
Wieso das?

von Bastler (Gast)


Lesenswert?

Weil nicht jeder "static" versteht :-)
Und weil es im konkreten Fall egal ist, ob es in- oder außerhalb loop() 
steht. Und dann stellt einer eine "Gesetzmäßigkeit" fest. So wie bei den 
Störchen und den Baby's. Ist das eigentlich schon seriös widerlegt? :-)

von Cpp (Gast)


Lesenswert?

Bastler schrieb:
> Weil nicht jeder "static" versteht :-)
Top Argument ;-)
Mit dem "static" kann man aber unnötige globale Variablen verhindern.

von Ulrich F. (Gast)


Lesenswert?

static ist böse.
global ist böse.

Mit Bedacht eingesetzt, ist die Welt ok.

Aber oft handelt man sich mit den beiden Sorgen ein, die man ohne die 
beiden nicht hätte.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Bastler schrieb:
> Weil nicht jeder "static" versteht :-)

Ja, Idioten und Arduino-Programmierer verstehen static nicht. Worauf man 
wirklich keine Rücksicht nehmen muss.

von Bastler (Gast)


Lesenswert?

Ob Dirk K. ein solcher ist?
Ich glaube die nicht-Arduinos können das auch, das Halbwissenverbreiten.
BTW, hab mir selbst erst einige Nano's beim Chinesen geholt. Für 2,95 
bekomm ich keinen M328+USB-Chip auf eine Platine. Und gleich 
funktionieren tut's auch noch. Muß ja kein DigitalWrite() verwenden.

von chris_ (Gast)


Lesenswert?

>Muß ja kein DigitalWrite() verwenden.

Wieso nicht, ich verwende es gerne und oft. Außerdem bastle ich diese 
Funktion für jede neue Prozessorarchitektur, die mir über den Weg läuft.
Dank digitalWrite kann ich meine Programme von AVR bis Arm und sonst 
überall laufen lassen. Und wenn's zu langsam ist, nehme ich halt etwas 
anderes. Rechenzeit ist aber meistens nicht das Problem.

von Bastler (Gast)


Lesenswert?

Das war nur zur Abwehr der üblichen Vorurteile gemeint. Ich bin da 
zwiegespalten. Einerseits find ich manche Dinge nicht besonders hübsch 
gelöst, andererseits ist so eine Arduino Lib eben eine schnelle Lösung.

von chris_ (Gast)


Lesenswert?

>Einerseits find ich manche Dinge nicht besonders hübsch
>gelöst, andererseits ist so eine Arduino Lib eben eine schnelle Lösung.

So geht's mir auch. Ich sehe es genauso wie Du.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.