Ich bin mal wieder an ein Problem gestoßen.
Und zwar möchte ich mit meinem AUX Channel vom RC Empfänger durch verschiedene Modi schalten.
In diesem Sketch habe ich das mit einem Taster den wechsel von den Modi realisiert:
enum {ONMODE, BLINKMODE, GELB, OFFMODE}; // symbolische Konstanten für die Betriebsarten
int mode = OFFMODE; // Beim Start LED aus
int blauPin = 9;
int gelbPin1 = 6;
int gelbPin2 = 5;
int gelbPin3 = 4;
int gelbPin4 = 3;
int buttonPin = 7;
long interval = 500; // interval at which to blink (milliseconds)
void setup() {
pinMode(blauPin, OUTPUT); // LED Blau
pinMode(gelbPin1, OUTPUT); // LED Gelb1
pinMode(gelbPin2, OUTPUT); // LED Gelb2
pinMode(gelbPin3, OUTPUT); // LED Gelb3
pinMode(gelbPin4, OUTPUT); // LED Gelb4
pinMode(buttonPin, INPUT); // Signal - Taster
}
boolean buttonPressed() // Taster abfragen auf drücken des Buttons
{
static boolean lastButtonState;
boolean buttonState=digitalRead(buttonPin);
if (buttonState!=lastButtonState) // Status hat sich geändert
{
lastButtonState=buttonState; // letzten Status merken
if (buttonState==HIGH) return true; // Status hat sich auf "gedrückt" geändert
}
return false;
}
void loop() { // Loopfunktion nach dem EVA-Prinzip: Eingabe - Verarbeitung - Ausgabe
// Eingabe (Taster abfragen)
if (buttonPressed())
{
mode++;
if (mode>OFFMODE) mode=ONMODE;
}
// Verarbeitung
int blaublinkState = LOW; // von OFFMODE ausgehen
int blinkState = LOW;
int gelbblinkState = LOW;
if (mode==ONMODE)
blaublinkState = HIGH,
gelbblinkState = HIGH; // einschalten bei ONMODE
else if (mode==BLINKMODE)
blaublinkState = (millis()/interval)%2,
gelbblinkState = HIGH; // Blinkstatus bei BLINKMODE
else if (mode==GELB)
gelbblinkState = (millis()/interval)%2,
blaublinkState = HIGH;
// Ausgabe
digitalWrite(blauPin,blaublinkState);
digitalWrite(gelbPin1,gelbblinkState);
digitalWrite(gelbPin2,gelbblinkState);
digitalWrite(gelbPin3,gelbblinkState);
digitalWrite(gelbPin4,gelbblinkState);
delay(5); // kurzes delay zum Entprellen des Tasters
}
Nun möchte ich das ganze mit dem AUX realisieren.
Ich benutze die Werte bisher so. (Zum testen)
// AUX Test.ino
int AUX; //Variable AUX
int pin = 11;
int pingelb = 6;
int pinblau = 9;
void setup() {
pinMode(pin, INPUT);
pinMode(pinblau, OUTPUT);
pinMode(pingelb, OUTPUT);
}
void loop() {
AUX = pulseIn(pin, HIGH); //PWM vom Empfänger messen AUX
AUX = map(AUX, 1073, 1856, 0, 100); //Arbeitswerte erzeugen (die ersten beiden Werte aus min / max des Kanals ableiten)
if (AUX >-50 && AUX <50)
{
digitalWrite(pinblau, HIGH);
}
else{
digitalWrite(pinblau, LOW);
}
if (AUX >50 && AUX <150)
{
for(int i=0; i<5; i++){
digitalWrite(pinblau, HIGH);
digitalWrite(pingelb, HIGH);
delay(500);
digitalWrite(pingelb, LOW);
delay(500);
}
}
}
Die PWM Werte vom AUX schwanken ein wenig.
1073 +/- 1
1856 +/- 4
Daher funktionieren vergleiche nicht so gut (oder ich kenn DEN richtigen Befehl noch nicht)
Zwischen diesen beiden Werten kann ich hin und her schalten und möchte pro "umschalten" einen Modi wechseln. Quasi aus einem Schalter einen Taster machen
Ich hoffe ihr könnt mir beim verschmelzen helfen, bzw. mein Problem lösen.
anbei noch ein Bild meines Aufbaus. Die beiden Kabel die ins Nichts gehen sind am Empfänger. (EDIT: Kann im Moment das Bild nnicht uploaden)
Gruß
Alex