-         

Ergebnis 1 bis 3 von 3

Thema: RC Empfänger auswerten...

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.02.2013
    Beiträge
    51

    RC Empfänger auswerten...

    Anzeige

    Hallo Leute,
    ich möchte mit meinen Arduino einen RC Empfänger auswerten. Allerdings gleich 5 Kanäle.

    Ich habe mal im Netz rumgeschaut und bin auf die Datei #include <RCReceive.h> gestoßen.

    Anbei dieses Beispiel:

    Code:
    include "makros.h"
    #include "debug.h"
    #include "RCReceive.h"
    
    const byte PIN_RC = 7; 
    
    // Der Empfänger
    RCReceive rcReceiver;
    
    void setup() {
       Serial.begin(9600);
      rcReceiver.attach(PIN_RC);
    
      // put your setup code here, to run once:
    }
    
    void loop() {
      // Aktuellen RC-Wert lesen
      rcReceiver.poll();
    
      // Nullpunktsbestimmung ?
      if (rcReceiver.hasNP() && !rcReceiver.hasError()) {
        doWork();
      } else if (rcReceiver.hasError()) {
        // Fehlerbehandlung failsafe oder sowas...
      }
    }
    
    void doWork() {
      byte value = rcReceiver.getValue();
    Serial.print(value);
      // put your main code here, to run repeatedly: 
    
    }
    Dieser läuft auch wunderbar... aber wenn ich nun mehr als einen Kanal nutze wird der Script unglaublich Langsam.


    Ich möchte eine Kamera über meine Funke bedienen. Dafür schalte ich mit Dioden die einzelnen Schalter -> das geht wunderbar.

    Würde mich freuen wenn mir jemand bei den RC Problem helfen könnte.


    MFG

    - - - Aktualisiert - - -


    Der Zweite Code laggt:
    Code:
    #include "makros.h"
    #include "debug.h"
    #include "RCReceive.h"
    
    int zoomin = 3;
    int zoomout = 5;
    int foto = 4;
    int Focus = 2;
    int Video = 6;
    
    
    
    const byte PIN_RC7 = 7; 
    const byte PIN_RC8 = 8; 
    // Der Empfänger
    RCReceive rcReceiver;
    RCReceive rcReceiver2;
    void setup() {
      rcReceiver.attach(PIN_RC7);
      rcReceiver2.attach(PIN_RC8);
      // put your setup code here, to run once:
    }
    
    void loop() {
      pinMode(zoomin, OUTPUT); 
      pinMode(zoomout, OUTPUT); 
      // Aktuellen RC-Wert lesen
      rcReceiver.poll();
      rcReceiver2.poll();
    
      // Nullpunktsbestimmung ?
      if (rcReceiver.hasNP() && !rcReceiver.hasError()) {
        zoomfunktion();
      } else if (rcReceiver.hasError()) {
        // Fehlerbehandlung failsafe oder sowas...
      }
      
        if (rcReceiver2.hasNP() && !rcReceiver2.hasError()) {
        fotofunktion();
      } else if (rcReceiver2.hasError()) {
        // Fehlerbehandlung failsafe oder sowas...
      }
    }
    
    void zoomfunktion() {
      byte zoom = rcReceiver.getValue();
    
     //Zoom
    if(zoom > 150){
      digitalWrite(zoomin, HIGH);   
      
    }else{
      digitalWrite(zoomin, LOW); 
      }
      
      if(zoom < 100){
      digitalWrite(zoomout, HIGH);  
      
    }else{
      digitalWrite(zoomout, LOW); 
      }
    
    
      
    
    
    }
    
    void fotofunktion () {
      //Foto
     byte foto = rcReceiver2.getValue();
     
    if(foto > 150){
      digitalWrite(foto, HIGH);   
      
    }else{
      digitalWrite(foto, LOW); 
      }
      }
    Geändert von Spacecam (07.05.2015 um 10:36 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Rabenauge
    Registriert seit
    13.10.2007
    Ort
    Osterzgebirge
    Alter
    49
    Beiträge
    1.284
    Da, wo du das "gefunden" hast, steht auch, wie mans macht, wenn man es eilig hat.
    Dafür gibts dann die Interrupt-Methode. Das hat man davon, wenn man einfach nur bissel was zusammenkopiert, aber die Doku nicht liest. Willie hat auf seiner Seite alles wunderschön erklärt und auch, was _nicht_ geht.
    Grüssle, Sly
    ..dem Inschenör ist nix zu schwör..

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beiträge
    2.523
    rcReceiver.poll();

    Ohne weiter nachzusehen denke ich mal da liegt das Problem.
    Deshalb die Empfehlung der "Interrupt Methode".


    http://de.wikipedia.org/wiki/Polling_(Informatik)


    Nachteile:

    • Durch Polling ist häufig die Leistungsfähigkeit von Programmen nicht-deterministisch (z. B. variierende FPS) und meistens geringer als mit Alternativlösungen.
    • Die Effizienz bei der Verwendung von Systemressourcen kann signifikant geringer sein als Alternativansätze. Beispielsweise kann eine naive Polling-Implementierung, z. B. ein mit maximaler Geschwindigkeit pollendes Programm, die Systemlast auf 100 % treiben (mit unnötigem Stromverbrauch und Abwärme), wogegen eine Event-basierte- oder Hardwareinterrupt-Lösung praktisch keine Systemressourcen verbraucht.

Ähnliche Themen

  1. RC Empfänger auswerten
    Von Spacecam im Forum Raspberry Pi
    Antworten: 4
    Letzter Beitrag: 02.10.2013, 22:38
  2. RC-Empfänger Auswerten
    Von MiniMax im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 66
    Letzter Beitrag: 31.03.2010, 18:26
  3. RC Empfänger auswerten
    Von YaNnIk im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 09.01.2010, 00:09
  4. RC Empfänger/Servosignal auswerten.
    Von Involut im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 21.02.2008, 17:49
  5. 8 Kanal RC-Empfänger auswerten
    Von CountryYankey im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 21.09.2006, 22:27

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •