Hallo,
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
Der DCC-Zubehördecoder hat sich schon seit längerem 'verselbständigt' und hat einen eigenen Thread hier im Forum.
Die aktuellen Sourcen und die Dokumentation können direkt von Github heruntergeladen werden.
--------------------------------------------------------------------------------------------------------------------------
Servos langsam bewegen
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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);
}
Mit diesem kleinen Sketch kann man sehen, wie ein Servo ganz einfach langsam bewegt werden kann:
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.4.0.zip<<
Falls es Probleme gibt, die alte Version existert auch noch:
>> MoBaToolsV2.3.1.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-24-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.4.0 - 28.5.2021
V2.3.1 - 7.11.2020
V2.3.0 - 31.7.2020
V2.2.0 - 23.2.2020
V2.1.1 - 8.2.2020 - es funktionierte nur noch mit einem Servo.
V2.1.0 - 6.2.2020
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.
V2.0.0 - 13.1.2020
V1.1.4 - 25.9.2019
V1.1.3 - 22.8.2019
V1.1.2 - 3.8.2019
V1.1.1 - 29.7.2019
V1.1.0 - 26.6.19 - GESPERRT
V1.0.3 - 23.2.19
V1.0 - 5.11.2017
V0.9 - 1.3.2017
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.