Hardware: ArduRover

Aus letsgoing
Wechseln zu: Navigation, Suche

Titelbild LGIrover klein.JPG

  • Motoren sind falsch rum, ich habe die Anschlüsse getauscht:
  • von hinten in Fahrtrichtung von links nach rechts (rechter Motor) rot - sw linker Motor rot - sw

C:\Users\mherrma\Documents\Ardublock\ArduRover

Inhaltsverzeichnis

L1 Test linker Motor

  • Motor links Motor A D12 Richtung High vorwärts D11 Geschwindigkeit 255 Vollgas

L2 Test rechter Motor

  • Motor rechts Motor A D9 Richtung High vorwärts D10 Geschwindigkeit 255 Vollgas

L3 Test Taster an A3

  • kein Button 511
  • Button S3 1023
  • Button S4 0
  • beide Buttons - Kurzschluss

L4 Linienfolgersensortest auf Serial

L5 Linienfolger mit 2 Sensoren

L6 Interrupts

L6a Fahre_1m

  • Durchmesser 32 mm = ca. 30 Interrupts
  • 1U=*PI()*d = 109mm
  • 1m = 1000/109*30= 275 Interrupts

L7 Tasten ein / aus

L8 Distanzsenor serial

L9 Linienfolger Bumper

  • D6 gelbes Kabel
  • LED bar weißes Kabel

L10 Rundenzähler

  • Stoplinie ist zu breit - zählt zweimal
  • Lösung: schwarzes dreieck außen befestigen
  • Linie auf 1cm dünner machen
  • Linienfolgesensoren sind zu nah am boden: extra platte ca.5mm einlegen


L11 Linienfolgesensoren einstellen

L13 fahre Kurve

  • Durchmesser Rad: 32mm
  • Radumfang 100mm
  • bei 15 Balken sind das 30 CHANGE
  • 360 Grad / 30 gleich 12 Grad pro CHANGE
  • 100 / 30 gleich 3,33 mm
  • 3 Changes sind 1 cm
  • altes Rad:65 mm
  • Radumfang 204 mm
  • 10 Balken ergibt 20 Changes
  • 204 / 20 = 10,2 m
  • neu grob Faktor 3 also um 50 cm zu fahren muss man eingeben fahre 150

L20 BT Fernsteuerung

fehlende Tests

  • parken
  • strecken fahren
  • interrupts
  • Buttons neu

ArduRover Neu Korrekturen

Veränderte Blöcke

Neue Blöcke

  • Unterprogramm mit Return
  • Aufruf Unterprogramm mit Return
  • Setup Pixel
  • Farbe fuer Pixel
  • Daten an Pixel
  • Helligkeit Pixel
  • Wert von LGI-Button1
  • Wert von LGI-Schalter1
  • LGI-Start Button
  • Setup für Q-Touch-Button1
  • offset von Q-Touch-Button1
  • Q-Touch-Button1 gedrückt?
  • Q-Touch-Slider Setup
  • Offset1 von Q-Touch-Slider
  • Wert von Q-Touch-Slider

Veränderte Blöcke

Veränderte Blöcke

Veränderte Blöcke

Veränderte Blöcke

To do

Eclipse

  • Eventblock
  • Servo
  • Servo trennen
  • andere Blöcke weg
  • Neo_RGB inti-Block ?? GRB-Block
  • Sharp Distanz Berechnung weg?
  • Wert von LGI-Button 3 u. 4
  • Wert von LGI-Schalter 3 u. 4
  • Description von LGI-Start Button 2 u. 3
  • Farbe Kommunikation
  • Farben von Variablen / KOnstanten

Veränderte Blöcke

Veränderte Blöcke

Veränderte Blöcke

  • Eventblock
  • Servo
  • Servo trennen
  • andere Blöcke weg
  • Neo_RGB inti-Block ?? GRB-Block
  • Sharp Distanz Berechnung weg?
  • Wert von LGI-Button 3 u. 4
  • Wert von LGI-Schalter 3 u. 4
  • Description von LGI-Start Button 2 u. 3
  • Farbe Kommunikation
  • Farben von Variablen / KOnstanten

Bibliotheken

  • fahre Bibliothek - Strecken anpassen

Veränderte Blöcke

Veränderte Blöcke

To do

handouts

Schematischer Aufbau: neue Foto

