Schritt 6: Zweites Programm: Servo-Ausgang
Nun beginnt der Spaß! Mit dem Programm, die, das ich bisher beschrieben habe, können einige Servo-Ausgabe mit der Standard-Servo-Bibliothek hinzufügen. Ich habe auch beschlossen, ein Array für die Eingabedaten anstelle von acht separaten Variablen verwenden. Haben Sie eine Uno, die ich verwenden werde, alles, was Sie tun müssen ist die Pin-Lage-Variablen ändern.
Dies wird Skizze wird alle 8 Kanäle des RC-Empfängers zu lesen und die Eingabewerte über serial Monitor.
Programmiert für den Arduino MEGA 2560
Mitgelieferten Bibliotheken
#include < Servo.h >
Definieren Sie Variablen:
const Int ChA = 22; Konstante Variablen in Bezug auf Pin-Positionen
const Int ChB = 27;
const Int ChC = 30;
const Int KHK = 35;
const Int ChE = 38;
const Int ChF = 43;
const Int ChG = 46;
const Int ChH = 51;
Grenzen für die Signalkonditionierung
const Int lo = 920;
const Int Hallo = 1640;
const Int Deadlo = 1270;
const Int Deadhi = 1290;
const Int Mitte = 1280;
Int ch [8]; Array zum Speichern und Anzeigen der Werte der einzelnen Kanäle
Int ch4; Servo-Output-Variable
Servo-Lenkung; Lenkservo
die Setup-Routine ausgeführt wird, wenn Sie Reset drücken:
void setup()
{
serielle Kommunikation bei 9600 Bits pro Sekunde zu initialisieren:
Serial.Begin(9600);
Input-Pins:
pinMode(chA,INPUT);
pinMode(chB,INPUT);
pinMode(chC,INPUT);
pinMode(chD,INPUT);
pinMode(chE,INPUT);
pinMode(chF,INPUT);
pinMode(chG,INPUT);
pinMode(chH,INPUT);
Servoausgänge:
Steer.Attach(2); PWM Pin 2 Lenkservo zuordnen
}
Hauptfenster des Programms
void loop()
{
Lesen Sie die Eingangskanäle
ch [0] = PulseIn (ChA, HIGH); Lesen und Speichern von Kanal 1
ch [1] = PulseIn (ChB, HIGH);
ch [2] = PulseIn (ChC, HIGH);
ch [3] = PulseIn (KHK, HIGH);
ch [4] = PulseIn (ChE, HIGH);
ch [5] = PulseIn (ChF, HIGH);
ch [6] = PulseIn (ChG, HIGH);
ch [7] = PulseIn (ChH, HIGH);
Input-Signalkonditionierung
für (Int ich = 0; ich < = 8; i ++) //Signal Klimaanlage Schleife
{
Wenn (ch [i] < = lo) //Trim Lärm vom unteren Ende
{
ch [i] = lo;
}
Wenn (ch [i] < = Deadhi & & ch [i] > = Deadlo) //Create Dead-Band
{
ch [i] = Center;
}
Wenn (ch [i] > = hi) //Trim Lärm vom oberen Ende
{
ch [i] = Hallo;
}
}
Lenkung Steuerausgang auf Kanal 4
CH4 = ch [3];
Wenn (ch4 > = lo & & ch4 < = Deadlo)
{
CH4 = Karte (ch4, lo, Deadlo, 0, 90);
}
ElseIf (ch4 == Zentrum)
{
CH4 = 90;
}
ElseIf (ch4 > = Deadhi & & ch4 < = Hallo)
{
CH4 = Karte (ch4, Deadhi, Hallo, 90, 180);
}
Steer.Write(CH4);
Serielle Ausgänge
Serial.Print ("Ch1:"); Display-Text-String auf Serial Monitor, Variablen zu unterscheiden
Serial.Print (ch[0]); Drucken Sie im Wert von Kanal 1
Serial.Print ("|");
Serial.Print ("Ch2:");
Serial.Print (ch[1]);
Serial.Print ("|");
Serial.Print ("Ch3:");
Serial.Print (ch[2]);
Serial.Print ("|");
Serial.Print ("Ch4:");
Serial.Print (ch[3]);
Serial.Print ("|");
Serial.Print ("Ch5:");
Serial.Print (ch[4]);
Serial.Print ("|");
Serial.Print ("Ch6:");
Serial.Print (ch[5]);
Serial.Print (& q Uot; | ");
Serial.Print ("Ch7:");
Serial.Print (ch[6]);
Serial.Print ("|");
Serial.Print ("Ch8:");
Serial.println (ch[7]);
Serial.Print ("Lenkung Ausgabe:");
Serial.println (ch4);
}
Ich gehe davon aus, dass das Servo einen Nervenzusammenbruch erlitt und einen leichten Tick entwickelt? Das terminal-Fenster bestätigt, dass die Räder einfach nur aus Ihrem Projekt nun gefallen? Bevor Sie Ihre Servo oder Arduino in der Mutter Haus zu begehen ist es etwas, das nicht umgangen werden kann. Das Problem ist, wie die Arduino-Servo-Bibliothek das gewünschte Ausgangssignal erzeugt. Es unterbricht das Hauptprogramm, 50 Hz Puls beizubehalten und wird in Konflikt mit der Pulsein Funktion korrumpieren Valuesbeing lesen. Sowohl sind die Servo-Bibliothek und Pulsein Interrupt basiert aber suchen welches wir zu ersetzen? Ich entschied mich für die Servo-Bibliothek nach vielen Google-Fu zu beseitigen.