Go Down

Topic: Programm mit Schalter und LED (Read 2 times) previous topic - next topic

ardi

Also Leute ich komme nicht drauf weil ich in while und so nicht so geübt bin. Diesen Sketch habe ich mit hilfe von Jemand anderem gemacht aber das Funktioniert nicht. Könntet ihr mir einfach den Sketch sagen daraus kann ich dann lernen.

uwefed

#16
Jan 13, 2013, 12:11 pm Last Edit: Jan 13, 2013, 12:28 pm by uwefed Reason: 1
hallo ardi
Code: [Select]
boolean schalter = false;
while ( schalter == false)

so geschrieben entspricht das einem
Code: [Select]
while(1)
weil durch die Deklaration in der vorhergehenden Zeile die Variable "schalter" immer false ist und die while-Bedingung immer wahr ist.

Code: [Select]
zaehler++;
liegt außerhalb der while Schleife und wird deshalb bei jedem Durchlauf des Loop erhöht unabhängig von der Tasterbetätigung.

Sieh Dir mal dieses Beispiel an wie dort ein LEd durch Tasterdruck ein bzw Ausgeschaltet wird.
http://danthompsonsblog.blogspot.it/2011/12/arduino-push-button-onoff-example.html

Grüße Uwe

ardi

Das weiß ich schon und ich kann auch schon die grunddinge mit if und so aber mir ist der syntax dann nicht klar

uwefed


Das weiß ich schon und ich kann auch schon die grunddinge mit if und so aber mir ist der syntax dann nicht klar

Welche Syntax?

ardi

Ja wie man das genau schreibt, klingt einbischen doof :) aber ich meine das geanue Komma und wann man was einsetzt

uwefed

Du meinst die syntax des IF?
http://arduino.cc/en/Reference/If
Grüße Uwe

Rene_Merten

#21
Jan 14, 2013, 01:51 am Last Edit: Jan 14, 2013, 09:29 am by Rene_Merten Reason: 1
Hy,

also die Reference ist super. Ich habe die neben den Programm immer offen. Ich fange auch gerade erst damit an. Mach erst mal wie ich mit einfachen Programme, ohne was rein zu kopiren. Wenn man dann von sein eigenes Programm den Ablauf verstanden hat, erweitere es nach und nach. Dann verstehst Du auch die Zusammenhänge.

Ich saß heut mit meinem Dad auch nen halben Tag an einem simplen Timer. Und egal. Funktioniert nun.

Nicht bös gemeint, aber die anderen haben Recht, learning by doing. Und nicht by copying.

LG.

PS: Finde den Link von uwefed garnicht verkehrt für dein Vorhaben. :)

ardi

Nicht if, while macht mir schwierigkeiten und dann das zusammenfügen mit den anderen Programmteilen und wegenb dem Lernen:
Ich lerne indem ich einen Code sehe und ihn durch gehe. Und das mit dem Taster ist nur ein Stück in einem Größerem Programm das ich schreibe
werde. ICh kann es jetzt nicht einfach so machen denn Ich habe den "nerv" nicht dazu :)
Könnte mir einfach jemand den Code bzw. einen leichten Anhaltspunkt (sehr leichten) zeigen, bitte :smiley-sad-blue:

lgrube96

Hallo ardi,

also eigentlich ist while gar nicht so schwer! Klar anfangs ist alles immer mal etwas "kompliziert".
Jetzt zu while:
Code: [Select]

while(solange irgendetwas bestimmtes passiert oder gleich ist, Bsp. wenn ein boolean true liefert)
{
      tue etwas bestimmtes solange die Angabe zutrifft.
}

Ist jetzt nicht gut erklärt, aber hoffe du kannst damit was anfangen !
Zu dem Sketch habe ich leider jetzt keine Zeit!
Aber ich kann dir schon zustimmen, dass man wirklich oft gut durch Beispiele lernt.
Aber bei so einer mittelschweren Aufgabe für Anfänger solte man das eventuell auch selber hinbekommen. Einfach mal alles durchgehen, was genau passieren muss !

Grüße
Lorenz

uwefed

Quote
Nicht if, while macht mir schwierigkeiten

Dann sag es doch einfach.  8) 8)

"While" heißt "solange"

Solange die Bedingung hinter while wahr ist wird der Anweisungsblock durchgeführt.
Beispiel
while (a<5)
{
Anweisungen;
}
also solange die Variable a kleiner als 5 ist werden die "Anweisungen;" ausgeführt.

Sonderformen:
while(1) ist eine unendliche Schleife.

do while
Ist ähnlich wie While nur wird die Bedingung am Ende kontrolliert und somit die "Anweisungen;" mindestens 1 mal durchgeabeitet:

do{
Anweisungen;
} while (a<5)

In der while-Bedingung kann alles das stehen, was auch als Bedingung in einer if-Anweisung stehen kann.

Bei while gibt es kein else.

