wenn wir den Arduino für die MoBa einsetzten, so gibt es einige Aufgaben, die immer wieder vorkommen:
Ein Servo langsam bewegen, eine Led weich auf- oder abblenden oder auch ganz einfach Zeitverzögerungen ohne den Arduino dabei zu blockieren.
Ich möchte hier eine Bibliothek vorstellen, die diese Aufgaben erleichtert. Mit einfachen Sketches möchte ich die Anwendung dieser Bibliothek zeigen.
Zug um Zug soll hier die Anwendung der Bibliothek gezeigt werden und es wird auch immer mal wieder ein Update geben.
Die Bibliothek enthält Funktionen um
- Servos langsam zu bewegen ( max 16 Servos )
- Schrittmotoren anzusteuern ohen den Sketch zu blockieren ( max 4 Schrittmotore )
- Leds weich auf- und abzublenden ( an jedem digitalen Ausgang möglich )
- Zeitverzögerungen ohne 'delay' und damit ohne Blockieren des loop zu realisieren
Wie man diese nutzt, möchte ich hier Zug um Zug in einfachen Sketches vorstellen.
Inhaltsverzeichnis der bisher vorgestellten Demo's:
Update 14.12.16:Die ersten 3 Beispiele waren mit den aktuellen MobaTools nicht lauffähig. Das ist jetzt korrigiert ( die alten Versionen gibt es ja nicht mehr)
Baustellenblinker
Multitasking
einfacher DCC Weichendecoder
Schweisslicht(von Marko)
DCC-Decoder(von Bodo)
DKW-Weichendecoder( von Ulli )
DCC-Multifunktionsdecoder
universeller DCC-Zubehördecoder
Universeller DCC-Zubehördecoder V2 Beta
--------------------------------------------------------------------------------------------------------------------------
Servos langsam bewegen
Code: Alles auswählen
#include <MobaTools.h>
// Die Taster müssen so angeschlossen sein, dass der Eingang bei gedrücktem
// Taster auf LOW (=0) geht. Ansonsten muss im loop auf HIGH abgefragt werden
const int tasterPin1 = 2; //Taster1 Pin 2
const int tasterPin2 = 3; //Taster2 Pin 3
const int servoPin = 9; // Anschluß für den Servo, möglich sind 9 oder 10
// bei Werten, die sich im Programm nie verändern, sollte immer 'const' vorangestellt
// werden
int tasterStatus1, tasterStatus2;
Servo2 meinServo;
void setup() {
pinMode(tasterPin1, INPUT_PULLUP); //tasterPin1 (Pin 2)
pinMode(tasterPin2, INPUT_PULLUP); //tasterPin2 (Pin 3)
meinServo.attach(servoPin); //Servo an Pin 9
meinServo.setSpeed( 5 ); // Das ist ein neuer Aufruf, mit dem die Geschwindigkeit
// eingestellt wird. Je größer die Zahl, umso größer
// die Geschwindigkeit. Bei 0 (defaultwert) verhält es
//sich wie bei der Standard Bibliothek
}
void loop() {
tasterStatus1 = digitalRead(tasterPin1);
tasterStatus2 = digitalRead(tasterPin2);
if (tasterStatus1 == LOW ) {
meinServo.write(40); //wird langsam drehen
delay(100);
}
if (tasterStatus2 == LOW) {
meinServo.write(150); //wird langsam drehen
delay(100);
}
delay(20);
}
sobald einTaster gedrückt wird, bewegt sich das Servo langsam in die eine bzw. andere Richtung.
Wer das nun ausprobiern will, wird aber erstmal eine Fehlermeldung bekommen. Klar, der Arduino weis ja noch nichts von einer MoBa-Bibliothek. Die muss erst installiert werden.
11.12.18: Die MobaTools können jetzt auch direkt über den Bibliotheksverwalter der IDE installiert werden:
Im Menue: Sketch->Bibliothek einbinden->Bibliotheken verwalten... ( oder Ctrl+Shift+I ).
Dann im Suchfeld oben rechts 'mobatools' eingeben. Da gibt's dann automatisch auch immer die neueste Version.
Es geht natürlich auch noch mit dem Herunterladen der Datei:
>> MoBaToolsV2.3.1.zip<<
Falls es Probleme gibt, die alte Version existert auch noch:
>> MoBaToolsV2.2.0.zip<<
und speichert sie in einem Verzeichnis - z.B. dem Downloadverzeichnis - ab.
Mit der Arduino IDE kann nun die Bibliothek installiert werden:
Mit dem Menüpunkt: Sketch->Include Library->Add.ZIP Library öffnet sich ein Explorerfenster. Dort zum Downloadverzeichnis navigieren, die Datei 'MoBaTools.zip' auswählen und auf Öffnen klicken.
Nun sollte der obige Sketch übersetzbar sein, und kann ausprobiert werden.
Wer nur erstmal die Doku lesen will: MobaTools-23-de.pdf
Die Library enthält auch kleine Demos, die aus der IDE über 'Datei'->'Beispiele' aufgerufen werden können.
Bei Fragen ,Problemen oder Anregungen - nur zu. Es gibt keine dummen Fragen, nur dumme Antworten

