DonaldStrehl Posted November 2, 2021 Posted November 2, 2021 Hallo, ich habe folgendes vor und benötige ein bisschen Unterstützung. Meine Absicht ist es, mittels eines Arduino Nano oder UNO die analogen Anzeigen der Viper zum Leben zu erwecken. Dazu stelle ich mir vor den Nano/UNO per I2C an ein PCA 9586 anzuschließen. Dieser soll dann 11 Servos steuern. Das PCA9586 Board wird mit einer externen Spannungsversorgung von 5 Volt gespeist um die Servos mit Strom zu versorgen. Bei den ServoOutput Commands von DCS Bios muss ich den PIN angeben, da kann ich ja nicht den vom PCA9586 nehmen. Woher soll der Nano/Uno wissen das an dem PCA9586 Board an Pin 2 der Servo für Oil Pressure ist. Ich denke es muss die Verbindung in Form einer Variablen vom UNO an das PCA 9586 in den ServoOutput Commands gesetzt werden. Meine Idee war die Funktion pwm.setPWM einer Variablen zuzuweisen und diese Variable anstelle des Pins einzutragen. Allerdings funktioniert es nicht. Hat jemand Ideen oder Vorschläge wie das gelöst werden kann? //#define DCSBIOS_DEFAULT_SERIAL #define DCSBIOS_IRQ_SERIAL #include "DcsBios.h" #include <Arduino.h> #include <Servo.h> #include <Adafruit_PWMServoDriver.h> #include <Wire.h> Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); int pwm.setPWM(2) = oil DcsBios::ServoOutput engineOilPressure(0x44cc, oil, 544, 2400); //DcsBios::ServoOutput engineNozzlePosition(0x44ce,PIN, 544, 2400); //DcsBios::ServoOutput engineTachometer(0x44d0,PIN, 544, 2400); //DcsBios::ServoOutput engineFtit(0x44d2,PIN, 544, 2400); //DcsBios::ServoOutput sysaPressure(0x44c8,PIN, 544, 2400); //DcsBios::ServoOutput sysbPressure(0x44ca,PIN, 544, 2400); //DcsBios::ServoOutput cockpitAlititude(0x44e6,PIN, 544, 2400); //DcsBios::ServoOutput oxygenPressure(0x44e8,PIN, 544, 2400); //DcsBios::ServoOutput fuelFr(0x44de,PIN, 544, 2400); //DcsBios::ServoOutput fuelAl(0x44dc,PIN, 544, 2400); void setup() { pwm.begin(); pwm.setPWMFreq(50); DcsBios::setup(); } void loop() { DcsBios::loop(); }
DonaldStrehl Posted November 4, 2021 Author Posted November 4, 2021 (edited) Ich habe jetzt erstmal versucht nur einen Servo an den Nano anzuschließen. Allerdings macht er nicht das was er soll. Als Beispiel die ENGINE RPM wenn der Schubhebel auf 100 % steht bewegt sich der Servo allerdings dreht er sich solange bis er irgendwann zu heiß wird und ich abschalten muss. Hat das schonmal jemand gehabt? //#define DCSBIOS_DEFAULT_SERIAL #define DCSBIOS_IRQ_SERIAL #include <Arduino.h> #include <Servo.h> #include "DcsBios.h" //DcsBios::ServoOutput engineOilPressure(0x44cc, 3, 8000, 544); //DcsBios::ServoOutput engineNozzlePosition(0x44ce,PIN, 544, 2400); DcsBios::ServoOutput engineTachometer(0x44d0,3, 50, 200, [](unsigned int newValue) -> unsigned int { // diese Funktion muss den Wert, den DCS-BIOS sendet (zwischen 0 und 65535) // in die Pulsbreite fuer den Servo umrechnen return map(newValue, 0, 65535, 50, 200); }); //DcsBios::ServoOutput engineFtit(0x44d2,PIN, 544, 2400); //DcsBios::ServoOutput sysaPressure(0x44c8,PIN, 544, 2400); //DcsBios::ServoOutput sysbPressure(0x44ca,PIN, 544, 2400); //DcsBios::ServoOutput cockpitAlititude(0x44e6,PIN, 544, 2400); //DcsBios::ServoOutput oxygenPressure(0x44e8,PIN, 544, 2400); //DcsBios::ServoOutput fuelFr(0x44de,PIN, 544, 2400); //DcsBios::ServoOutput fuelAl(0x44dc,PIN, 544, 2400); void setup() { DcsBios::setup(); } void loop() { DcsBios::loop(); } Edited November 4, 2021 by DonaldStrehl
Cupra Posted November 5, 2021 Posted November 5, 2021 Ich verwende bei mir für Analoge Anzeigen eigentlich nur Aircores und keine Servos. Servos sind da manchmal sehr zickig Wobei ich auch 0 Erfahrung noch mit DCS hab, das fange ich erst in den Weihnachtsferien an.... DCS F-16C Blk. 40/42 :helpsmilie: Candidate - 480th VFS - Cupra | 06
DonaldStrehl Posted November 7, 2021 Author Posted November 7, 2021 Schade, ich habe jetzt alles hinbekommen, nur die analogen Anzeigen nicht. Ich hab gemerkt irgendwann gehen einem die USB Buchsen aus. Da möchte ich mir ein paar sparen und es mit diesem PCA Board zu realisieren.
Recommended Posts