Hallo Leute,
Ich programmiere einen Plotter, der über einen ATMega32 gesteuert wird.
Der Plotter kann bereits Großbuchstaben, Zahlen und ein paar
Sonderzeichen schreiben. Nun sollen auch die Kleinbuchstaben
implementiert werden. Der Plotter wird über einen Terminal via
RS232-Schnittstelle angesteuert.
Nun zu meiner Frage: wie schaffe ich es, dass der Controller
Kleinbuchstaben akzeptiert, die er über den Terminal als Input bekommt?
Ich versteh die Frage nicht.
Dem Mega ist es ja letztendes egal, welche Bytes da über die
Schnittstelle kommen und ob das Groß oder Kleinbuchstaben oder sonst was
sind. Byte ist Byte und wenn es mit einem Vergleichswert übereinstimmt,
dann wird die entsprechende Routine angesprungen (oder wie auch immer du
das gemacht hast)
Naja ich arbeite mit dem Programm Bascom, und der Controller bekommt
über eine Input Funktion über den Terminal seinen Buchstaben. Die
Buchstaben etc. sind alle als Sub im Programm enthalten. Die Sub für A
heißt also Sub A. Aber sobald ich Sub a erzeugen will, geibt mir Bascom
den Fehler aus, dass es das bereits gibt.
ich hoffe, Du definierst nicht für jede Zahl und jeden Buchstaben einen
String oder?
Poste Doch mal Deinen Code, dann kann Dir geholfen werden ...
avrGerd
Hm, verdammtes Bascom, habt ihr eine Idee wie ich das lösen kann?
Und ja, ich generiere für jeden Buchstaben etc einen String, da ja jeder
Buchstabe über den Terminal eingegeben werden soll.
Gorn schrieb:> Hm, verdammtes Bascom,
das Problem sitzt VOR dem PC !
du hast nicht verstanden was du programmierst
kleine starthilfe:
Dim C41 as string *2 ' GROSSES A
Dim C61 as string *2 ' kleines a
ist nur ein tip, aber poste mal dein programm,
alles andere ist wieder "Glaskugelraten"
vlG
Charly
Schön und gut, der Plotter, der von dem Mega kontrolliert wird, wird
über einen Pc mittels RS232 gesteuert. In den Terminal soll aber einfach
nur der Buchstabe getippt werden, der auch geschrieben werden soll.
Das Programm hat 2000 Zeilen, ich hängs mal an
uiuiui ... sonderlich elegant ist das nicht gelöst ...
Da kann jetzt Bascom echt nix dafür.
Prinzipiell kannst Du aber deine Subs
a_gross
oder
a_klein
benennen und Deine Strings dann äquivalent
a_gross_string
a_klein_string
Ich hätts mit Data und Restore gemacht, aber so gehts auch ... nur
aufwändiger
Hi Gorn,
exakt. Du benutzt diese Variablen ja garnicht. Also brauchst Du sie
nicht definieren.
Hier benutzt Du ja die varialble "Buchstabe". Zum Vergleich mit "A"
musst Du A nicht definieren.
<snip>
Select Case Buchstabe
Case "A"
Aa
Goto Start
...
<snip>
Gruss,
avrGerd
Sehr genial, danke, jetzt funktioniert es
Mir ist gerade aufgefallen, dass da noch etwas wäre, das zu lösen wäre:
Über den Terminal wird jedesmal nur ein Buchstabe etc eingegeben, und
dann nach einem Enter sozusagen an den Controller gesendet wird.
Wie schaffe ich es, dass der Text komplett eingegeben werden kann, und
erst dann komplett geschrieben wird?
Aber das ist doch einfach gesagt Murks (sorry, falls ich Dich beleidigt
haben sollte, war nicht meine Absicht), für jeden Buchstaben eine Sub zu
definieren. Das macht man besser mit Arrays oder noch besser mit
Data-Zeilen. So könnte man das machen:
1
'Steuercodes: 0 = bewegen zur absoluten Position (2 Bytes folgen),
Leider nicht, habe in der Schule nicht aufgepasst, lag aber am Leherer,
wir haben lieber gezockt als ihm zuzuhören :D
Der Flash ist groß genug um das abzuspeichern, und zumindest die Subs
verstehe ich
Gorn schrieb:> Leider nicht, habe in der Schule nicht aufgepasst, lag aber am Leherer,> wir haben lieber gezockt als ihm zuzuhören :D
Dann solltest du das nochholen.
Das was du da machst, ist doch Unsinn. Spätestens dann, wenn es darum
geht, dass der Text gedreht werden muss oder größer kleiner geschrieben
werden muss, ist die Kacke am Dampfen.
> Der Flash ist groß genug um das abzuspeichern, und zumindest die Subs> verstehe ich
Das ist kein Grund, die Grundlagen nicht lernen zu wollen.
Im übertragenen Sinne bewirbst du dich gerade in einem Ingenieurbüro und
die testen dich mit ein paar einfachen Rechnungen. Wieviel ist 4 mal 5
und du rechnest
5 1 mal 5
5 2 mal 5
----
10
+ 5 3 mal 5
----
15
+ 5 4 mal 5
----
20
Klar kommt hinten das Richtige raus. Aber nehmen werden sie dich
trotzdem nicht. Denn der gegenübersitzende Personalchef überlegt gerade
fieberhaft, wie du wohl 6528 * 8723 rechnen würdest.
Und hier hast du genau die gleiche Situation. Bei 1 oder 2 Dingen, die
dein Plotter können soll, kann man das so machen. Aber in der Menge, in
der Menge eines kompletten Fontes ist das dann einfach nur noch Unsinn.
Anstatt dich da mit viel Enthusiasmus und noch mehr Arbeit in das
Abenteuer Plotter zu stürzen, solltest du dir erst einmal die
wichtigsten Grundlagen von Datenhaltung in BASCOM aneigenen. So viele
sind es dann ja auch wieder nicht, BASCOM ist da ohnehin sehr sparsam
mit dem Gebotenen. Aber wenn du zumindest das was möglich ist
beherrscht, sparst du dir 70% deiner jetzigen Tipparbeit UND du bist
gleichzeitig noch universeller UND kannst besser auf Anforderungen (wie
zb gedrehter Text, wie zb verschiedene Fontgrößen) reagieren.
Gorn schrieb:> Sehr genial, danke, jetzt funktioniert es>> Mir ist gerade aufgefallen, dass da noch etwas wäre, das zu lösen wäre:>> Über den Terminal wird jedesmal nur ein Buchstabe etc eingegeben, und> dann nach einem Enter sozusagen an den Controller gesendet wird.> Wie schaffe ich es, dass der Text komplett eingegeben werden kann, und> erst dann komplett geschrieben wird?
Das Zauberwort heißt String, der als ganzes übertragen wird und den dein
Programm dann Buchstabe für Buchstabe durchgeht und den jeweiligen
Buchstaben malt.
Mal ehrlich: Du willst einen Plotter bauen? Lern doch erst mal die
allereinfachsten Grundlagen!
Hi,
Zu Deiner Frage:
Du machst das mit dem Befehl "INPUT Buchstabe" schon ganz richtig.
Hier kannst Du 10 Zeichen eingeben, welche im String Buchstabe
gespeichert werden. Die Anyahl von 10 Zeichen hast Du ja definiert.
Nach dem Enter werden dann alle Zeichen gesendet und in Buchstabe
gespeichert.
Vor dem "Select Case Buchstabe" muss Du nun den String wieder in
Buchstaben zerlegen. Das kann man auf vielen Wegen machen z.B. mit dem
Befehl MID.
Oder Du benutzt eine Overlay Variable und greifst mit einem Zähler auf
die einzelnen Zeichen zu.
Gruss,
avrGerd
Na, na,
nun zerreist ihn doch nicht gleich in der Luft.
Er hat ja nicht gesagt, dass er das Ding verkaufen will.
Ich bin mal Optimist und sage mir, Gorn will hier eine Hardware die er
rumliegen hat irgendwie zum Laufen bringen und auch noch was lernen.
Am Anfang haben wir Alle mal so einen Mist gemacht und uns später
gesagt:
Wie konnte ich damals nur ...
Spätetestens wenn der Flash voll ist und er noch viele Features einbauen
will muss er sich was Neues ausdenken.
Lass Dich nicht entmutigen, auch aus Fehlern kann man lernen.
avrGerd
Gibts da irgendein Tutorial zu diesem Thema? Ich habe da bisher noch nix
anständiges gefunden. Wäre natürlich cool, wenn man die Schriftgröße
einfach ändern könnte.
Und wie schaffe ich es, dass ich die Buchstaben nicht nur einzeln
eingeben muss, sondern den ganzen Text tippen kann.
In Gurgel (Auch bekannt als Guhgl xD) findet man da vieles. Das mit dem
ganzen Text geht so: Du liest einen String ein und arbeitest diesen dann
Zeichenweise ab. Mehr steckt da nicht dahinter.
Beispiel:
Müsste das dann in etwa so aussehen:
Input Buchstabe
Buchstabe_split = MID(Buchstabe, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
soweit verstehe ich es inzwischen, wie es weitergeht ist mir allerdings
immernoch ein rätsel
Der Bayer schrieb:> Na da stand doch eben noch ein langer Text von Kalle dem Meister .> Den fand ich schon gut,>> jetzt ist er weg; die Macht des Moderators ?
:-)
Ja.
Ich habs mir anders überlegt und den Text zurückgezogen.
Ich finde nämlich die Diskrepanz zwischen dem Niveau der Fragen hier und
dem Programmtext im 11. Posting ganz erstaunlich :-) Leider hab ich mir
das Programm dann erst nach dem Posten genauer angesehen. Und jetzt bin
ich neugierig wie es weitergeht. An meiner Meinung, die du offenbar
gelesen hast, ändert sich allerdings noch nichts.
Den Plotter muss ich ja auch gar nicht mehr bauen, der steht bereits
neben mir und funktioniert an sich einwandfrei, war sogar bei
Jugend-Forscht mit 2 Kumpeln, ich will ihn jedoch noch etwas verfeinern
bis zu Langen Nach der WIssenschaften, wo wir auch dabei sind
Achso, weils mir gerade einfällt, der Plotter ist recht massiv aus Alu
gebaut, besteht aus 2 Achsen, die jeweils von einem Schrittmotor bewegt
werden. Der Stift wird mittels eines Servos rauf und runter bewegt. Das
Problem an der ganzen Sache ist, dass der Plotter nicht so perfekt genau
schreiben kann, liegt an der Trägheit der Achsen. Ursprünglich wollten
wir ihn mit hpc (ich glaube so hieß es) das ist eine Sprache für Plotter
steuern, das geht nur leider nicht wegen der Trägheit.
Die Sprache heißt HPGL und die Trägheit der Achsen hat damit erst mal
gar nichts zu tun sondern wirkt sich nur auf die Verfahrgeschwindigkeit
aus. Die wiederrum wirkt sich so aus, dass der Plotter eingehende
Zeichen in einem Buffer zwischenspeichern muss, während er bereits
erhaltene Befehle abarbeitet. Und da so ein Speicher bei etwas größeren
Zeichnungen überzulaufen droht muss man sich dann Gedanken um Handshake
an der Schnittstelle machen.
Das hat jetzt allerdings alles nichts mit Zeichenverarbeitung mittels
BASCOM zu tun. Hast du denn die Befehle, die Johnathan da oben
eingesetzt hat, schon mal in der Hilfe nachgeschlagen?
Oder wenigstens mal nach einem BASCOM Tutorial gegoogelt, in dem auch
Basics in String und Zeichenverarbeitung vorkommen?
Input Buchstabe
Laenge = Len(Buchstabe)
For Zeichennummer = 1 To Laenge
Buchstabe_Split = Mid(Buchstabe , Zeichennummer , 1)
Select Case Buchstabe_Split
Case "A"
Aa
Goto Start
...
Case Else
Print "Falsch!"
Goto Start
End Select
Next Zeichennummer
So habe ich das jetzt mal gelöst, ist das insofern richtig? Bascom
meldet zumindest keinen Fehler
streiche bitte ganz schnell den Befehl "Goto" aus Deinem
Repertoire ... Wenn man einmal anfängt damit im Programm
herum zu springen kommen die Lustigsten Fehlfunktionen
dabei raus und der Code ist praktisch nicht mehr zu debuggen.
Verwende Schleifen
For - Next
While - Wend
Do - Loop
Verzweigungen
If - Then
Select - Case
und für Unterprogramme
Gosub - Return
oder Call
Und bitte bitte schlag mal in der Bascom Hilfedatei nach ... oben im
Menü im Fenster von Bascom "Help" klicken ...
Hallo Gorn,
ich beobachte deinen Beitrag nun schon einige Zeit und beim Querlesen
stelle ich fest, dass du in Bascom nicht sehr kundig bist.
Ich würde mich selbst als "alten Bascom Hasen" bezeichnen obwohl
ich zugeben muss, dass ein kleines Inline-Asssebler dem prozessor
dann auf die Sprünge helfen könnte.
Ich erkläre mich bereit dir zu helfen wenn du mir sagst welche Version
von Bascom du derzeit benutzt und ob deine Version eine Kaufversion
ist oder ob du die kostenlose Testversion verwenden willst.
Irgendwo in deiner Kette von Fragen hast du sogar erwähnt, es hätte
irgendwas mit "Jugend forscht" zu tun.
Überlege es dir,
was deine ehrliche Antwort sein wird und sag mir Bescheid.
Liebe Grüsse
Klaus de Lisson
Servus Klaus,
momentan nutze ich Version 2.0.2.0. ist die Kaufversion, hat aber die
Schule gezahlt. Ja bei Jugend Forscht waren wir mit dem Plotter dabei.
Hallo Gorn,
das ist ja schonmal ein gutes Zeichen dass ihr die Vollversion habt.
Freut mich.
Ich sehe mir dein Programm dann im Laufe des Tages oder Abends mal
genauer an
und poste dann mal eine Alternative.
Gruss Klaus de Lisson
Hi Gorn,
wie versprochen habe ich mir deinen Bascontext mal genauer angesehen.
Irgendwie bin ich selber im Zweifel wo ich da ansetzen sollte.
Deshalb fange ich mal klein an und kritisiere zunächst deine
Hauptschleife.
Das ist die, die du immer mit Goto anspringst (START)
Die ganzen GOTO wird man eigentlich ganz einfach los.
Eine Hauptschleife ist eigentlich immer so :
Do
Loop
end
.... und hier kommen die Unterprogramme
Nun ist es so dass das Programm immer von Do nach Loop geht.
Das "end" ist eigentlich unwichtig und wird ja niemals erreicht.
Sinnvoll wird es aber dann, wenn dein Programm mal ausser Kontrolle
gerät und die Grenzen dann überspringt.
deshalb ist ein END immer zu setzen.
Zudem habe ich gesehen dass du am Anfang des programmes sehr viele
"Declare Sub" verwendest.
Diese sind eigentlich überflüssig und nur dann sinnvoll wenn du an das
Unterprogramm Werte (variablen ) übergeben willst.
Es macht alo nur bei
Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Position As
Byte)
Declare Sub Rnb_servob(byval Servonummer As Byte , Byval Position As
Byte)
einen Sinn.
Bei all den anderen stört es nicht aber der Sinn ist nicht da.
Der Unterschied der sich ergibt wenn du "Declare Sub" einfach weglässt
ist der, dass du beim Aufruf des SUB nicht einfach schreiben kannst
Case "A"
Aa
ohne ein Declare würde es dann heissen:
Case "A"
Gosub Aa
und das Unterprogramm Aa hätte nicht den Namen Sub Aa
sondern einfach
Aa:
hier dein prog
return
Hier also ein Beispielprogramm:
$regfile = "m32def.dat"
Dim Buchstabe As String * 10
'----------------------------------------
Do
Print "Bitte Buchstaben eingeben. "
Input Buchstabe
Select Case Buchstabe
Case "A"
Print "gross A"
Case "a"
Print " klein A"
Case "u"
Gosub Unterprogramm
End Select
Wait 1
Print "ich warte "
Loop
End
Unterprogramm:
Print "nun bin ich unten "
Return
Bitte schreib mir, ob du es verstehst und bearbeite dein
altes programm adequat.
Gruss Klaus
Gorn schrieb:> Soweit habe ich alles verstanden, Programm ist bereits komplett> überarbeitet
Dann zeig her !
Das war doch erst der Anfang , oder ?
Gruss Klaus de Lisson
Kann man.
Das Problem: Damit das Sinn macht müsste man die komplette Struktur
verändern. Die Beschreibung dessen, wie ein Buchstabe auszusehen hat,
müsste man in DATA Zeilen kodieren und EINE Subroutine arbeitet den
entsprechenden DATA Satz ab und erzeugt aus dieser Beschreibung die
Bewegungen. So wie eine Drehorgel auch nur EiNEN Mechanismus hat, der
durch unterschiedliche Daten (in Form von Lochscheiben) auf verschiedene
Lieder programmiert wird.
Der Vorteil: Dein Programm magert sofort auf 1, vielleicht 2
Bildschirmseiten ab und das hinzufügen von neuen Buchstaben ist einfach
nur ein ergänzen der Abfahrbeschreibung in der DATA Section.
Aber das soll dir Klaus erklären, wie man das machen kann.
Karl Heinz Buchegger schrieb:> Aber das soll dir Klaus erklären, wie man das machen kann.
Warum denn das ? das wird ja richtig anstrengend . (smile)
k.
Klaus De lisson schrieb:> Karl Heinz Buchegger schrieb:>> Aber das soll dir Klaus erklären, wie man das machen kann.>> Warum denn das ? das wird ja richtig anstrengend . (smile)
Du hast dir die Frage selbst beantwortet.
(Ausserdem nehm ich ihm die Sache mit Jugend forscht nicht ab. Jemand
der dort teilnimmt, hat in 3 Nächten alle am Web verfügbaren BASCOM
Tutorials durch und deshalb Ringe unter den Augen. So einer weiß mehr
über BASCOM als du und ich zusammen. Ist aber nur meine persönliche
Meinung)
Karl Heinz Buchegger schrieb:> (Ausserdem nehm ich ihm die Sache mit Jugend forscht nicht ab. Jemand> der dort teilnimmt, hat in 3 Nächten alle am Web verfügbaren BASCOM> Tutorials durch und deshalb Ringe unter den Augen. So einer weiß mehr> über BASCOM als du und ich zusammen. Ist aber nur meine persönliche> Meinung)
Ja , aber das wäre doch eigentlich auch egal, oder ?
Bisher hat es doch auch kaum Arbeit gemacht und Gorn ist ein
Stück weiter gekommen.
Klaus
Karl Heinz Buchegger schrieb:> (Ausserdem nehm ich ihm die Sache mit Jugend forscht nicht ab. Jemand> der dort teilnimmt, hat in 3 Nächten alle am Web verfügbaren BASCOM> Tutorials durch und deshalb Ringe unter den Augen. So einer weiß mehr> über BASCOM als du und ich zusammen. Ist aber nur meine persönliche> Meinung)
Wir waren bei Jugend Forscht dabei, aber das war nur so ein kleines
extra, neben dem Robotik-Seminar in der 11. und 12. Klasse (scheiß G8
und so...)
deshalb hatten wir anderthalb jahre zeit für den ganzen Scheiß
Der Anwendungsfall ist ideal für Restore, Read und Data.
Die ganzen Subs kann man sich sparen.
Die Zeichen würde ich anhand des ASCII Codes ermitteln. In den
Datazeilen dann jeweils codiert, welche Aktion wie oft ausgeführt werden
soll.
Ein Vorschlag, wie ich beginnen würde: (Prinzipprogramm(Den Eingang
würde ich puffern))
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 38400
$hwstack = 64
$swstack = 64
$framesize = 64
Dim Zeichen As Byte
Dim Dauer As Byte
Dim Befehl As String * 1
Dim I As Byte
Do
If Ischarwaiting() = 1 Then
Gosub Empfangen
End If
Loop
End
Empfangen:
Zeichen = Waitkey()
Gosub Auswerten
Return
Auswerten:
Select Case Zeichen
Case 45
Restore Asc45
Case 46
Restore Asc46
Case 47
Restore Asc47
Case Else
Return
End Select
Do
Read Dauer
If Dauer > 0 Then
Read Befehl
For I = 1 To Dauer
Select Case Befehl
Case "r"
Gosub Rechts
Case "u"
Gosub Hoch
Case "l"
Gosub Links
Case "d"
Gosub Runter
Case "m"
Gosub Motorlinks
Case "n"
Gosub Motorrechts
End Select
Next I
Else
Return
End If
Loop
Return
Rechts:
Return
Hoch:
Return
Links:
Return
Runter:
Return
Motorlinks:
Return
Motorrechts:
Return
Asc45:
Data 20 , "u" , 10 , "l" , 20 , "m" , 20 , "r" , 0 'Zeichen
Ascii 45
Asc46:
Data 20 , "u" , 10 , "l" , 20 , "d" , 20 , "r" , "u" , 10 , "l" , 20 ,
"d" , 20 , "r" , 0 'Zeichen Ascii 46
Asc47:
Data 20 , "u" , 10 , "l" , 20 , "n" , 20 , "r" , "u" , 10 , "l" , 20 ,
"d" , 0 'Zeichen Ascii 47
Nach eingehender studierung :D dieses Programmes meine ich es zu
verstehen (zumindest hoffe ich das)
Was ich nur nicht ganz verstehe ist, wie auf diese Weise Kreise bzw.
Viertelkreise zustandekommen. Für meine Version der Kreise habe ich
bereits einige Zeit und die Hilfe von einem LabView-Profi gebraucht
Gorn schrieb:> Nach eingehender studierung :D dieses Programmes meine ich es zu> verstehen (zumindest hoffe ich das)>> Was ich nur nicht ganz verstehe ist, wie auf diese Weise Kreise bzw.> Viertelkreise zustandekommen. Für meine Version der Kreise habe ich> bereits einige Zeit und die Hilfe von einem LabView-Profi gebraucht
Du machst dir eine Funktion für Kreise bzw Viertelkreise, die du
aufrufen kannst.
Dann vereinbarst du einen Buchstaben in der Databeschreibung, zb 'c' für
circle, und wenn du bei der Auswertung auf ein 'c' stösst, dann rufst du
diese Funktion auf. Genauso wie es ja auch bei 'r' oder den anderen
Buchstaben gemacht wurde.
Kreis ist leicht. Da brauchst du nur Mittelpunkt und Radius zu kennen
(das sind dann eben die nächsten Zahlen im Data). Bei Viertelkreisen
wirst du wahrscheinlich keine allgemeinen Viertelkreise brauchen, die
90° aus jedem beliebigen Startwinkel zum Endwinkel malen können, sondern
du wirst mit ein paar Standardformen auskommen. Für jede der
Standardformen machst du dir eine eigene Sub, die im Data einen eigenen
Buchstaben bekommt.
PS: Gerade die Kreisproblematik ist zb der Grund, warum Plotter gerne so
'eckige' Zeichensätze haben. Ein S wird zb oft so gemalt
1
**********
2
* *
3
* *
4
* *
5
*
6
*
7
**********
8
*
9
*
10
* *
11
* *
12
* *
13
**********
also mit Anfasungen anstelle von Rundungen. Ein Plotter ist ja in erster
Linie ein Gerät um damit Zeichnungen zu Papier zu bringen und kein
Schönschreibgerät. Für technische Zeichnungen tut es das allemal, und
diese kantigen Buchstaben haben auch so ihren Reiz.
Zudem haben diese Fonts den enormen Vorteil, dass man sie ohne Probleme
sowohl in der X-Achse als auch in der Y-Achse skalieren kann. Kreise nur
in einer Achse zu skalieren bedeutet sie in Ellipsen zu verwandeln und
dann fangen die Probleme an. Auch Dinge wie Kursivschrift sind viel
einfacher, wenn man keine Kreise/Bögen hat, eben weil es ziemlich
Aufwändig ist einen Kreis bzw. Kreisbogen geometrisch entsprechend zu
verformen. Auch Textdrehungen sind dann nicht mehr so banal.
All diese Punkte sind lösbar, wenn man den richtigen Aufbau hat. Aber:
Bei Kreisen/Bögen hat man zudem noch das Problem, dass man sie
irgendwann immer in gerade Linienstücke aufteilen muss. Damit das aber
gut aussieht muss man aus dem Kreisradius zurückrechnen, wie fein die
Unterteileung sein muss, damit man sie am Papier noch nicht sieht. Auch
das ist lösbar, aber es ist ziemlich aufwändig. Keine Kreise, keine
Bögen und man hat diese Probleme erst gar nicht :-) Wer schön schreiben
will soll einen Laserdrucker nehmen.
Edit:
Sieh dir zb hier
http://www.mikrocontroller.net/articles/Vektor-Font_in_C
mal in den Grafiken die Darstellung von zb dem 'a' oder dem 'e' an. Wenn
du genau schaust, sind das keine Bögen sondern genau diese Abfasungen.
Sieht doch gar nicht so schlecht aus.
Aus deinem Code für die Buchstaben mit den ganzen Rechts, Motorrechts
und sonstigem werde ich nicht schlau. Ist das sowas wie eine
Turtle-Grafik?
Ich vermisse nämlich in deinem Code eine Funktion, die Grundbaustein
jeglichen Plotters ist:
1
eine Gerade vom Punkt x1,y1 zum Punkt x2,y2 ziehen.
(und zwar von beliebigen Koordinaten zu beliebigen Koordinaten. Nur
senkrechte bzw. waagrechte Linien plotten zu können ist zu wenig)
Die ist doch das Hauptarbeitspferd, mit der Zeichnungen ausgegeben
werden. Und sie ist natürlich Baustein um daraus dann weitere
Funktionalitäten aufzubauen. Seien es jetzt Kreise, Bögen oder auch
Buchstaben.
Irgendwie kommt mir vor, ihr macht bei eurem Programm den 5ten Schritt
vor dem ersten.
Ja die Kreise bestehen auch aus Abstufungen, noch feiner wäre viel zu
aufwendig gewesen.
Bezüglich der x1y1 zu x2y2 fahren, da haben wir das Problem, dass wir 1.
keine Endschalter haben und 2. die Motoren nicht gerade selten einen
Schritt überspringen (liegt an der Trägheit der Achsen, wäre zwar
lösbar, wenn man den Abstand zwischen den Schritten verringern würde, zu
wenig, dann bewegt sich die Achse gar nicht, zu schnell dann überspringt
er Schritte
Dafür wurden Schrittmotoren erfunden. Evtl. ist die Ansteuerung dieser
nicht optimal.
Einen Endlagenschalter oder eine Mechanik, welche es verkraftet Schritte
über "Anschlag" zu überleben sollten aber vorhanden sein, um die
Position nach dem Start zu definieren. Danach kannst du im Programm die
Schritte mitzählen und weißt bis zum nächsten Stromausfall normal, wo
sich die Nadel / der Stift befindet.
Ansonsten soll mein Codebeispiel nur
ein Wink in die von mir bevorzugte Richtung zeigen. Die Subs Links,
rechts und Co überlasse ich dir, da ich die Hardware nicht habe und Code
zu erstellen, welchen ich in Aktion nie testen werden kann, macht mir
nicht wirklich Spaß.
Was ich viellecht hinzufügen sollte: Motorlinks ist der Motor, der für
Rauf und Runter zuständig ist, Motorrechts ist für Rechts und Links
zuständig, habe ich eigentlich nur gemacht, dass ich nicht so viel
schreiben muss.
ich habe inzwischen auch schon alle Kleinbuchstaben programmiert, und
versuche immernoch, dahinterzukommen, wie ich Arrays verwenden kann in
dem Programm
Hey Leute,
ich bin momentan dabei, das ganze mal mit Data und Restore zu probieren,
wird mir ich schätze mal 2000 Zeilen einsparen (danke für den Tipp), ich
hoffe es funktioniert. Bezüglich der Eingabe bin ich mir eben noch
unsicher, ob das mit den Ascii Codes funktioniert