Hallo Ich möchte mir mit einem ATmega32 eine Steuerung für ein Fahrgeschäft bauen. den Avr programmiere ich mit Bascom. Jetzt möchte ich, dass ich mit einem Taster den Motor so lange laufen lassen kann, wie ich den Taster drücke oder bis der Motor einen Endschalter schaltet. Ich habe scho versucht mit einer while-wend Schleife, dass hat aber nicht richtig funkioniert. Hat jemand einen Denkanstoss oder ein Programmschnipsel für mich?? Vielen Dank!
Taster, Motor, Bascom... - Habe ich hier mal gesehen: Beitrag "Re: Eine kleine Frage zur Programmierung" MfG
Vielen Dank für den Link. Aber da ich noch blutiger Anfänger in diesen Thema bin, hilft mir das nicht viel weiter...
Chris B. schrieb: > Taster drücke oder bis der Motor einen Endschalter schaltet. > Ich habe scho versucht mit einer while-wend Schleife, dass hat aber > nicht richtig funkioniert. > > Hat jemand einen Denkanstoss oder ein Programmschnipsel für mich?? Poste deinen Code! Im Prinzip ist dein Gedankengang ja gar nicht schlecht. Der Motor soll laufen, solange nicht gilt ( Taster ist losgelassen oder Endschalter ist erreicht ) Wahrscheinlich hast du dich irgendwo bei den UND ODER NICHT vertan. Das passiert schon mal, weil wir Menschen im täglich Leben bei derartigen Dingen sehr schlampig agieren. In diesem Zusammenhang ist auch der De'Morgan wichtig ( NICHT A ) UND ( NICHT B ) <==> NICHT( A ODER B )
Oke underdessen habe ich es selber geschafft.... Habe den Fehler selber gefunden. Habe vergessen den Endschalter ausserhalb der While-Wend Schleife vergessen abzufragen Hier der funktionierende Code
1 | Aufsteigen: |
2 | |
3 | Do |
4 | |
5 | While Taster_auf = 0 'Taster abfrage |
6 | Motor_start = 1 |
7 | If Stop_auf = 0 Then 'Endschalter abfrage |
8 | Motor_start = 0 |
9 | return |
10 | End If |
11 | Wend |
12 | |
13 | Motor_start = 0 |
14 | |
15 | If Stop_auf = 0 Then 'Endschalter abfrage |
16 | Motor_start = 0 |
17 | return |
18 | End If |
19 | If Stop_auf = 1 Then Exit Do |
20 | Loop |
21 | |
22 | Return |
zumindest solltest du den Code einrücken, damit man besser sieht, wie die einzelnen Verschachtelungsebenen sind:
1 | Aufsteigen: |
2 | |
3 | Do |
4 | |
5 | While Taster_auf = 0 'Taster abfrage |
6 | Motor_start = 1 |
7 | If Stop_auf = 0 Then 'Endschalter abfrage |
8 | Motor_start = 0 |
9 | return |
10 | End If |
11 | Wend |
12 | |
13 | Motor_start = 0 |
14 | |
15 | If Stop_auf = 0 Then 'Endschalter abfrage |
16 | Motor_start = 0 |
17 | return |
18 | End If |
19 | If Stop_auf = 1 Then Exit Do |
20 | Loop |
21 | |
22 | Return |
den letzten Teil deiner Funktion solltest du dir noch einmal genauer ansehen. Und auch die do - Loop ist ein wenig sinnlos, wenn sowieso auf jeden Fall aus der Loop ausgestiegen wird. M was spricht gegen
1 | Aufsteigen: |
2 | |
3 | if Stop_auf = 0 then ' Wenn das Rollo schon oben ist |
4 | return ' kann der Benutzer drücken soviel er will |
5 | endif ' wir kümmern uns nicht darum |
6 | |
7 | if Taster_auf = 0 then ' will der Benutzer nach oben? |
8 | Motor_start = 1 ' dann erfüllen wir ihm den Wunsch |
9 | else |
10 | Motor_start = 0 ' Nein? dann eben nicht |
11 | endif |
12 | |
13 | return |
Die Funktion ist so ausgelegt, (wie deine auch) dass sie von einer anderen Stelle regelmässig aufgerufen werden muss.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.