P.S. Die Servo-Funktionen der Standard Library und die hier vorgestellten können nicht parallel genutzt werden, das sie dieselben Hardwarekomponenten benutzen. Edit: gilt auch für das weiche Led auf/abblenden.
Die MoBaTools sind kompatibel mit Arduino Uno, mini, nano, Leonardo und micro. Ich hatte aber noch keine Möglichkeit, sie auf den 8MHz Versionen zu testen.
=================================
Versionsinfo:
hier gibts Informationen zu Aktualisierungen. Das Zip-File hier im Post entspricht immer der letzten Version. Vor einem update muss die bisherige Version im Library-Verzeichnis gelöscht werden (Ausser beim Update über den Bibliotheksmanager).
V2.3.1 - 7.11.2020
- Fehler in MoToStepper beseitigt: doSteps(0) hat nicht funktioniert, wenn die Rampenlänge 0 war. Dann wurde nicht gestoppt, sondern die Drehrichtung umgekehrt.
V2.3.0 - 31.7.2020
- Neue Klasse 'MoToTimebase' mit der Ereignisse in regelmäßigen Abständen ausgelöst werden können. Dies ist genauer, als wenn man dies mit MoToTimer selbst macht.
- MoToButtons: Ein 'longPress' wird jetzt sofort ausgelöst, wenn die Taste entsprechend lang gedrückt wird, nicht erst bein Loslassen.
- MoToStepper: Wenn der Nullpunkt gesetzt wird, kann jetzt auch die Zahl der Steps/Umdrehung neu gesetzt werden.
- Es gibt ein paar zusätzliche Beispiele.
- Es wurden ein paar Fehler beseitigt
V2.2.0 - 23.2.2020
- In der Klasse MoToButtens gibt es eine neue Methode 'clicked' mit der einfache und Doppelklickes erkannt werden können.
- Sind alle Taster/Schalter einfach jeweils an einen eigenen Pin angeschlossen ( und schalten gegen Gnd ), so ist keine Callbackfunktion mehr notwendig.
V2.1.1 - 8.2.2020
- Fehler bei MoToServo beseitig, der in die letzte Version reingerutscht ist
- es funktionierte nur noch mit einem Servo.
V2.1.0 - 6.2.2020
- Es gibt eine neue Klasse 'MoToButtons'. Damit können mehrere Taster/Schalter ( bis zu 32 / Instanz ) verwaltet werden. Die Klasse übernimmt das Entprellen und stellt den Status der Taster und Events ( Drücken, Loslassen, lange Drücken und kurz Drücken ) zur Verfügung.
Die Lib ist speziell dazu gedacht, wenn mehrere Taster/Schalter verwaltet werden sollen. Das Einlesen der HW ist deshalb über eine CallBack Funktion realisert. Damit sind Matrixanordnung und/oder das Einlesen über z.B. I2C Portextender möglich. - Der MoToTimer hat eine neue Methode 'expired'. Diese liefert nur einmalig 'true' zurück, nachdem der Timer abgelaufen ist. Alle weiteren Aufrufe sind wieder 'false'. Damit können sehr einfach Aktionen ausgelöst werden, die nach dem Ablauf des Timers nur einmalig gestartet werden sollen.
- MoToButtons und MoToTimer können, wenn gewünscht, auch einzeln in einen Sketch eingebunden werden ( MoToTimer.h / MoToButtons.h ). Die komplette Klassendefinition ist in den .h Files enthalten. Speicher spart es allerdings nicht. Auch mit 'MobaTools.h' wird nur das eingebunden, was wirklich genutzt wird.
V2.0.0 - 13.1.2020
- Der WLAN-Chip ESP8266 wird jetzt auch unterstützt ( der schafft beim Stepper bis zu 8000 Steps/Sec)
- Bei Steppern kann ein enable-Pin verwaltet werden, um den Motor im Stillstand abzuschalten
- in der Stepperklasse gibt es eine neue Funktion 'getSpeedSteps', die die aktuelle GEschwindigkeit ( auch in der rampe) zurückgibt.
- Die Klassennamen haben sich geändert und wurden vereinheitlicht. Die alten funktionieren zwar auch noch, sollten aber bei neuen Sketchen nicht mehr verwendet werden
V1.1.4 - 25.9.2019
- Es gab Probleme, wenn die Steprate auf '0' gestellt wurde. Das ist nicht zulässig und wird nun abgefangen ( wird dann intern auf '1' gesetzt)
- Wurde die Zielposition im Modus ohne Rampe in sehr schneller Folge ( schneller als die Steprate ) aktualisiert, kam es zu einem Fehler bei der Steperzeugung.
- Es sind jetzt höhere Stepraten ( bis 2500 Steps/Sek) möglich. Der relative Jitter wird dann zwar rel groß ( ist absolut immer 200µs), es hat aber in Versuchen immer gut funktioniet. Damit kann jetzt auch besser mit Microsteps gearbeitet werden.
V1.1.3 - 22.8.2019
- Fehler beseitigt beim Umrechnen von Winkel<->Steps
- Bei Softled sind jetzt auch längere Zeiten (bis 10sec) möglich
- weitere kleinere Fehlerbereinigunge und Optimierungenn
V1.1.2 - 3.8.2019
- Fehler beseitigt: Sketch stürzte ab, wenn nur Servo genutzt wurde
- V1.1.1 nicht mehr verwenden
- Bei einem detach werden die verwendeten Pins wieder auf 'INPUT' gestellt
V1.1.1 - 29.7.2019
- Stepper mit Anfahr/Bremsrampe
- Feinere Geschwindigkeitsauflösung bei höhern Stepraten
- Der Code wurde intern gesplittet, so dass der Programmspeicherverbrauch deutlich sinkt, wenn nur ein Teil der Funktionalität genutzt wird.
V1.1.0 - 26.6.19 - GESPERRT
- Achtung, hier gab es ein Problem mit dem Bibliotheksmanager, er installiert einen falschen Stand
- Diese Version NICHT nutzen
V1.0.3 - 23.2.19
- Fehlerbeseitigung: Servos funktionierten nicht an Pin 0
- Umstellung auf das 1.5 Library-Format ( Source-Dateien im Unterordner 'src' )
V1.0 - 5.11.2017
- Auf AVR-Platformen mit mehr als einem 16-bit-Timer verwenden die MoBa-Tools nun automatisch den Timer 3. Dies ermöglicht die parallele Verwendung von anderen Libs, die auch den TImer 1 verwenden auf diesem Plattformen. Dies gilt z.B. für Arduino Leonardo, Micro, Pro Micro und Mega.
- Servo's: ist 'AUTOOFF aktiv und es wird ein servo.write-Befehl auf die aktuelle Position ausgegeben, so werden nun für ca 1sec Servoimpuls ausgegeben. Die Vorgängerversionen haben in diesem Fall keine Impulse ausgegeben.
V0.9 - 1.3.2017
- Softled-Ausgänge konnen invertiert werden ( ON = LOW )
- Der speed-Parameter bei Servos hat eine feinere Auflösung
- STM32F1 Prozessoren werden unterstützt (stm32duino)
V0.8 - 3.2.2017
-Softleds funktionieren nun an allen Digitalausgängen, nicht nur an PWM-fähigen.
V0.7 - 20.1.2017
-Unterstützung des Schrittmotortreibers A4988
V0.6 - 17.10.2015
-kleine Erweiterung bei den Methoden/Funktionen des Schrittmotors
-Doku ergänzt zum Schrittmotoranschluß über SPI
-kleine Fehlerbeseitigungen
-Die MobaTools installieren sich jetzt wieder unter 'MobaTools' und nicht mehr unter 'MobaTools1' ( das war in der letzten Version noch eine Folge meiner Testumgebung )
-wegen der Größe jetzt nicht mehr hier als Anhang, sondern als Download von OneDrive
V0.5 - 4.10.2015
-Erweiterung auf bis zu 16 Servos. Die Impulse werden jetzt softwaremäßig erzeugt und können daher an beliebigen Pins ausgegeben werden.
-Des weiteren ist jetzt auch die Ansteuerung von bis zu 4 Schrittmotoren integriert. Die Ansteuerung der Schrittmotore geschieht ebenfalls im Hintergrund, und blockiert den Programmablauf im loop nicht.
-Beseitigung eines Fehlers in der detach-Funktion.
V0.2 - 17.9.2015
Servoansteuerung geändert: Beim attach fuhr das Servo bisher immer in die Mittelstellung. Jetzt bestimmt das erste write nach dem attach die Ausgangsposition. Vor diesem ersten write werden noch keine Impulse ausgegeben. Damit kann die Anfangsposition flexibel festgelegt werden.
Der detach-Befehl schaltet die Servoimpulse ab, wobei sichergestellt ist, dass auch der letzte Impuls nicht abgeschnitten ist.