-         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Drucktaster einbinden mit der OneButton Library

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    228

    Drucktaster einbinden mit der OneButton Library

    Anzeige

    Hallo ich habe ein kleines Problem mit der Lib von https://www.makerblog.at/2015/01/ard.../#comment-3895

    ich bekomme mein Programm nicht zum laufen

    Code:
    /*
      Analog Input
    
     
    */
    #include "OneButton.h"
    
    #define MOTOR_1  2
    #define MOTOR_2  4
    #define POTI     A0
    #define PWM      9
    #define TASTER   5
    
    #define LED      3
    
    
    OneButton button(TASTER, true);
    //int poti = A0;    // select the input pin for the potentiometer
    
    int poti_Value = 0;  // variable to store the value coming from the sensor
    
    int poti_prozent = 0;
    bool sicherheit = 1;
    
    void setup() {
      // declare the ledPin as an OUTPUT:
      //pinMode(ledPin, OUTPUT);
     Serial.begin(9600);
      //pinMode(MOTOR_1,OUTPUT);
      //pinMode(MOTOR_2,OUTPUT);
      pinMode(LED,OUTPUT);
      pinMode(TASTER,INPUT_PULLUP);
      pinMode(MOTOR_1,OUTPUT);
      pinMode(MOTOR_2,OUTPUT);
      pinMode(PWM,OUTPUT);
      digitalWrite(LED, LOW); 
      poti_prozent = 4;
      // Sicherheitsschaltung Poti auf 0 und Motor Aus
      //poti_Value = analogRead(POTI);
      //poti_prozent = map(poti_Value, 0,1023, 0,100);
    
      pinMode(TASTER, INPUT);
      button.attachClick(clickedIt);
      //button.attachDoubleClick(doubleClickedIt);
    
      
          while( poti_prozent >= 3 )
          {  
              
               digitalWrite(MOTOR_1, HIGH);
               digitalWrite(MOTOR_2, HIGH);
               digitalWrite(LED, HIGH);
               delay(300); 
              poti_Value = analogRead(POTI);
              poti_prozent = map(poti_Value, 0,1023, 0,100);
               digitalWrite(LED, LOW);
               delay(300);
              
          }
    
            
    }
    
    
    void loop() {
      button.tick();
      
    int pwmSpeed;
    
    
    void clickedIt() {
     digitalWrite(LED, HIGH);
     }
     else {
     digitalWrite(LED, LOW);
     }
    
    
    
      // Poti Regelbereich 
      poti_Value = analogRead(POTI);
      poti_prozent = map(poti_Value, 0,1023, 0,100);
      // Ausgabe
      Serial.print("Poti = ");
      Serial.print(poti_prozent);
      Serial.println("% ");
    
      //delay(1000);   
          
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, HIGH);
      
       // Geschwindigkeit regeln
      analogWrite(PWM, poti_Value / 4);
    
      // Drehrichtung Links 
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, LOW);
      
    
      // Drehrichtung Rechts
    
      digitalWrite(MOTOR_1, LOW);
      digitalWrite(MOTOR_2, HIGH);
    
    //digitalWrite(LED, HIGH);
    //delay(1000);
    
      // ENDE  
    }


    Folgende Meldung

    Code:
    Arduino: 1.8.5 (Windows 7), Board: "Arduino Nano, ATmega328P (Old Bootloader)"
    
    C:\Users\Ferdinand\Documents\Arduino\Drehzahlregelung\Drehzahlregelung_2\Drehzahlregelung_2.ino\Drehzahlregelung_2.ino.ino: In function 'void setup()':
    
    Drehzahlregelung_2.ino:43: error: 'clickedIt' was not declared in this scope
    
       button.attachClick(clickedIt);
    
                          ^
    
    C:\Users\Ferdinand\Documents\Arduino\Drehzahlregelung\Drehzahlregelung_2\Drehzahlregelung_2.ino\Drehzahlregelung_2.ino.ino: In function 'void loop()':
    
    Drehzahlregelung_2.ino:71: error: a function-definition is not allowed here before '{' token
    
     void clickedIt() {
    
                      ^
    
    Drehzahlregelung_2.ino:74: error: 'else' without a previous 'if'
    
      else {
    
      ^
    
    exit status 1
    'clickedIt' was not declared in this scope
    
    Dieser Bericht wäre detaillierter, wenn die Option
    "Ausführliche Ausgabe während der Kompilierung"
    in Datei -> Voreinstellungen aktiviert wäre.
    - - - Aktualisiert - - -

    ich habe das Programm mal vorerst fertiggemacht

    Code:
    /*
      Analog Input
    
     
    */
    #include "OneButton.h"
    
    #define MOTOR_1  2
    #define MOTOR_2  4
    #define POTI     A0
    #define PWM      9
    #define TASTER   5
    
    #define LED      3
    
    
    OneButton button(TASTER, true);
    //int poti = A0;    // select the input pin for the potentiometer
    
    int poti_Value = 0;  // variable to store the value coming from the sensor
    
    int poti_prozent = 0;
    bool sicherheit = 1;
    
    void setup() {
      // declare the ledPin as an OUTPUT:
      //pinMode(ledPin, OUTPUT);
     Serial.begin(9600);
      //pinMode(MOTOR_1,OUTPUT);
      //pinMode(MOTOR_2,OUTPUT);
      pinMode(LED,OUTPUT);
      pinMode(TASTER,INPUT_PULLUP);
      pinMode(MOTOR_1,OUTPUT);
      pinMode(MOTOR_2,OUTPUT);
      pinMode(PWM,OUTPUT);
      digitalWrite(LED, LOW); 
      poti_prozent = 4;
      // Sicherheitsschaltung Poti auf 0 und Motor Aus
      //poti_Value = analogRead(POTI);
      //poti_prozent = map(poti_Value, 0,1023, 0,100);
    
      pinMode(TASTER, INPUT);
      button.attachClick(clickedIt);
      //button.attachDoubleClick(doubleClickedIt);
    
      
          while( poti_prozent >= 3 )
          {  
              
               digitalWrite(MOTOR_1, HIGH);
               digitalWrite(MOTOR_2, HIGH);
               digitalWrite(LED, HIGH);
               delay(300); 
              poti_Value = analogRead(POTI);
              poti_prozent = map(poti_Value, 0,1023, 0,100);
               digitalWrite(LED, LOW);
               delay(300);
              
          }
    
            
    }
    
    
    void loop() {
      button.tick();
      
    int pwmSpeed;
    
    
    void clickedIt() {
    
     // LED Drehrichtung Links
     digitalWrite(LED, HIGH);
    
      poti_Value = analogRead(POTI);
      poti_prozent = map(poti_Value, 0,1023, 0,100);
      // Ausgabe
      Serial.print("Poti = ");
      Serial.print(poti_prozent);
      Serial.println("% ");
      // Geschwindigkeit regeln
      analogWrite(PWM, poti_Value / 4);
      // Drehrichtung Links 
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, LOW);
    
     
     }
     else {
    
     // LED Drehrichtung Rechts 
     digitalWrite(LED, LOW);
    
      poti_Value = analogRead(POTI);
      poti_prozent = map(poti_Value, 0,1023, 0,100);
      // Ausgabe
      Serial.print("Poti = ");
      Serial.print(poti_prozent);
      Serial.println("% ");
      // Geschwindigkeit regeln
      analogWrite(PWM, poti_Value / 4);
      // Drehrichtung Rechts
      digitalWrite(MOTOR_1, LOW);
      digitalWrite(MOTOR_2, HIGH);
    
     }
      
    }
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.327
    hallo,
    Code:
    void clickedIt() {
     digitalWrite(LED, HIGH);
     }
     else {
     digitalWrite(LED, LOW);
     }
    was mir hier auffällt:
    das scheint eine eigenständige Funktion zu sein, die müsste dann außerhalb von loop stehen - oder was ist das?

    ich kenne allerdings auch deine "OneButton.h" nicht.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    228
    es scheint das irgendwas mit der einbindung der "OneButton.h" nicht inordnung ist
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2018
    Beiträge
    367
    HaWe hat Recht, denke ich. void clickedIt() steht innerhalb von loop() und wird aber auch in setup() aufgerufen. Das void clickedIt() müsste wohl ausserhalb loop() und setup() stehen.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    228
    Ja stimmt er hat rechtgehabt das mit dem taster funktionirt jetz aber der motor leuft noch nicht keine ahnung warum

    Code:
    /*
      Analog Input
    
     
    */
    #include "OneButton.h"
    
    #define MOTOR_1  A2
    #define MOTOR_2  A4
    #define POTI     A0
    #define PWM      9
    #define TASTER   5
    
    #define LED      3
    
    void clickedIt();
    OneButton button(TASTER, true);
    //int poti = A0;    // select the input pin for the potentiometer
    
    int poti_Value = 0;  // variable to store the value coming from the sensor
    
    int poti_prozent = 0;
    bool sicherheit = 1;
    
    void setup() {
      // declare the ledPin as an OUTPUT:
      //pinMode(ledPin, OUTPUT);
     Serial.begin(9600);
      //pinMode(MOTOR_1,OUTPUT);
      //pinMode(MOTOR_2,OUTPUT);
      pinMode(LED,OUTPUT);
      //pinMode(TASTER,INPUT_PULLUP);
      pinMode(MOTOR_1,OUTPUT);
      pinMode(MOTOR_2,OUTPUT);
      pinMode(PWM,OUTPUT);
      digitalWrite(LED, LOW); 
      poti_prozent = 4;
      // Sicherheitsschaltung Poti auf 0 und Motor Aus
      //poti_Value = analogRead(POTI);
      //poti_prozent = map(poti_Value, 0,1023, 0,100);
    
      //pinMode(TASTER, INPUT);
      button.attachClick(clickedIt);
      //button.attachDoubleClick(doubleClickedIt);
    
      
          while( poti_prozent >= 3 )
          {  
              
               digitalWrite(MOTOR_1, HIGH);
               digitalWrite(MOTOR_2, HIGH);
               digitalWrite(LED, HIGH);
               delay(300); 
              poti_Value = analogRead(POTI);
              poti_prozent = map(poti_Value, 0,1023, 0,100);
               digitalWrite(LED, LOW);
               delay(300);
              
          }
    
            
    }
    bool Drehrichtung = true;
    
    void loop() {
      
           button.tick();
      void clickedIt();
      
      int pwmSpeed;
    
       //delay(200);
       digitalWrite(MOTOR_1, HIGH);
       digitalWrite(MOTOR_2, HIGH);
       delay(200);
      
      if(Drehrichtung == true)
      {
           button.tick();
      void clickedIt();
     // LED Drehrichtung Rechts 
     digitalWrite(LED, LOW);
     
      poti_Value = analogRead(POTI);
      poti_prozent = map(poti_Value, 0,1023, 0,100);
      // Ausgabe
      Serial.print("Poti = ");
      Serial.print(poti_prozent);
      Serial.println("% ");
      // Geschwindigkeit regeln
      analogWrite(PWM, poti_Value / 4);
      // Drehrichtung Rechts
      digitalWrite(MOTOR_1, LOW);
      digitalWrite(MOTOR_2, HIGH);
      }
      else
      {
           button.tick();
      void clickedIt();
      
      // LED Drehrichtung Links
      digitalWrite(LED, HIGH);
    
      poti_Value = analogRead(POTI);
      poti_prozent = map(poti_Value, 0,1023, 0,100);
      // Ausgabe
      Serial.print("Poti = ");
      Serial.print(poti_prozent);
      Serial.println("% ");
      // Geschwindigkeit regeln
      analogWrite(PWM, poti_Value / 4);
      // Drehrichtung Links 
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, LOW);
      
      }
      
    }
    
    void clickedIt()
    {
      
    Drehrichtung = !Drehrichtung;
    
    
     }
    ich denke da #define MOTOR_1 A2 #define MOTOR_2 A4 past was nicht
    Danke
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    708
    Da sind noch so einige Ungereimtheiten Ferdinand

    Schönheitsrepartur:

    Du hast eine "Forward Deklaration" für die Funktion
    clickedIt() gemacht.
    das benötigst Du normalerweise nicht.

    Deine Funktion clickedIt()
    muss einfach ganz nach oben hin.

    Dann rufst Du die Funktion mit void auf,
    staune das er da nicht meckert, sieht auf jeden Fall ungewöhnlich aus....
    Also den Aufruf der Funktion bitte ohne void

    wie das mit den buttons genau funktioniert weis ich nicht,
    aber ich vermute mal, dass durch den Aufruf von
    button.attachClick(clickedIt); in der Setup Funktion
    bei einem Tastendruck automatisch die entsprechende Funktion aufgerufen wird.
    somit darfst Du dann nicht mehr zusätzlich clickedIt in deinef Loop aufrufen.
    Vermutlich musst Du nur immer wieder die Funktion
    button.tick(); in deiner Schleife aufrufen.
    Da steck ich aber im Detail nicht drin, das ist nur eine Vermutung von mir.

    In der eigentlichen Hauptschleife, das scheint ja die Loop zu sein
    setzt Du am Anfang deine beiden Motorbits auf High
    dann folgt deine Abfrage Drehrichtung und dort setzt Du die Motorbits entsprechend,
    danach landet aber die Software wieder oben und setzt die Motorsignale wieder beide auf High.
    damit werden alle 200ms deine Signale beide High, das gibt so nicht wirklich Sinn.


    Wie dem auch sei,
    ich hab mal einiges umgebaut,
    ich kann das weder compilieren noch testen,
    das soll lediglich ein Anhaltspunkt sein
    wie man es vermutlich machen kann:




    -------------
    Code:
    #include "OneButton.h"
    
    #define MOTOR_1  A2
    #define MOTOR_2  A4
    #define POTI     A0
    #define PWM      9
    #define TASTER   5
    #define LED      3
    
    
    OneButton button(TASTER, true);  // wird hier eine Instanz eines Buttons kreiert ??
    
    int  poti_prozent = 0;  
    bool sicherheit   = 1;
    bool Drehrichtung = true;
    
    //-------------------------------------------------------
    // das ist vermutlich die Funktion die automatisch aufgerufen wird
    // was Du durch button.attachClick(clickedIt);  festgelegt hast.
    // Dies Funktion muss vermutlich nie wieder aufgerufen werden.
    void clickedIt()
    {
      Drehrichtung = ! Drehrichtung;
    }
    
    //-------------------------------------------------------
    // hier wird die LED entsprechend der Drehrichtung gesetzt
    // und die beiden benötigten Motorbits entsprechend der Richtung
    void SetDirection(void)
    {
      if (Drehrichtung)                // rechts
      {
        digitalWrite(LED, LOW);        // LED Rechts 
        digitalWrite(MOTOR_1, LOW);    // Motor rechts
        digitalWrite(MOTOR_2, HIGH);
      }
      else                             // links
      {
        digitalWrite(LED, HIGH;        // LED Links 
        digitalWrite(MOTOR_1, HIGH);   // Motor links
        digitalWrite(MOTOR_2, LOW);
      }
    }
    //-------------------------------------------------------
    // Motor Geschwindigkeit setzen
    void SetSpeed(void)
    { int  poti_Value ;
    
      poti_Value   = analogRead(POTI);                 // Potiwert lesen
      poti_prozent = map(poti_Value, 0,1023, 0,100);   // umrechnen 
      analogWrite(PWM, poti_Value / 4);                // Pulsbreite setzen
    }
    //-------------------------------------------------------
    // alle 500ms, also 2 mal pro Sekunde, sollen die Werte ueber die RS232 gesendet werden
    
    void SendData(void)
    { static int tim;
             
      delay(10);                  // eine definierte Zeit warten, ich nehm mal 10ms
      if (tim++ < 50) return;     // wenn Zeit kleiner als 500ms , dann nichts tun
      tim=0;                      // ansonsten Zeitwert wieder auf 0 setzen und senden
    
      // Die Drehrichtung senden
      Serial.print("Richtung : ");
      if (Drehrichtung) Serial.println("rechts");
                   else Serial.println("links");
    
      // Den Potiwert in Prozent senden  
      Serial.print("Poti = ");
      Serial.print(poti_prozent);
      Serial.println("% ");
    }
    //-------------------------------------------------------
    void setup() 
    {
      pinMode(LED    , OUTPUT);
      pinMode(MOTOR_1, OUTPUT);
      pinMode(MOTOR_2, OUTPUT);
      pinMode(PWM    , OUTPUT);
      pinMode(TASTER , INPUT);
    
      pinMode(TASTER,INPUT_PULLUP);    // den braucht man eventuell 
      button.attachClick(clickedIt);   // Die Click Funktion setzen 
    
      Serial.begin(9600);   // RS232 initialisieren
    
      // deine Startup Funktion lass ich mal so stehen, wie sie war.....
      poti_prozent = 4;
      while( poti_prozent >= 3 )
      {  
        digitalWrite(MOTOR_1, HIGH);
        digitalWrite(MOTOR_2, HIGH);
        digitalWrite(LED, HIGH);
        delay(300); poti_Value = analogRead(POTI);poti_prozent = map(poti_Value, 0,1023, 0,100);
        digitalWrite(LED, LOW);
        delay(300);
      }
           
    }
    
    //---------------------------------------
    // Die Hauptschleife ist nun etwas übersichtlicher geworden:
    void loop() 
    {   
      button.tick();
      SetDirection();
      SetSpeed();
      SendData();
    }
    Geändert von Siro (18.08.2018 um 22:42 Uhr)

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    228
    Vielen Dank für die Anregungen und Hilfe Stellung war sehr nützlich hab die Fehler rausbekommen zumindest läuft das Programm jetzt so wie es soll jetzt fehlt nur noch eine 7 Segment anzeige die mir den Prozentwert anzeigt

    hir noch mal mein aktueller code

    Code:
    /*
      Analog Input
    
     
    */
    #include "OneButton.h"
    
    #define MOTOR_1  A2
    #define MOTOR_2  A4
    #define POTI     A0
    #define PWM      9
    #define TASTER   5
    
    #define LED      3
    
    bool sto = 0;
    
    
    
    
    
    //void clickedIt();
    OneButton button(TASTER, true);
    //int poti = A0;    // select the input pin for the potentiometer
    
    int poti_Value = 0;  // variable to store the value coming from the sensor
    
    int poti_prozent = 0;
    bool sicherheit = 1;
    
    void setup() {
      // declare the ledPin as an OUTPUT:
      //pinMode(ledPin, OUTPUT);
     Serial.begin(9600);
      //pinMode(MOTOR_1,OUTPUT);
      //pinMode(MOTOR_2,OUTPUT);
      pinMode(LED,OUTPUT);
      //pinMode(TASTER,INPUT_PULLUP);
      pinMode(MOTOR_1,OUTPUT);
      pinMode(MOTOR_2,OUTPUT);
      pinMode(PWM,OUTPUT);
      digitalWrite(LED, LOW); 
      poti_prozent = 4;
      // Sicherheitsschaltung Poti auf 0 und Motor Aus
      //poti_Value = analogRead(POTI);
      //poti_prozent = map(poti_Value, 0,1023, 0,100);
    
      //pinMode(TASTER, INPUT);
      button.attachClick(clickedIt);
      button.attachDoubleClick(doubleClickedIt);
    
      
          while( poti_prozent >= 3 )
          {  
               Serial.println("Poti zu Hoch ! ! !");
               digitalWrite(MOTOR_1, HIGH);
               digitalWrite(MOTOR_2, HIGH);
               digitalWrite(LED, HIGH);
               delay(60); 
              poti_Value = analogRead(POTI);
              poti_prozent = map(poti_Value, 0,1023, 0,100);
               digitalWrite(LED, LOW);
               delay(60);
              
          }
    
            
    }
    bool Drehrichtung = true;
    
    void loop() {
     button.tick();
     stopp();
     
           
      //void clickedIt();
      
      int pwmSpeed;
    
       //delay(200);
       //digitalWrite(MOTOR_1, HIGH);
       //digitalWrite(MOTOR_2, HIGH);
       //delay(200);
      
      if(Drehrichtung == true)
      {
           button.tick();
           stopp();
      //void clickedIt();
     // LED Drehrichtung Rechts 
     digitalWrite(LED, LOW);
     
      poti_Value = analogRead(POTI);
      poti_prozent = map(poti_Value, 0,1023, 0,100);
      // Ausgabe
      Serial.print("Rechts Poti = ");
      Serial.print(poti_prozent);
      Serial.println("% ");
      
      // Drehrichtung Rechts
      digitalWrite(MOTOR_1, LOW);
      digitalWrite(MOTOR_2, HIGH);
      
      // Geschwindigkeit regeln
      analogWrite(PWM, poti_Value / 4);
      
      }
      else
      {
            button.tick();
            stopp();
      //void clickedIt();
      
      // LED Drehrichtung Links
      digitalWrite(LED, HIGH);
    
      poti_Value = analogRead(POTI);
      poti_prozent = map(poti_Value, 0,1023, 0,100);
      // Ausgabe
      Serial.print("Links Poti = ");
      Serial.print(poti_prozent);
      Serial.println("% ");
    
      // Drehrichtung Links 
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, LOW);
      
      // Geschwindigkeit regeln
      analogWrite(PWM, poti_Value / 4);
      
      
      }
    
    
    
    
      
    }
    
    void clickedIt()
    {
    
      Drehrichtung = !Drehrichtung;
      
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, HIGH);
      
      
      digitalWrite(LED, HIGH);
      delay(100); 
      digitalWrite(LED, LOW);
      delay(100);
      digitalWrite(LED, HIGH);
      delay(100); 
      digitalWrite(LED, LOW);
      delay(100);
      
      
     }
     
    void doubleClickedIt()
    {
      sto = !sto;
      
     }
    
     void stopp(void)
    {
      while(sto == true )
      {
       button.tick();
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, HIGH);
    
       Serial.println("STOPP!!!");
      
      
      digitalWrite(LED, HIGH);
      delay(50);
      button.tick(); 
        delay(50);
      button.tick(); 
        delay(50);
      button.tick();
        delay(50);
      button.tick(); 
        delay(50);
      button.tick();  
      digitalWrite(LED, LOW);
      delay(50);
      button.tick(); 
        delay(50);
      button.tick(); 
        delay(50);
      button.tick();
        delay(50);
      button.tick(); 
        delay(50);
      button.tick(); 
      
      }
      
    }
    Geändert von Ferdinand (19.08.2018 um 02:57 Uhr)
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker Avatar von Ferdinand
    Registriert seit
    10.09.2004
    Ort
    Stuttgart
    Alter
    38
    Beiträge
    228
    Mein Programm macht den Drehrichtung wechsel nicht sauber ich muss mehrmals die Taste türken bis er wechselt

    Code:
    /*
      Analog Input
    
     
    */
    #include "OneButton.h"
    
    #define MOTOR_1  A2
    #define MOTOR_2  A4
    #define POTI     A0
    #define PWM      9
    #define TASTER   5
    
    #define LED      3
    
    bool sto = 0;
    
    
    
    
    
    //void clickedIt();
    OneButton button(TASTER, true);
    //int poti = A0;    // select the input pin for the potentiometer
    
    int poti_Value = 0;  // variable to store the value coming from the sensor
    
    int poti_prozent = 0;
    bool sicherheit = 1;
    
    void setup() {
      // declare the ledPin as an OUTPUT:
      //pinMode(ledPin, OUTPUT);
     //Serial.begin(9600);
      //pinMode(MOTOR_1,OUTPUT);
      //pinMode(MOTOR_2,OUTPUT);
      pinMode(LED,OUTPUT);
      //pinMode(TASTER,INPUT_PULLUP);
      pinMode(MOTOR_1,OUTPUT);
      pinMode(MOTOR_2,OUTPUT);
      pinMode(PWM,OUTPUT);
      digitalWrite(LED, LOW); 
      poti_prozent = 4;
      // Sicherheitsschaltung Poti auf 0 und Motor Aus
      //poti_Value = analogRead(POTI);
      //poti_prozent = map(poti_Value, 0,1023, 0,100);
    
      //pinMode(TASTER, INPUT);
      button.attachClick(clickedIt);
      button.attachDoubleClick(doubleClickedIt);
    
      
          while( poti_prozent >= 3 )
          {  
               //Serial.println("Poti zu Hoch ! ! !");
               digitalWrite(MOTOR_1, HIGH);
               digitalWrite(MOTOR_2, HIGH);
               digitalWrite(LED, HIGH);
               delay(60); 
              poti_Value = analogRead(POTI);
              poti_prozent = map(poti_Value, 0,1023, 0,100);
               digitalWrite(LED, LOW);
               delay(60);
              
          }
            
    }
    bool Drehrichtung = true;
    
    void loop() {
     button.tick();
     stopp();
     
           
      //void clickedIt();
      
      int pwmSpeed;
    
       //delay(200);
       //digitalWrite(MOTOR_1, HIGH);
       //digitalWrite(MOTOR_2, HIGH);
       //delay(200);
      
      if(Drehrichtung == 1)
      {
           button.tick();
           stopp();
      //void clickedIt();
     // LED Drehrichtung Rechts 
     digitalWrite(LED, LOW);
     
      poti_Value = analogRead(POTI);
      poti_prozent = map(poti_Value, 0,1023, 0,100);
      // Ausgabe
      //Serial.print("Rechts Poti = ");
      //Serial.print(poti_prozent);
      //Serial.println("% ");
      
      // Drehrichtung Rechts
      digitalWrite(MOTOR_1, LOW);
      digitalWrite(MOTOR_2, HIGH);
      
      // Geschwindigkeit regeln
      analogWrite(PWM, poti_Value / 4);
      
      }
    
            button.tick();
            stopp();
      
      if(Drehrichtung == 0)
      {
            button.tick();
            stopp();
      //void clickedIt();
      
      // LED Drehrichtung Links
      digitalWrite(LED, HIGH);
    
      poti_Value = analogRead(POTI);
      poti_prozent = map(poti_Value, 0,1023, 0,100);
      // Ausgabe
      //Serial.print("Links Poti = ");
      //Serial.print(poti_prozent);
      //Serial.println("% ");
    
      // Drehrichtung Links 
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, LOW);
      
      // Geschwindigkeit regeln
      analogWrite(PWM, poti_Value / 4);
      
      
      }
            button.tick();
            stopp();
    }
    
    void clickedIt()
    {
    
      Drehrichtung = !Drehrichtung;
      
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, HIGH);
      
      
      digitalWrite(LED, HIGH);
      delay(100);
      
      digitalWrite(LED, LOW);
      delay(100);
     
      digitalWrite(LED, HIGH);
      delay(100);
    
      digitalWrite(LED, LOW);
      delay(100);
     
      
      
     }
     
    void doubleClickedIt()
    {
      sto = !sto;
      
     }
    
     void stopp(void)
    {
      while(sto == true )
      {
       button.tick();
      digitalWrite(MOTOR_1, HIGH);
      digitalWrite(MOTOR_2, HIGH);
    
       //Serial.println("STOPP!!!");
      
      
      digitalWrite(LED, HIGH);
      delay(50);
      button.tick(); 
        delay(50);
      button.tick(); 
        delay(50);
      button.tick();
        delay(50);
      button.tick(); 
        delay(50);
      button.tick();  
      digitalWrite(LED, LOW);
      delay(50);
      button.tick(); 
        delay(50);
      button.tick(); 
        delay(50);
      button.tick();
        delay(50);
      button.tick(); 
        delay(50);
      button.tick(); 
      
      }
      
    }
    habe schreiben erst heute gelernt.

    bin legasteniger.

    by Ferdinand.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von HaWe
    Registriert seit
    09.10.2014
    Beiträge
    3.327
    das könnte was mit dem debounce-Verhalten in deiner Button lib zu tun haben, ich verwende und kenne diese aber nicht, ich mache es ganz anders (was dir hier jetzt aber auch nicht hilft).
    Die Doku zu deiner Lib hat aber dazu sicher irgendwelche Tipps.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    708
    Meine Vermutung:
    Deine Funktion clickedIt braucht mehr als 400 Millisekunden wegen deiner blinkenden Led,
    da bekommt er die Tastendrücke nicht mit.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. C-Library in BASCOM einbinden??
    Von Jon im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 20.11.2009, 19:26
  2. Library einbinden
    Von fofi1 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 03.02.2009, 23:48
  3. Einbinden einer Library auf Mikrocontroller
    Von SummerTime im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 25.03.2008, 20:53
  4. MSDN Library in MS Visual Studio.Net 2003 Prof einbinden???
    Von sg10241024 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 5
    Letzter Beitrag: 13.02.2005, 15:28
  5. drucktaster entprellen
    Von pebisoft im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 06.01.2005, 08:49

Berechtigungen

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