Bascom Motor mit Taster steuern

OP Gast #1763198
Lesenswert?

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!
#1763792
Lesenswert?

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 )
OP Gast #1763863
Lesenswert?

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
#1763875
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren