Forum: Mikrocontroller und Digitale Elektronik Bascom Motor mit Taster steuern


von (unknown) (Gast)


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!

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Taster, Motor, Bascom... - Habe ich hier mal gesehen:
Beitrag "Re: Eine kleine Frage zur Programmierung"

MfG

von (unknown) (Gast)


Lesenswert?

Vielen Dank für den Link. Aber da ich noch blutiger Anfänger in diesen 
Thema bin, hilft mir das nicht viel weiter...

von Karl H. (kbuchegg)


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 )

von (unknown) (Gast)


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

von Karl H. (kbuchegg)


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.

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.