LGI-Buttons

Raw-Werte ausgeben: Spannungsteiler

Neben dem Reset-Button (auf unserem Shield mit S2 bezeichnet) findest du zwei weitere Buttons (mit S3 und S4 bezeichnet), die du als Taster, Schalter oder Wartebuttons einsetzen kannst. Man kann testen, ob Button1, Button2 oder beide Buttons (Button3) gedrückt wurden. Im Menü Input findest du Blöcke mit der Bezeichnung LGI_Button, LGI-Schalter und LGI_Startbutton. Im Hintergrund arbeitet eine Library die uns diese Funktionen zur Verfügung stellt. Tatsächlich sind beide Buttons mit dem Pin A3 verbunden. Gemessen werden analoge Werte zwischen 0 und 1023 (10-Bit). Ausgegeben werden jedoch digitale Werte also Null oder Eins.

Als raw-Werte bezeichnet man die Rohwerte bzw. Werte, die noch nicht aufbereitet wurden. Wir wollen uns als erstes diese Raw-Werte, die an Pin3 gemessen werden, ausgeben lassen. Danach wollen wir uns anschauen, was die LGI_analogButton-Library mit diesen Rohwerten macht.

Schauen wir uns als erstes das Schaltbild an: Welche Spannung wird an A3 gemessen, wenn Schalter1, Schalter2 oder beide Schalter geschlossen sind?

Fall1: beide Schalter sind offen: Wenn kein Button gedrückt wird, dann hat A3 keine Verbindung zu 5V und hat somit das gleiche Potential wie Ground: Mit einem Multimeter würden wir 0 Volt messen. Der analoge Wert von Pin A3 Wert ist 0.

Fall2: Schalter 1 ist geschlossen, Schalter 2 ist offen: der 5V-Pin ist dann über zwei 10kOhm-Widerstände mit Ground verbunden. In der Mitte zwischen den beiden Widerständen wird die Spannung gemessen. Der Spannungsabfall beträgt an beiden Widerstäden jeweils 2,5 Volt. Da wir eine 10bit-Auflösung haben (1024 Möglichkeiten), muss der gemessene Wert genau zwischen Null und 1023 liegen: Also entweder 511 oder 512 (Zwischenwerte gibt es in der Digitaltechnik nicht!). Sprich: wenn an A3 ein Wert von ca. 512 gemessen wird, dann bedeutet das, dass Schalter 1 gedrückt wurde.

Fall3: Schalter 1 ist offen, Schalter 2 ist geschlossen: der 5V-Pin ist dann dann ist der 5V-Pin über einen 20kOhm Widerstand und einen 10kOhm-Widerstand mit Ground verbunden. In der Mitte zwischen den beiden Widerständen wird die Spannung gemessen. Am 20KOhm-Widerstand würden 2/3 des Potentials abfallen. Mit einem Messgerät könnten wir zwischen Pin A3 und Gnd 1,66 Volt messen. Das entspricht bei unserer 10bit-Auflösung einem Wert von ca. 341. Bei einem Wert von ca. 341 kann man also davon ausgehen, dass nur Button 2 gedrück wurde.

Fall4: beide Taster werden gleichzeitig gedrückt Der 10kOhm und der 20kOhm Widerstand sind parallelgeschaltet. Den Ersatzwiderstand können wir berechnen: R_ges=R1*R2/(R1+R2) = 6,66kOhm. Zwei Fünftel der Spannung fallen an de beiden parallel geschalteten Widerständen ab. Zwischen Pin3 und Masse können wir also drei Fünftel des Spannungsabfalls und somit 3 Volt messen. Als digitalen Wert erhält man ca. 614. Wenn der Wert also um die 614 liegt, dann sind beide Buttons gedrückt.

Aufgabe: Lasse dir die raw-Werte mittels dem Serial.println-Befehl für Pin3 anzeigen. Teste alle 4 Fälle.

Block: Wert von LGI-Button

Wir wollen uns nun ansehen, welche Werte der Block LGI-Button1 zurückgibt. Die Werte für LGI-Button2 und LGI-Button3 (beide Buttons) erhälst du wenn du mit dem Mauszeiger auf den Pfeil am Ende des Blocks klickst.

