Hallo zusammen,
ich habe mir einen Sketch zusammen-geschustert, um ein IBUS Signal aus meinem RC-Empfänger auszulesen und damit verschiedene Beleuchtungen auf meinem RC-Schiff zu schalten.
Die Fernsteuerung Eachine TX16S und ein Flysky FS-IA10B Empfänger.
Ich habe folgenden Sketch auf einen Uno geladen und getestet.
[code]
#include <IBusBM.h>
#include <Servo.h>
IBusBM IBus; // IBus object
int OUT1 = 2; // Schaltausgänge
int OUT2 = 3;
int OUT3 = 4;
int OUT4 = 5;
void setup() {
IBus.begin(Serial); // iBUS object connected to serial0 RX pin
pinMode(OUT1, OUTPUT);
pinMode(OUT2, OUTPUT);
pinMode(OUT3, OUTPUT);
pinMode(OUT4, OUTPUT);
}
void loop() {
int val;
val = IBus.readChannel(10); // get latest value for servo channel 1
if (val > 1700)
{
digitalWrite(OUT1, HIGH);
delay(100);
digitalWrite(OUT1, LOW);
delay(100);
digitalWrite(OUT1, HIGH);
delay(100);
digitalWrite(OUT1, LOW);
delay(500);
} else {
digitalWrite(OUT1, LOW);
}
val = IBus.readChannel(11); // get latest value for servo channel 2
if (val > 1700)
{
digitalWrite(OUT2, HIGH);
} else {
digitalWrite(OUT2, LOW);
}
val = IBus.readChannel(12); // get latest value for servo channel 2
if (val > 1700)
{
digitalWrite(OUT3, HIGH);
} else {
digitalWrite(OUT3, LOW);
}
val = IBus.readChannel(13); // get latest value for servo channel 2
if (val > 1700)
{
digitalWrite(OUT4, HIGH);
} else {
digitalWrite(OUT4, LOW);
}
delay(20);
}
[/code]
Der Sketch hat funktioniert und im Versuchsaufbau auch das gemacht was ich wollte.
Aus Platzgründen wollte ich aber ein kleineres Board und habe mich für den Nano every entschieden.
Die "IBusBM.h"-Bibliothek habe ich gemäß Anleitung des Erstellers so umgeschrieben, das sie auch für den Nano every funktioniert. Ich kann den Sketch auch auf das Board hochladen.
Aber leider kommt im Versuchsaufbau nichts bei den Pins an.
Ich hoffe ich habe mein Problem sinnvoll erläutert und ich hoffe ihr könnt mir bei meinem Problem behilflich sein.
Vielen Dank schon mal für eure Hilfe
Markus
Nicht direkt, weil ich so ein Teil auch nicht habe.
Aber ortsübliches Vorgehen ist dann m.E.:
Den IBus- und den Servo-Teil getrennt testen und mögliche Ergebnisse/Eingaben über den seriellen Monitor abhandeln. Dann siehst Du welcher Teil nicht tut und tiefere Untersuchung erfordert - immer vorausgesetzt, beim Umkabeln ist nix Schlimmes passiert.
um ehrlich zu sein, weil ich den anderen jetzt schon da habe
aber wenn ich es auf dem every nicht zu laufen bekomme werde ich mir eh einen nano besorgen
Da die Dinger ja noch rel. preiswert sind, wäre mein Tipp, den Nano kaufen und damit üben. Man kann ja später immer noch umsteigen.
Wenn es dann für dich ein interessantes Hobby geworden ist, brauchst du eh mehr von den Teilen.
Und preiswert geht es auch bei AliExpress, nur mit etwas längerer Wartezeit.
Das sollst Du gar nicht.
In Deinem Programm aus #1 liest Du vom IBus jeweils in eine Variable:
val = IBus.readChannel(10);
Mit dem Wert willst Du dann das entsprechende Servo steuern. Du weiß aber noch nicht, ob und was da eigentlich reinkommt. Also gibst Du es erstmal auf der seriellen Schnittstelle für den seriellen Monitor aus.
Das dachte ich mir so einfach - geht aber nicht, weil Du die lt. Beschreibung Nano Every einzige serielle Schnittstelle ja schon für den IBus nutzt.
Vielleicht kannst Du auf dem Every mit SoftwareSerial eine Ausgabeschnittstelle an anderen Pins erzeugen und - wenn Du den alten Nano noch hast - ihn als Empfänger (auch SoftwareSerial) sozusagen als Router auf den seriellen Monitor verwenden.
Alternativ die Ausgabe über einen FTDI-USB-Adapter und Terminalprogramm direkt an den PC geben.
Ich schlage auch vor einen Arduino mit ATmega328 zu kaufen. Arduino NANO 3.0 mit usb-Serial interface oder arduino MINI oder Arduino MINI PRO oder dessen Nachbauten. bei den beiden letztgenannten brauchst Du zum Upload des Sketches einen externen USB-Serial Adapter.
Warum ewig Zeit verlieren um eine Bibliothek umzuschreiben wenn weniger als 10€ das Problem lösen?
Der Every wird nicht schlecht und Du kannst ihn sicher für ein späteres Projekt verwenden.
wirst du auch zum Dünnbrettbohrer? Wenn es wirklich fehlerfrei kompiliert, muss der Fehler woanders liegen. Ich hätte mir das gern einmal angeschaut. Versprechen kann ich vorab nichts, aber anschauen geht immer.
Da die neueren Controller/Boards vermutlich nie die Verbreitung der uralten Teile finden, muss man nun einmal alte Bibliotheken notfalls selbst anpassen. Das geht umso leichter wenn die Bibliotheken Standard Arduino Funktionen verwenden ohne eigene direkte Registerzugriffe.
In der IDE unter Werkzeuge "Register Emulation" eingeschalten oder ausgeschalten?
Hast du die Lib geändert oder deinen Code? Ich sehe keine Beschreibung zum Lib ändern.
Fakt ist jedenfalls das die Servo Lib unschöne Warnungen erzeugt. Das hat Arduino.cc selbst nicht ordentlich getestet.
Wenn ich die noch unbenutzte Servo.h rausnehme gehts mit der Meldung los.
C:\Arduino IDE Portable\megaAVR0\arduino-1.8.19\portable\sketchbook\libraries\IBusBM\src\IBusBM.cpp:149:10: warning: #warning "Timing only supportted for AVR, ESP32 and STM32 architectures. Use timerid IBUSBM_NOTIMER" [-Wcpp]
#warning "Timing only supportted for AVR, ESP32 and STM32 architectures. Use timerid IBUSBM_NOTIMER"
Die Lib ist nicht für den Every bzw. Uno Wifi 2 mit ATmega4809 geeignet. Die Lib nutzt direkte Registerzugriffe. Das wird so nichts. Leider. Mir scheint er hat den megaavr Support begonnen, ist aber noch nicht fertig. Es ist doch besser den normalen Nano zu verwenden. Schade.