- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 4 von 4

Thema: start-taster

  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180

    start-taster

    Anzeige

    Praxistest und DIY Projekte
    hallo allerseits,

    ich habe mir einen start-taster "gebastelt". Zwischen "masse" und "digitapin-5" habe ich einen taster geschaltet, es muss - wie hier am beispiel "blink" dargestellt - dieser code "drumherum" gebaut werden:
    Code:
    #include <Bounce2.h>
    #include <Wire.h>
    
    
    uint8_t start, halt;
    
    
    Bounce debouncer = Bounce();
    
    
    void setup()
    {
      pinMode(13, OUTPUT);
      pinMode(5, INPUT_PULLUP);
      Serial.begin(115200);
      digitalWrite(5, HIGH);
      debouncer.attach(5);
      debouncer.interval(5);
    }
    
    
    
    
    void loop()
    {
    
    
      start = digitalRead(5);
    
    
      if (start == LOW)
        while (1)
        {
          {
            Serial.println(start);
    
            digitalWrite(13, HIGH);
            delay(500);
            digitalWrite(13, LOW);
            delay(500);
    
            /*
            halt = digitalRead(5);
            if (halt == LOW) digitalWrite(5, LOW);
            */
          }
        }
    }
    das mit dem anhalten ("halt" auskommentiert) funktioniert -noch- nicht....

    gibt es evtl. schon eine einfachere möglichkeit?
    Geändert von inka (18.07.2016 um 19:14 Uhr)

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Ich hätts so versucht (ungetestet):
    Code:
    #include <Bounce2.h>
    #include <Wire.h>
    
    boolean start = false;
    Bounce  pin5  = Bounce();
    
    void setup() {
      pinMode(5, INPUT_PULLUP);
      Serial.begin(115200);
      pin5.attach(5);
      pin5.interval(5);
    }
    
    void loop() {
      if(pin5.update()) {
        if(pin5.fell()) { 
          start = !start; // toggle start each time button is pressed
        }
      }
    
      if(start) {
        Serial.println("started!");
      }
    }

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    es funktioniert, danke...

    ich poste hier mal den code wo ich deine lösung implementiert habe, der hintere bereich ist hier nicht so interessant, da sind nur die einzelnen funktionen fürs fahren mit dem robby definiert...

    Das starten lässt sich auf beide arten, die in dem code drinn sind super bewerkstelligen, die auskommentierte, mit der "start_taster_1()" funktion funktioniert natürlich genauso, wie die hier als funktionell aufgeführte. Die gefiel mir irgendwie besser, weil ich direkt in der loop-schleife eingreifen kann und ergänzungen/änderungen einfügen kann.

    - ist diese möglichkeit wirklich besser, oder ist es nur ein (falsches?) gefühl?

    - zum stoppen während der ausführung der "fahrt_1()" funktion ist mir nichts anderes eingefallen als in allen diesen fahr-funktionen die abfrage "if (start == true)" einzufügen - ...und das auch noch rein theoretisch, probiert habe ich es noch nicht...

    - die abfrage " if (start){} - ist die von der funktion her mit "if (start == true)" gleichzusetzen?

    Code:
    #include <CustomStepper.h>
    //#include <NewPing.h>
    //#include <Servo.h>
    //#include <LCD.h>
    //#include <LiquidCrystal_I2C.h>
    #include <Bounce2.h>
    #include <Wire.h>
    
    
    uint8_t idx;
    
    
    boolean start = false;
    Bounce  pin5  = Bounce();
    
    
    enum stepper_e
    { stepper_HM, stepper_VR, stepper_VL, stepper_MAX };
    
    
    
    
    CustomStepper stepper[stepper_MAX]
    {
      //  CustomStepper(23, 25, 27, 29),
      //  CustomStepper(47, 49, 51, 53),
      CustomStepper(35, 37, 39, 41),//stepper_HM-I
      CustomStepper(23, 25, 27, 29),//stepper_VR-II
      CustomStepper(47, 49, 51, 53) //stepper_VL-III
    };
    
    
    
    
    
    
    void setup()
    {
      pinMode(5, INPUT_PULLUP);
      Serial.begin(115200);
      pin5.attach(5);
      pin5.interval(5);
    
    
    }
    
    
    void loop()
    {
    //  start_taster_1();
    
    
        if (pin5.update())
        {
          if (pin5.fell())
          {
            start = !start; // toggle start each time button is pressed
          }
        }
    
    
        if (start)
        {
          fahrt_1();
        }
        else halt();
    
    
    }
    
    
    /***********************************************************/
    /*
    void start_taster_1()
    {
      {
        if (pin5.update())
        {
          if (pin5.fell())
          {
            start = !start; // toggle start each time button is pressed
          }
        }
    
    
        if (start)
        {
          fahrt_1();
        }
        else halt();
      }
    }
    */
    
    
    
    
    void fahrt_1()
    {
      rotate_right();
      fahrt_ausfuehren();
    
    
      alle_stepper_stop();
      fahrt_ausfuehren();
    
    
      richtung_HM();
      fahrt_ausfuehren();
    
    
      alle_stepper_stop();
      fahrt_ausfuehren();
    
    
      richtung_VR();
      fahrt_ausfuehren();
    
    
      alle_stepper_stop();
      fahrt_ausfuehren();
    
    
      richtung_VL();
      fahrt_ausfuehren();
    
    
      alle_stepper_stop();
      fahrt_ausfuehren();
    
    
      rotate_left();
      fahrt_ausfuehren();
    
    
      alle_stepper_stop();
      fahrt_ausfuehren();
    }
    
    
    void halt()
    {
      alle_stepper_stop();
      fahrt_ausfuehren();
    }
    
    
    void alle_stepper_stop()
    {
      for (idx = stepper_HM; idx < stepper_MAX; idx++)
      {
        stepper[idx].setRPM(0);
        stepper[idx].setSPR(4075.7728395);
        stepper[idx].setDirection(STOP);
      }
    }
    
    
    void richtung_HM()
    {
      stepper[stepper_HM].setRPM(12);
      stepper[stepper_VR].setRPM(12);
      stepper[stepper_VL].setRPM(12);
    
    
      stepper[stepper_HM].setSPR(4075.7728395);
      stepper[stepper_VR].setSPR(4075.7728395);
      stepper[stepper_VL].setSPR(4075.7728395);
    
    
      stepper[stepper_VL].setDirection(CCW);
      stepper[stepper_VL].rotate(2);
    
    
      stepper[stepper_VR].setDirection(CW);
      stepper[stepper_VR].rotate(2);
    }
    
    
    void richtung_VL()
    {
      stepper[stepper_HM].setRPM(12);
      stepper[stepper_VR].setRPM(12);
      stepper[stepper_VL].setRPM(12);
    
    
      stepper[stepper_HM].setSPR(4075.7728395);
      stepper[stepper_VR].setSPR(4075.7728395);
      stepper[stepper_VL].setSPR(4075.7728395);
    
    
      stepper[stepper_VR].setDirection(CCW);
      stepper[stepper_VR].rotate(2);
    
    
      stepper[stepper_HM].setDirection(CW);
      stepper[stepper_HM].rotate(2);
    }
    
    
    void richtung_VR()
    {
      stepper[stepper_HM].setRPM(12);
      stepper[stepper_VR].setRPM(12);
      stepper[stepper_VL].setRPM(12);
    
    
      stepper[stepper_HM].setSPR(4075.7728395);
      stepper[stepper_VR].setSPR(4075.7728395);
      stepper[stepper_VL].setSPR(4075.7728395);
    
    
      stepper[stepper_VL].setDirection(CW);
      stepper[stepper_VL].rotate(2);
    
    
      stepper[stepper_HM].setDirection(CCW);
      stepper[stepper_HM].rotate(2);
    }
    
    
    void test_richtung() //VR
    {
      stepper[stepper_HM].setRPM(12);
      stepper[stepper_VR].setRPM(12);
      stepper[stepper_VL].setRPM(12);
    
    
      stepper[stepper_HM].setSPR(4075.7728395);
      stepper[stepper_VR].setSPR(4075.7728395);
      stepper[stepper_VL].setSPR(4075.7728395);
    
    
      stepper[stepper_VL].setDirection(CW);
      stepper[stepper_VL].rotate(2);
    
    
      stepper[stepper_HM].setDirection(CCW);
      stepper[stepper_HM].rotate(2);
    }
    
    
    
    
    void rotate_right_deg(void)
    {
      for (idx = stepper_HM; idx < stepper_MAX; idx++)
      {
        stepper[idx].setRPM(12);
        stepper[idx].setSPR(4075.7728395);
        stepper[idx].setDirection(CW);
        stepper[idx].rotateDegrees(60);
      }
    }
    
    
    void rotate_left_deg(void)
    {
    
    
      for (idx = stepper_HM; idx < stepper_MAX; idx++)
      {
        stepper[idx].setRPM(12);
        stepper[idx].setSPR(4075.7728395);
        stepper[idx].setDirection(CW);
        stepper[idx].rotateDegrees(60);
      }
    }
    
    
    void rotate_right(void)
    {
      for (idx = stepper_HM; idx < stepper_MAX; idx++)
      {
        stepper[idx].setRPM(12);
        stepper[idx].setSPR(4075.7728395);
        stepper[idx].setDirection(CCW);
        stepper[idx].rotate(2);
      }
    }
    
    
    void rotate_left(void)
    {
    
    
      for (idx = stepper_HM; idx < stepper_MAX; idx++)
      {
        stepper[idx].setRPM(12);
        stepper[idx].setSPR(4075.7728395);
        stepper[idx].setDirection(CW);
        stepper[idx].rotate(2);
      }
    }
    
    
    
    
    
    
    
    
    boolean fahrt_fertig()
    {
      return        stepper[stepper_HM].isDone() && stepper[stepper_VR].isDone()
                    && stepper[stepper_VL].isDone();
    }
    
    
    void fahrt_ausfuehren()
    {
      while ( ! fahrt_fertig() )
      {
        for (idx = stepper_HM; idx < stepper_MAX; idx++)
        {
          stepper[idx].run();
          // delay(1);
        }
      }
    }
    gruß inka

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    - die abfrage " if (start){} - ist die von der funktion her mit "if (start == true)" gleichzusetzen?
    In C / C++ steht die Zahl 0 für 'false'. Alle anderen Werte repräsentieren 'true'. In if-Abfragen wird der Ausdruck in den Klammern auf 'true' abgeprüft. Also ja, if(start) ist praktisch das gleiche wie if(start == true).
    - ist diese möglichkeit wirklich besser, oder ist es nur ein (falsches?) gefühl?
    Die funktion loop() wird im Hintergrund in einer while(true)-Schleife ständig aufgerufen. Die Frage ist, ob auf die Taster ständig reagiert werden soll. Wenn ja, sollte auch ständig die update()-Funktion der Bounce-Objekte aufgerufen werden.

Ähnliche Themen

  1. Start-Stop-Taster "Überbrücken"?
    Von Morpheus1997 im Forum Robby RP6
    Antworten: 9
    Letzter Beitrag: 27.04.2013, 16:50
  2. Problem mit Start/Stop Taster
    Von Zizibee im Forum Robby RP6
    Antworten: 13
    Letzter Beitrag: 22.04.2010, 11:09
  3. Screens wechseln mit 2 Taster (oder mit einem Taster)
    Von tordy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.07.2009, 14:39
  4. Start der SwissEurobot
    Von roboter-shop im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 4
    Letzter Beitrag: 30.05.2006, 22:25
  5. Mit Taster 1 auswählen und Taster 2 bestäti. " Menü aus
    Von Luppi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.04.2006, 22:07

Berechtigungen

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

12V Akku bauen