Die Blöcke für die LGI-Buttons verwenden die LGI_AnalogButton-Library: LGI-Button1 testet, ob der an Pin A3 gemessene Wert 511 +/-20 beträgt. Falls ja, dann gibt er eine 1 zurück (Button1 gedrückt), sonst eine 0. LGI-Button2 testet, ob der an Pin A3 gemessene Wert 341 +/-20 beträgt. Falls ja, dann gibt er eine 1 zurück (Button2 gedrückt), sonst eine 0. LGI-Button3 testet, ob der an Pin A3 gemessene Wert 614 +/-20 beträgt. Falls ja, dann gibt er eine 1 zurück (beide Buttons gedrückt), sonst eine 0.

Aufgabe: Erstelle ein Programm, das dir auf dem seriellen Monitor den Zustand der LGI-Buttons anzeigt.

Taster als Schalter

Die beiden Taster können mit Hilfe der LGI_AnalogButton-Library auch als Schalter verwendet werden: Einmal auf den Taster gedrückt, dann dauerhaft eingeschaltet. Beim zweiten Drücken ausgesschaltet. Aufgabe: Teste auch diese Funktion mit Hilfe des seriellen Monitors oder über die eingebaute LED an Pin13.

Taster als StartButton

Nach dem Hochladen des Programms auf den Arduino, startet das Programm sofort. Damit der ArduRover nicht sofort losfährt, setzen wir ins "Setup" einen StartButton. Du musst nun zuerst auf den Startbutton drücken, bevor das Programm abgearbeitet wird. StartButton1 ist der rechte Button, StartButton2 ist der linke Button. Der Block für StartButton3 bewirkt, dass du beide Buttons gleichzeitig drücken musst, bevor das Programm weiter abgearbeitet werden kann.

Du kannst den StartButton auch in der Hauptschleife (loop) einsetzen. Das Programm wartet dann an dieser Stelle, bis der richtige Button gedrückt wurden.

Neo Pixel

Einleitung: Eine RGB-LED besteht bekanntermaßen aus 3 LEDs: einer roten, einer grünen und einer blauen. Jede LED hat zwei Anschlüsse: Eine Anode und eine Kathode. RGB-LEDs haben entweder eine gemeinsame Anode oder eine gemeinsame Kathode. Man braucht also für eine RGB-LED 4 Anschlüsse. Um die unterschiedlichen Farben zu erzeugen, kann man über die PWM-Pins die Werte für jede Farbe zwischen Null und 255 einstellen. Man hat also 256 * 256 * 256 Möglichkeiten - das sind 16,7 Mio theoretisch mögliche Farben! Man braucht allerdings für jede RGB-LED drei Pins. Selbst mit einem Arduino-Mega (der verfügt über 15 PWM-Pins) lassen sich nur 15 RGBs einzeln ansteuern. Wenn man 4 RGBs unabhängig steuern möchte, hat man schon einen ordentlichen Kabelsalat!

Neopixel bieten hier phantastische Möglichkeiten: Mit nur einem Pin kann ich jede RGB eines Streifen mit 30, 60 oder 144 RGBs einzeln ansteuern. Die Neopixel-RGBs gibt es auch Ringe, Matrix oder einzeln. Jede RGB hat einen kleinen Chip und wird über ein spezielles Protokoll angesprochen. Damit das funktioniert, müssen in einem bestimmten Takt Informationen an die einzelnen RGBs gesendet werden. Die einzeln RGB werden als Pixel bezeichnet und sind durchnummeriert - beginnend mit Null! Die dritte RGB wird somit mit Pixel 2 angesprochen.

Damit das Protokoll funktioniert musst du die Library einbinden, ein Objekt für unseren Streifen erzeugen und dieses Objekt in einem Setup - Block initialisieren. All das erledigt der Setup-Neopixel-Block für uns. Du musst nur angeben an welchem Pin die Kette hängt, wie viele Pixel in der Kette enthalten sind und mit welchem Takt dein Chip arbeitet.

Nach dieser Initialisierung kannst du mit dem Block "Farbe fuer Pixel RGB" jede einzelne Pixel-RGB gezielt ansprechen und die Werte für rot, grün und blau übergeben. Der Befehl setPixelColor(3,255,0,0 ); spricht deine 4. RGB an und übergibt an deren Chip das Triple 255,0,0 also Rot!