http://arduino.cc/en/Reference/While
http://arduino.cc/en/Reference/DoWhile

Grüße Uwe

lgrube96

Uwe hat natürlich da eine super Beschreibung abgeliefert.
Ach...wollt noch kurz was hinzufügen, diese Funktio mit einer while Schleife und do nennt man auch kopfgesteuerte Schleife/ Funktion! Den Rest hat Uwe ja dazu erläutert!

Rene_Merten

#26
Jan 14, 2013, 10:42 pm Last Edit: Jan 14, 2013, 10:53 pm by Rene_Merten Reason: 1

Quote
Nicht if, while macht mir schwierigkeiten

Dann sag es doch einfach.  8) 8)

"While" heißt "solange"

Solange die Bedingung hinter while wahr ist wird der Anweisungsblock durchgeführt.
Beispiel
while (a<5)
{
Anweisungen;
}
also solange die Variable a kleiner als 5 ist werden die "Anweisungen;" ausgeführt.

Sonderformen:
while(1) ist eine unendliche Schleife.

do while
Ist ähnlich wie While nur wird die Bedingung am Ende kontrolliert und somit die "Anweisungen;" mindestens 1 mal durchgeabeitet:

do{
Anweisungen;
} while (a<5)

In der while-Bedingung kann alles das stehen, was auch als Bedingung in einer if-Anweisung stehen kann.

Bei while gibt es kein else.

http://arduino.cc/en/Reference/While
http://arduino.cc/en/Reference/DoWhile

Grüße Uwe



Wo ist der gefällt mir Button.?

Der Uwe hat da ein Händchen für, sowas zu erklären.  ]:D

Und genau das mag ich an diesen Forum. Man bekommt es verständlich erklärt. Ich finde so eine Erklärung besser, als wenn mir jemand den passenden Code gibt, weil ich es so verstehe, was das bedeutet, und versuch es selbser umzusetzen.

blubb113

Da ihr gerade von Schleifen redet, könnte mir wer vielleicht den Unterschied erklären, beziehungsweise, wofür es denn gleich 3 Schleichen braucht? Ich mein, wofür while/do while, wenns auch for gibt(oder umgekehrt halt)

Ich weiss nicht warum, hatte früher immer Mühe mit dem while, dabei ist es noch simpler als for.

mkl0815

#28
Jan 16, 2013, 02:45 pm Last Edit: Jan 16, 2013, 02:47 pm by mkl0815 Reason: 1
FOR ist eine "zählende" Schleife mit einer in der Regel definierten Anzahl von Durchläufen bei der Du einen Zählindex verwendest der erhöht oder verringert wird bei jedem Durchlauf.

Code: [Select]

//zählt von 0 bis 9
for (int i=0;i<10;i++) {
 Serial.println(i,DEC);
}


WHILE ist eine "kopfgesteuerte" Schleife, die nur an eine (oder auch mehrere) Bedingung geknüpft ist, welche die Schleife steuern. Man verwendet diese Schleife wenn z.B. die Anzahl der Durchläufe nicht vorher klar ist.
Code: [Select]

while(Serial.available()) {
 int data = Serial.read();
 //mach irgendwas mit data
}


DO WHILE ist eine "nicht abweisende" Schleife, da der auszuführende Block zuerst steht, wird die Schleife IMMER mind. einmal durchlaufen, weil erst am Ende geprüft wird ob die Abbruchbedingung erfüllt ist. Im Gegensatz um WHILE, wo schon am Anfang geprüft wird und ggf. die Schleife gar nicht durchlaufen wird.

Code: [Select]

do {
Serial.println("Ich werde immer ausgegeben!!");
} while (false);

blubb113


FOR ist eine "zählende" Schleife mit einer in der Regel definierten Anzahl von Durchläufen bei der Du einen Zählindex verwendest der erhöht oder verringert wird bei jedem Durchlauf.

Code: [Select]

//zählt von 0 bis 9
for (int i=0;i<10;i++) {
 Serial.println(i,DEC);
}


WHILE ist eine "kopfgesteuerte" Schleife, die nur an eine (oder auch mehrere) Bedingung geknüpft ist, welche die Schleife steuern. Man verwendet diese Schleife wenn z.B. die Anzahl der Durchläufe nicht vorher klar ist.
Code: [Select]

while(Serial.available()) {
 int data = Serial.read();
 //mach irgendwas mit data
}


DO WHILE ist eine "nicht abweisende" Schleife, da der auszuführende Block zuerst steht, wird die Schleife IMMER mind. einmal durchlaufen, weil erst am Ende geprüft wird ob die Abbruchbedingung erfüllt ist. Im Gegensatz um WHILE, wo schon am Anfang geprüft wird und ggf. die Schleife gar nicht durchlaufen wird.

Code: [Select]

do {
Serial.println("Ich werde immer ausgegeben!!");
} while (false);



Ach so, vielen Dank für die Aufklärung  :)

Go Up