das a=109 kannste
durch
decr a
ersetzen
If A = 40 Then
A = 41
End If
durch
If A = 40 Then
incr a
End If
Hallo ihr
Habe mir jetzt Bascom-Demo runtergeladen, ISP-Adapter gebaut und am
Exp.-Board einen AT90S2313 aufgebaut.
Habe vorher noch nie mit uC-Programmierung und Basic zutun.
Nach ein paar tests mit Led an- aus bzw. Taster ein -aus ,usw,
habe ich folgendes programm geschrieben,Es funktioniert soweit , aber gibt es eine andere möglichkeit den Endausschlag zu begrenzen als die ,die ich programmiert habe ?Code:$regfile = "2313def.dat" $crystal = 4000000 Config Portb.3 = Output Enable Interrupts Config Servos = 1 , Servo1 = Portb.3 , Reload = 10 Dim A As Byte A = 75 Servo(1) = A Plus Alias Pind.4 Leer Alias Pind.5 Minus Alias Pind.6 Do If Plus = 0 Then Waitms 25 Incr A Servo(1) = A If A = 110 Then A = 109 End If End If If Leer = 0 Then Waitms 25 A = 75 Servo(1) = A End If If Minus = 0 Then Waitms 25 Decr A Servo(1) = A If A = 40 Then A = 41 End If End If Loop End
Ich verwende eine If ..then schleife , für den max. und min. Wert.
Sprich- ich sage zb. max. Wert ist max. Wert - 1.
wenn ich auf der Taste bleibe zählte der uC sich zu tote ,
kann man das anders lösen?
Komme ansonst mit Bascom gut zurecht, muss aber mein Englisch und Techn. Begriffe auffrischen.
Danke im vorraus Richard
das a=109 kannste
durch
decr a
ersetzen
If A = 40 Then
A = 41
End If
durch
If A = 40 Then
incr a
End If
Vor den Erfolg haben die Götter den Schweiß gesetzt
Hallo Richard,
versuchs doch mal mit
If Plus=0 and A<110 then
Waitms 25
incr A
Servo(1) = A
end if
Und schau Dir doch mal den Case-Befehl an, damit kann man auch so manche IF-Then-Schleife umgehen...
Viele Grüße
Torsten
stimmt, den case hab ich glatt übersehen,
der kann nochmal was bringen
der while ist auch ganz nett ... sauber .... besser so
Vor den Erfolg haben die Götter den Schweiß gesetzt
Z.B. die Zeit erhöhen. Wie soll es denn am Ende aussehen?wenn ich auf der Taste bleibe zählte der uC sich zu tote ,
kann man das anders lösen?
Es gibt sicherlich noch eine andere Lösung, aber die sollte dir auch gefallen.
Wenn du If A = 110 Then A = 109 schreibst, kannst du dir ein End If sparen. Somit wird es evtl übersichtlicher. Aber das ist auch immer Geschmackssache.If A = 110 Then
A = 109
End If
Könnte auch vor dem Loop stehen. In der Schleife wird ja nicht weiter gemacht als zu prüfen, welcher Taster gedrückt wurde und den Servo zu stellen.Servo(1) = A
Wenn das stellen am Ende der Schleife steht, sparst du dir etwas Code.
Genau wie das Waitms. Pro Durchlauf kann ja nur ein Taster gedrückt werden.
Do
If Plus = 0 Then Incr A 'erst alle Möglichkeiten abfragen
If Leer = 0 Then A = 75
If Minus = 0 Then Decr A
If A = 110 Then A = 109 'dann Werte begrenzen
If A = 40 Then A = 41
Servo(1) = A 'am besten erst die Aktion und dann die Pause
Waitms 25 'sonst hat der Benutzer ggf das Gefühl es passiert ja garnichts
Loop
So könnte man es auch machen. Das spart noch mehr Code.
Als ich angefangen habe zu schreiben, gab es noch keine Antworten. Und jetzt schon so viele.
Ist es nicht einfacher und vom Programmablauf schneller A einen Wert zu geben als eine Rechenoperation auszuführen?das a=109 kannste
durch
decr a
ersetzen
@ all
Ja das mit den Befehlen , habe sie noch nicht durch gearbeitet.
Sinn des Programmes ist lernen, einfach mal probieren, für die Programmstrukturierung -dafür habe ich noch kein gefühl wann
bzw. wo ich es platziere. Aber es ist ja schon ermutigend gewesen
das es fast auf anhieb funkt. hat.
Den Case -Befehl werde ich mir jetzt vornehmen und ein kleines Versuchsprogramm schreiben.
Die nächste grössere Sache für mich ist die Ansteuerung eines Schrittmotors, auch wieder mit Taster (Plus, Leer , Minus).
@ Marco78
Wie meinst Du das mit A einen Wert geben, wollte mit den Tastern erreichen das das Servo bei einem Tastendruck um einen Schritt weiter-
dreht. Habe es auch erreicht aber das an der Endlage schien mir noch nicht so 100%. Hoffe ich habe deine Frage richtig verstanden?
Danke an alle für die Tipps und Vorschläge.
Richard
Damit meinte ich Vitis.Wie meinst Du das mit A einen Wert geben,
Wie sich ein Servo am µC verhält weiss ich nicht. Ich weiss auch nicht, ob es so günstig ist, den Wert jedesmal in der Schleife zu übergeben, auch wenn er sich nicht geändert hat.
Aber zumindest kann man das Prinzip wie ich es nochmal geschrieben habe auf andere Situationen anwenden.
Das mit der Endlage kann ich so nicht nachvollziehen. Aber hier gibt es bestimmt einige die sich mit Servos auskennen.
Lesezeichen