Mit dem Block "Daten an Pixel senden" werden die einzelnen Chips aufgefordert, die neuen Werte auch anzuzeigen, sprich entsprechend zu leuchten.

Mit dem Block "Helligkeit [0...255] werden alle Farben im Verhältnis skaliert und damit gedimmt.

ACHTUNG: Die kleinen RGBs ziehen ganz gut Strom. Jede Farbe zieht 18,5 mA. Das macht pro Pixel maximal 55 mA. Da unser Arduino über die 5V-Stromversorung nur maximal 500 mA bereitstellen kann, sind 8 Pixel die Obergrenze. Bei längeren Ketten muss man auf eine externe Stromversorung zurückgreifen.

LGI-Q-touch

Mit dem LGI-Touchsensor können auf einfache und sehr günstige Art bis zu 6 Touchsensoren über die analogen Pins gewonnen werden.

Funktionsprinzip: Ich habe zwei Behältnisse: Ein großes z.B. einen Eimer und ein kleines z.B. einen Becher. Zu Beginn meiner Messung leere ich beide Behältnisse aus. Sie sind beide leer. Nun fülle ich den Becher bis er voll ist, gieße ihn in den Eimer aus und wiederhole das solange bis der Eimer voll ist. Dabei zähle ich mit, wie oft ich den Becher füllen und entleeren musste. Wir konnten so feststellen, dass der Eimer beispielsweise 80 Becher fasst. Wenn der Eimer voll ist, leeren wir ihn wieder aus und beginnen mit dem Spiel von vorne. Jedes Mal werden wir feststellen, dass nach 80 Zyklen der Eimer voll ist. Wenn wir jetzt einen Becher nehmen, der etwas größer ist, dann wäre der Eimer schon nach z.B. 60 Zyklen gefüllt. Wir sehen, wir können über die Anzahl der Zyklen direkt auf die Bechergröße schließen.

Ähnlich wie ein Wassereimer oder ein Becher kann man auch Kondensatoren befüllen bzw. aufladen. Ein Kondensator besteht aus 2 Platten, die durch einen kleinen Spalt voneinander getrennt sind. Wird an die beiden Platten eine Spannung angelegt, so lädt sich der Kondensator in einer bestimmten Zeit auf. D.h. die eine Platte ist dann positiv geladen, die andere negativ. Wie groß die Kapazität ist, hängt von der Fläche der Platten, dem Abstand der Platten und dem Dielektrikum ab. Große Flächen = große Kapazität. Das Dielektrikum ist der Stoff zwischen den Platten. Der Mensch besteht zum Großteil aus Wasser, was einen hohen Dielektrischen Wert besitzt.

Ich habe 2 Kondensatoren. Einen mit einer vergleichsweise großer Kapazität, der im Arduino verbaut ist und einen mit einer sehr viel kleineren Kapazität, z.B. eine Kupfermünze oder ein Kupferstreifen unter einer Plexiglasabdeckung. Zu Beginn einer Messung entlade ich beide Kondensatoren. Dann lade ich den kleinen Kondensator auf und nehme dann dessen Ladung um den großen Kondensator zu beladen. Das braucht wiederum einige Zyklen. Wie beim Wassereimer zähle ich die Zyklen. Wenn der große Kondensator voll ist, leere ich ihn und beginne das Spiel von neuem.

Nun kommt der Clou: Wenn ich mit meinem Finger die Plexiglasscheibe berühre, verändert sich die Kapazität meines Sensors. Nun brauch ich wesentlich weniger Zyklen um den eingebauten Kondensator zu füllen. Der Arduino wertet die Zyklenzahl aus: Wenn die Zyklenzahl sinkt, gibt der Arduino eine Eins zurück, sonst eine Null. Mit dem Block Offset von Q-Touch-Button kannst du dir die Zyklenzahl ausgeben lassen, die direkt nach dem Reset gemessen wurde. Mit dem Block "Q-Touch-Button1 gedrueckt?" kannst du dir anzeigen lassen, ob der Button gedrückt wurde oder nicht: 1 bedeutet gedrückt, 0 bedeutet nicht gedrückt. Bevor du deine Messungen durchführen kannst, musst du im Setup festlegen, an welchen Pin dein Q-Touch Button hängt. Du brauchst einen weiteren Pin für die Entladung des eingebauten Kondensators. Du kannst mehrere Q-Touch-Sensoren jedoch miteinander koppeln: Q-Touchsensor1 hängt an A0 und verwendet A1 als Partnerpin. Q-Touchsensor2 hängt an A1 und nimmt A2 als Partnerpin und Q-Touchsensor3 nimmt A2 und verwendet A0 als Partnerpin. So kann ich mit nur 3 Pins 3 Q-Touch-Sensoren einsetzen.

