- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 11

Thema: Kann mir jemand auf die Sprünge helfen RC- Kanalschalter mit Nano

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.07.2015
    Ort
    Bayern
    Beiträge
    17

    Kann mir jemand auf die Sprünge helfen RC- Kanalschalter mit Nano

    Hallo liebe Gemeinde,
    ich würde mich sehr freuen wenn mir jemand auf die Sprünge hilft. Bin Neuling auf dem Gebiet und versuche mich am Programmieren.(Leider auch mit Hilfe)
    Ich habe einen Kanalschalter im Netz gefunden den ich für mein Projekt umgewandelt hab.
    Er soll mit einem Schalter der Fernbedienung funktionieren, dabei zählt er die Schalterbetätigungen und addiert sie bis 7. Hat er 7 Schaltzustände erreicht setzt er alle Ausgänge auf 0.
    Der Aufbau funktioniert bei mir leider nur an Kanal 1, ich komm nicht drauf warum der nächste Kanal nicht geschaltet wird.

    Danke für eure Hilfe

    Hier noch der Sketch den ich verwende

    Code:
    //Bibliotheken laden
    //#include "Servo.h"
    #include "makros.h"
    #include "debug.h"
    //#define USE_TIMER_5
    #include "RCReceive.h"
      
    //Globale-Variablen Deklarieren  
    const int AusgabePin[]={7,8,9,10,11,12}; //die 6 Ausgabepins festlegen für die Schaltkanäle
    boolean Anaus[]={LOW,LOW,LOW,LOW,LOW,LOW,LOW}; //Variablen zum Schaltstatus der Kanäle auf LOW deklarieren
      
    int i=0;//Zählervariable für schleifen
    
    //Zeitmanagemant
    unsigned long StartZeit=millis();//Zeitsteuerungsvariable zum Schaltintervall berechnen
    unsigned long VergleichZeit=0;//Zeitsteuerungsvariable zum vergleichen mit SartZeit
    //unsigned long StartZeitKopf=millis();//Zeitsteuerungsvariable zum Schaltintervall berechnen
    //unsigned long VergleichZeitKopf=0;//Zeitsteuerungsvariable zum vergleichen mit StartZeitKopf
      
    unsigned long zaehlerZeit=millis();//Zeitsteuerungsvariable zum zurücksetzen fals die Timeout Zeit errecht wird
    unsigned long Vergleichzaehler=0;//Zeitsteuerungsvariable zum vergleichen mit zaehlerZeit
    boolean w=LOW;//Schaltvariable zum Timeout
    
    //Pinbelegung RC-Kanäle
    const byte PIN_RC = 3;//Variable Empfängerkanal Pin festlegen Kanal 1 Taster
    
    byte rcSignal;// Variable für das Empfängersignal 1 Steuert den Multiswitch
    
    int Kanalzaehler = 0;// Zähler für den zu schaltenden Kanal
    int Schaltwert = 210;// wert ab dem der Zähler erhöht wird. Vergleicht den rcSignal wert ist der Signalwert höhe...
    int schaltzeitk = 80;//kurze schaltzeit ca. eine 10.tel sec zum entprellen
    int schaltzeitl =550;//Lange schaltzeit dreiviertel Sec. zum schalten eines ausganges
    int timeout = 10000;// Timer zum zurücksetzen des Schaltbildes
    int Schaltwertver=0;
      
    int t=0;//Schleifen Zählervariable
    int a=0;//
    int Langeschaltzeit=0;//Prüfvariable ob die Schaltzeit über schaltzeitl gewesen ist
    
    // Der Empfänger
    RCReceive rcKanal1;//Objekt Kanal 1 festlegen Taster
    
    void setup()
    {
      rcKanal1.attachInt(PIN_RC);//Objekt Kanal 1 an Pin binden Switch
      
      pinMode(AusgabePin[0],OUTPUT);//Ausgabepins für die Schaltfunktionen deklarieren
      pinMode(AusgabePin[1],OUTPUT);
      pinMode(AusgabePin[2],OUTPUT);
      pinMode(AusgabePin[3],OUTPUT);
      pinMode(AusgabePin[4],OUTPUT);
      pinMode(AusgabePin[5],OUTPUT);
      //randomSeed(analogRead(0));
      Serial.begin(9600);//Serielle Übertragung durch Kommentar ausgeblendete ist nur zu Kontrollzwecken
    }
      
    void loop()
    {
    //Empfänger überwachen
    if (!rcKanal1.hasError())
      {
       doWork(); // aurufen der "Arbeits-Routine"
      }
      else if (rcKanal1.hasError())  // bei Empfangsproblemen dagegen
      { 
       failSave(); // wird die Failsave-Routine gestartet
      }
    }
    //-------------------------------------------------------------------------------
    //      01 Funktion Arbeit
    //-------------------------------------------------------------------------------
    void doWork()
    {
      rcSignal = rcKanal1.getValue(); // den Empfänger auslesen
      
      Serial.println("anfang:");//Serielle übertragung ausgeblendet
      Serial.println(rcSignal);
      
      //-------------------------------------------------------------------------------
      //      Timeout
      //-------------------------------------------------------------------------------
      if (w==HIGH)//wenn der Timout bereits gstartet ist wird Die Schaltsequenz zurück gesetzt, sofern die Bedingungen erfüllt sind
      {
        Vergleichzaehler=millis()-zaehlerZeit;//Laufzeit des Timout vergleichen
        if (Vergleichzaehler>timeout)
        {
         Kanalzaehler=0;
         a=0;//Kurze schaltzeit für den Kanalzähler zurücksetzen
         Langeschaltzeit=0;//Kanal Schalten zurücksetzen
         StartZeit=millis();// Startzeit neu setzen
         w=LOW;
        }
      }
      //-------------------------------------------------------------------------------
      //      Empfangsignal1 auswerten
      //-------------------------------------------------------------------------------
      if (rcSignal < Schaltwert)//wenn das ausgelesene Empfängersignal kleiner als der schaltwert ist
      {
       if (w==LOW)//ist es der erste schaltvorgang?
       {
         w=!w;//w HIGH setzen
         zaehlerZeit=millis();//Timeout Zeit starten
       }
    
    
       multiswitch();//aufrufen der multiswitch-Routine
       if (Langeschaltzeit==1)//wenn der Schaltimpuls lang war...
       {
         Kanalschalten();}//aufrufen der Kanalschalten-Routine
       }
       else//Werte zurücksetzen wenn das RC-Signal1 nicht in schaltposition ist
       {
        a=0;//Kurze schaltzeit für den Kanalzähler auf null setzen
        Langeschaltzeit=0;//Kanal Schalten auf null setzen
        StartZeit=millis();// Startzeit neu setzen
       }
    }
    //-------------------------------------------------------------------------------
    //      02 Funktion multiswitch zum auslesen des Schaltbildes
    //-------------------------------------------------------------------------------
    void multiswitch()
    {
      VergleichZeit=millis()-StartZeit;//wieviel zeit ist seit dem letzten zurücksetzen der Werte vergangen
      if (VergleichZeit > schaltzeitk)//ist die schaltzeit über der kurzen Schaltzeit??
      {
       if (a==0)// Wird diese schleife zum ersten mal durchlaufen ??
       {
         a=1;//wird auf 1 gesetzt damit der Kanalzäler nur einmal pro Schalterbewegung erhöht wird
         Kanalzaehler++;//den Kanalzähler (Ausgang) um 1 erhöhen
         if (Kanalzaehler>7)//Wenn der Kanalzäler größer als 7...
         {
           Kanalzaehler=0;}// ...ist wird er auf 0 zurückgesetzt
         }
         if (VergleichZeit > schaltzeitl)//Wenn die Schaltzeit lang war
         {
           Langeschaltzeit=1;//wird auf eins gesetzt damit ein Kanal geschaltet wird
           Anaus[Kanalzaehler-1]=!Anaus[Kanalzaehler-1];//Schaltzustand toggeln
         }
       }
    Serial.println(Langeschaltzeit);
    Serial.println(Kanalzaehler);
    }
    //-------------------------------------------------------------------------------
    //      03 Funktion Ausgabekanal schalten
    //-------------------------------------------------------------------------------
    void Kanalschalten()
    {
      //Schaltet einen Kanal an bzw. aus
      switch(Kanalzaehler)
      {
      case 1:// Schaltet Kanal 1
        digitalWrite (AusgabePin[0],Anaus[0]);
      break;
      case 2:// Schaltet Kanal 2
        digitalWrite (AusgabePin[1],Anaus[1]);
      break;
      case 3:// Schaltet Kanal 3
        digitalWrite (AusgabePin[2],Anaus[2]);
      break;
      case 4:// Schaltet Kanal 4
        digitalWrite (AusgabePin[3],Anaus[3]);
      break;
      case 5:// Schaltet Kanal 5
        digitalWrite (AusgabePin[4],Anaus[4]);
      break;
      case 6:// Schaltet Kanal 6
        digitalWrite (AusgabePin[5],Anaus[5]);
      break;
      case 7:// Wenn der Kanalzähler auf 7 steht werden alle Kanäle ausgeschaltet
       digitalWrite (AusgabePin[0],LOW);
       digitalWrite (AusgabePin[1],LOW);
       digitalWrite (AusgabePin[2],LOW);
       digitalWrite (AusgabePin[3],LOW);
       digitalWrite (AusgabePin[4],LOW);
       digitalWrite (AusgabePin[5],LOW);
       //Anaus[0]=LOW;
       
      break;
    }
    
    Kanalzaehler=0;//setzt den Kanalzähler nach dem Schalten eines Kanals zurück
    w=LOW;//Timeout zurücksetzen
    }
    //--------------------------------------------------------------------------------------
    // 08 Funktion FailSave Kanal 1 wird eigentlich nicht gebraucht sieht aber wichtig aus
    //--------------------------------------------------------------------------------------
    void failSave()
    {
    //Blinksignal des Scheinwerfer zur Erkennung das ein Fehler mit dem Empfänger vorliegt
      for (int i=0; i<5; i++)
      {
        digitalWrite(13,HIGH);
        delay(50);
        digitalWrite(13,LOW);
        delay(50);
      }
    }
    Geändert von radbruch (13.01.2016 um 12:19 Uhr) Grund: Code-Tag eingefügt

Ähnliche Themen

  1. Kann mir jemand helfen???
    Von Nasume2 im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 02.01.2012, 22:15
  2. Kann mir jemand helfen
    Von Stinker196 im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 23.11.2008, 19:26
  3. kann mir jemand helfen???
    Von xbgamer im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 22.10.2006, 16:07
  4. kann mir da mal jemand helfen ??
    Von LC-HC im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 10.02.2006, 01:04
  5. [ERLEDIGT] Kann jemand Helfen ????
    Von im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 4
    Letzter Beitrag: 27.02.2004, 20:41

Berechtigungen

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

Solar Speicher und Akkus Tests