- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 15

Thema: Drucktaster einbinden mit der OneButton Library

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    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 21:42 Uhr)

Ähnliche Themen

  1. C-Library in BASCOM einbinden??
    Von Jon im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 20.11.2009, 18:26
  2. Library einbinden
    Von fofi1 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 03.02.2009, 22:48
  3. Einbinden einer Library auf Mikrocontroller
    Von SummerTime im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 25.03.2008, 19: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, 14:28
  5. drucktaster entprellen
    Von pebisoft im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 06.01.2005, 07:49

Berechtigungen

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

LiFePO4 Speicher Test