Aufgabe: Schreibe ein Programm, das dir den Offset des Q-Touchbuttons über den seriellen Monitor anzeigt. Wie ändert sich der Wert, wenn du den Button berührst und danach einen RESET durchführst?

LGI-Q-touch 2

  • ADC AnalogDigitalConverter

Mit dem LGI-Touchsensor können auf einfache und sehr günstige Art bis zu 6 Touchsensoren über die 6 analogen Pins gewonnen werden.

Funktionsprinzip: kommunizierende Röhren: Rauminhalt = Kapazitä, Höhe = Spannung

Ich habe zwei Behältnisse: Ein großes z.B. ein Aquarium und ein kleines z.B. einen Glasbecher. Die beiden Behälter stehen nebeneinander und sind auf Bodenhöhe mit einem Glasröhrchen über einen Absperrhahn miteinander verbunden. (siehe Zeichnung) Zu Beginn meiner Messung leere ich beide Behältnisse aus. Nun fülle ich das Aquarium bis es voll ist (5 dezimeter hoch). Ich öffne den Absperrhahn und warte bis sich beide Niveaus ausgeglichen haben. Ich messe die Höhe des Wasserspiegels am Aquarium. (Das ist mit dem ACDC-Wandler möglich) Da der Glasbecher relativ klein ist, ist der Wasserspiegel des Aquariums nur um 0,2 dm auf 4,8 dm gesunken.

Nun entleere ich wieder beide Gefäße und befülle den Glasbecher (max = 5dm). Dann öffne ich den Absperrhahn und messe die Füllhöhe des Aquariums. Da die Grundfläche des Glasbechers klein ist, ist der Wasserspiegel im Aquarium nur um 0,2 dm gestiegen.

Nun ziehe ich vom großen Wert den kleinen ab.--> 4,6 dm

Der Trick beim Kondensator ist, dass der Glasbecherinhalt größer wird, wenn man ihn berührt!

Nun nehme ich also einen größeren Glasbecher. Der Wasserspiegel fällt bei a) auf 4,5 dm. Der Wasserspiegel steigt bei b) auf 0,5 dm

Die Differenz beider Werte ergibt 4 dm.

Falls 4,6 dm minus 4 dm größer als die Hystere, dann berührt.

Wenn der Wert nun größer als die Hystere ist, dann kann man davon ausgehen, dass unser sensor berührt wurde. Hysterese: Ist der Wert ab dem etwas als touch gilt.


Ähnlich wie beim Aquarium und dem Becherglas kann man auch auch Kondensatoren befüllen bzw. aufladen. Ein Kondensator besteht aus 2 Platten, die durch einen kleinen Spalt voneinander getrennt sind. Wird an die beiden Platten eine Spannung angelegt, so lädt sich der Kondensator in einer bestimmten Zeit auf diese Spannung auf. D.h. die eine Platte ist dann positiv geladen, die andere negativ. Wie groß die Kapazität ist, hängt von der Fläche der Platten, dem Abstand der Platten und dem Dielektrikum ab. Große Flächen = große Kapazität. Das Dielektrikum ist der Stoff zwischen den Platten. (Hinweis: Der Mensch besteht zum Großteil aus Wasser, was einen hohen Dielektrischen Wert besitzt.)

Ich habe 2 Kondensatoren. Einen mit einer vergleichsweise großer Kapazität, der im Arduino verbaut ist und einen mit einer sehr viel kleineren Kapazität, z.B. eine Kupfermünze oder ein Kupferstreifen unter einer Plexiglasabdeckung. Eigentlich ist die Kupfermünze nur ein halber Kondensator. Dann kommt ein sehr großer Luftspalt und dann die Erde. Zu Beginn einer Messung entlade ich beide Kondensatoren. Dann lade ich den großen Kondensator auf und nehme dann dessen Ladung um den großen Kondensator zu beladen. Nach kurzer Zeit haben beide die gleiche Spannung U1. Nun entlade ich beide Kondensatoren wieder und lade den kleinen (meinen Sensor) auf. Dann verbinde ich beide und messe wieder die Spannung des eingebauten Kondenators. Die ist jetzt geringfügig auf einen Wert u2 gefallen. Um einen besseres Ergebnis zu bekommen, ziehe ich von U2 die Spannung U1 ab.

