Go Down

Topic: for Ablaufsteuerung? (Read 956 times) previous topic - next topic

Niberium

hi

Ich hab ne ganz banale Frage.

kann mir jemand  in simplen laiendeutsch die for schleife erklären? ich versteh die funktion im Ptogrammierhandbuch nicht so wirklch.

ich will das er mir einen pin nur einmal als high liefert. also

for(?;digitalRead(pin1)==HIGH;?)
digitalWrite(pin2,HIGH);
delay(100);
digitalWrite(pin2,LOW);




das soll er mir nur einmal machen, obwohl der pin1 die ganze zet auf HIGH steht.

im vorraus schonmal vielen Dank

Gruß NIB

BKone

Hallo Niberium,

wäre da ein "if" nicht besser?
Wenn du das in der loop aufrufst sollte das doch passen, oder?


Gruß aus Düsseldorf

BKone

mmi

#2
Oct 28, 2009, 05:14 am Last Edit: Oct 28, 2009, 05:16 am by mmi Reason: 1
Ist es so, daß Pin2 während des gesamten Programmlaufs nur einmal für 100 msecs auf HIGH gesetzt werden soll (falls pin1=HIGH)?

Dann in "void loop()":
Code: [Select]

static boolean pin2OK = false;

if (pin2OK==false  && digitalRead(pin1)==HIGH) {
 pin2OK = true;
 digitalWrite(pin2,HIGH);
 delay(100);
 digitalWrite(pin2,LOW);
}


So, wie Du es beschreibst, sehe ich auch keinen Bedarf für eine loop. :-X

Niberium

#3
Oct 28, 2009, 10:10 am Last Edit: Oct 28, 2009, 10:13 am by Niberium Reason: 1
Hi

Also erst mal danke für die Antworten.

Ich glaub aber selber dass ne if nicht geht. ich beschreib vlt am besten noch mal was ich gena machn will.

also.
ich hab nen reed schalter. den betätige ich mit nem magnet der die ganze zeit draufbleibt bis ich ihn wieder wegnehmen will.

wenn jetzt der Magnet auf dem Reed ist dann hab, dann liefert das ein HIGH. den definier ich mal als pin1.
ich will jetzt erreichen dass solange der Reed schalter ein ist der nur ein einziges mal solange der magnet da drauf ist (also der Reed schalter an ist) der an einen anderen pin2
digitalWrite(pin2,High);
delay(50);
digitalWrite(pin2,LOW);


so. wenn ich jetzt ein if hab dann macht der das die ganze zeit. heist der triggert das ganze immer hin und her. mit if hab ichs nämlich schon versucht.

wenn ich dann den magnet wieder runternehm dann soll er mir nen 3.pin high liefern. wobei ich das gut mit ner if schleife machen kann.



wenn jetzt aber der magnet weg ist und der später irgendwann wider da drauf gesetzt wird soll der mir wieder den pin2
digitalWrite(pin2,High);
delay(50);
digitalWrite(pin2,LOW);

mit boolean kenn ich mich leider auch nicht aus. da hab ich absolut null ahnung.:-)
Cool wäre mal ein Buch: Arduinoprogrammieren für dummies.

Gruß NIB

MaFu

Vorschlag:

Code: [Select]

boolean lastState = false;

void setup()
{
 ...
}

void loop()
{
 int pinMode = digitalRead(pin1);
 if ((pinMode == HIGH) && !lastState)
 {
   lastState = true;
   digitalWrite(pin2, HIGH);
   delay(100);
   digitalWrite(pin2, LOW);
 }
 else if ((pinMode == LOW) && lastState)
 {
   lastState = false;
   digitalWrite(pin3, HIGH);
   delay(100);
   digitalWrite(pin3, LOW);
 }
}


Und nachdem das mit Arduino im Speziellen nichts zu tun hat, empfehle ich Dir folgendes Buch: http://www.amazon.de/für-Dummies-So-lernen-Sie-hohe/dp/3826629434
_______
Manfred

Niberium

genau so mann

echt klasse.
vielen vielen vielen dank!!!
funktioniert genau so wie ich wollt.

:-)

*freu*

Go Up