Nun kommt der Clou: Wenn ich mit meinem Finger die Plexiglasscheibe berühre, verändert sich die Kapazität meines Sensors. Der kleine Kondensator hat mehr Kapazität. Nun wird der interne (große) Kondensators wieder beladen (man verbindet eine seiner Platten mit 5V) und trennt ihn dann von seiner Spannungsquelle. Nun verbindet man die beiden Kondensatoren. Der große Kondensator entlädt sich nun stärker (seine Spannung sinkt auf einen kleineren Wert) als im ersten Versuch. Zur Gegenprobe leert man nun beide Kondensator wieder, lädt den kleinen auf und schaut wie start die Spannung des großen ansteigt (etwas mehr als beim ersten Versuch), wenn man sie koppelt. Man subtrahiert wieder die beiden Werte.

Betrachtet man nun das Ergebnis und vergleicht es mit Versuch 1, dann kann man sagen, wenn der Wert deutlich über dem ersten liegt, dann wurde wohl der Button berührt. Was deutlich ist, bestimmt die Hystere.


Mit dem Block Offset von Q-Touch-Button kannst du dir die Zyklenzahl ausgeben lassen, die direkt nach dem Reset gemessen wurde.

Mit dem Block "Q-Touch-Button1 gedrueckt?" kannst du dir anzeigen lassen, ob der Button gedrückt wurde oder nicht: 1 bedeutet gedrückt, 0 bedeutet nicht gedrückt.

Bevor du deine Messungen durchführen kannst, musst du im Setup festlegen, an welchen Pin dein Q-Touch Button hängt. Du brauchst einen weiteren Pin für die Entladung des eingebauten Kondensators. Du kannst mehrere Q-Touch-Sensoren jedoch miteinander koppeln: Q-Touchsensor1 hängt an A0 und verwendet A1 als Partnerpin. Q-Touchsensor2 hängt an A1 und nimmt A2 als Partnerpin und Q-Touchsensor3 nimmt A2 und verwendet A0 als Partnerpin. So kann ich mit nur 3 Pins 3 Q-Touch-Sensoren einsetzen.

Aufgabe: Schreibe ein Programm, das dir den Offset des Q-Touchbuttons über den seriellen Monitor anzeigt. Wie ändert sich der Wert, wenn du den Button berührst und danach einen RESET durchführst?

Q-Touch-Slider

Der Q-Touch-Slider verwendet das gleiche Prinzip wie der Q-Touch-Sensor. Der Slider gibt jedoch keine boolschen Wert [0,1] zurück, sondern Werte zwischen 0 und 100. Für den Q-Touch-Slider brauchst du 3 Pins, die du über den Q-Touch-Slider Setup Block bekannt machen musst. Die drei Offset-Werte kannst du dir über die Blöcke "Offset1 (bis3) von Q-Touch-Slider" ausgeben lassen. Damit der Slider den gesamten Bereich zwischen Null und 100 zurückgeben kann, musst du ihn zu Beginn "eichen".


UnterprogrammReturn

Mit dem Block UnterprogrammReturn kann man ein Unterprogramm ausführen das einen Wert an das Hauptprogramm zurückgibt: Das Unterprogramm kann z.B. etwas berechnen und das Ergebnis dann in eine lokale Variable speichern. Das Hauptprogramm "sieht" diese lokale Variable nicht. Damit das Hauptprogramm den Wert dieser Variablen in eine eigene Variable schreiben kann, muss sie über den Konnektor "Rueckgabewert" an das Hauptprogramm zurückgegeben werden.

Da der Wert im Hauptprogramm von einer Variablen übernommen werden muss, kann man die Unterfunktion jetzt nicht mehr einfach aufrufen, sondern man muss den Aufruf über eine Variable tätigen. Der Rueckgabewert (also das, was in der Unterfunktion berechnet und in eine lokale Variable abgelegt wurde) wird dann in die aufrufende Variable geschrieben.

Das Programm sieht dann folgendermaßen aus: 1. Setze analoge Variable auf: Variable: Name der analogen Variablen, Den Wert holt man sich über das Unterprogramm (liefert Rueckgabewert). 2. Damit wurde das Unterprogramm schon aufgerufen. Das Hauptprogramm wird verlassen. Sprung ins Unterprogramm. 3. Das Unterprogramm wir abgearbeitet. Es wird festgelegt, welcher Wert zurückgegeben wird. 4. Rücksprung ins Hauptprogramm zu dem Punkt, an dem das Unterprogramm aufgerufen wurde: Der Rueckgabewert wird als Wert an die analoge Variable übergeben. 5. Es geht weiter im Hauptprogramm.

fahre Kurve Distanz

Korrektur bei schlechtem Geradeauslauf

  • bei Drall nach links --> fahre rechts links -1

lokale Variablen

Ardublock kennt eigentlich nur globale Variable. Das bedeutet für alle Variablen, dass sie a) dauerhaft einen Speicherplatz belegen und b) dass sie für alle Programmteile immer sichtbar sind. Beides ist unschön: Der Arduino hat a) nur einen sehr begrenzten Speicherplatz und b) sollten bei größeren Programmen eigentlich nur lokale Variablen eingesetzt werden, damit sich die verschiedenen Programmteile nicht in die Quere kommen:

Ein größeres Computerprogramm lässt sich übersichticher gestalten, wenn man Unterprogramme verwendet. Wenn Teile eines Programms wiederholt eingesetzt werden müssen, empfiehlt es sich, diese in Unterprogramme auszulagern. Die Unterprogramme sind dann so etwa wie Blackboxes. Da wird z.B. etwas ausgewertet oder neu berechnet. Aus dem Hauptprogramm wird das Unteprogramm aufgerufen. Mit dem Aufruf können dem Unterprogramm Werte übergeben werden, mit denen das Unterprogramm dann rechnet. Am Ende gibt das Unterprogramm vielleicht auch einen Wert zurück. Sind alle Variablen global und damit überall sichtbar, dann können auch Unterprogramme auf Variable zugreifen, die vielleicht in einem anderen Programmteil schon genutzt werden. Besser wäre es, wenn die Variable, die im Unterprogramm benötigt wird, in der Blachbox bleibt. Sie gilt nur für den Moment des Aufrufs. Nach dem Abarbeiten des Unterprogramms existiert sie nicht mehr und belegt somit auch keinen Speicherplatz mehr.

Dummerweise funktionieren bei Ardublock nur lokale Varialen mit unterschiedlichen Namen. Wenn du also einzelne Variable lokal einsetzen möchtest, musst du ihr einen Namen geben, der einmalig in deinem Programm ist. Du sparst damit Speicherplatz.

Achtung: q-touch-button2 falsche übersetzung

Korrekturen

  • s1 brauchst du cherokey und inkrementalgeber
  • s2 grundlagen motoren
  • Wann kommen die analogen Taster /Schalter? --> Wiederholung digitalRead / analogRead

Korrekturen

  • s1 brauchst du cherokey und inkrementalgeber
  • s2 grundlagen motoren --> Blockreferenz?
  • Wann kommen die analogen Taster /Schalter? --> Wiederholung digitalRead / analogRead
  • Kapitel über Variable --> Was kommt in die Blockreferenz?

Korrekturen Blockreferenz

  • Einleitung Anmerkung
  • Troubles mit dem Arduino
  • C-Code mehr bringen (eine Aufgabe komplett in C-Code)


Korrekturen Cherokey

  • altes Fahrzeug dieses Halbjahr oder Jahr noch nehmen, dann Umstellung auf neues Fahrzeug
  • kein Shield
  • Fahrzeugkosten neu ca. 65 Euro komplett (reine Fahrzeugkosten ohne Akkus und Sensoren ca. 30)
  • unterm Strich günstiger (alte Fahrzeuge für Hochschule: Wert pro Fahrzeug ohne Sensoren 50 Euro + Omniwheels + Aufbauten + Akkuhalter + Akkus + Shield --> 600 Euro)
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Navigation
Projekte
letsgoING Material
letsgoING Hardware
letsgoING Software
Sensoren
Aktoren
LED
Bluetooth
Wissen
Werkzeuge