Benutzer-Werkzeuge

Webseiten-Werkzeuge


arduino_einstieg

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
arduino_einstieg [20.02.2020]
Frank Hochrath [Winkelgeber]
arduino_einstieg [20.02.2020] (aktuell)
Frank Hochrath [Winkelgeber]
Zeile 1289: Zeile 1289:
 </​code>​ </​code>​
  
 +\\
 +Diese habe ich nun so angepasst, dass eine volle Umdrehung des Gebers auch die 20 Schritte die er hat, anzeigt:\\
 +\\
 +drehgeber_6.ino\\
 +<​code>​
 +// Initialisierung benötigter Variablen
 +int Counter = 0; 
 +int Counter2 = 0; 
 +boolean Richtung;
 +int Pin_clk_Letzter;  ​
 +int Pin_clk_Aktuell;​
 + 
 +// Definition der Eingangs-Pins
 +int pin_clk = 6;  ​
 +int pin_dt = 5; 
 +int button_pin = 2;
 +  ​
 +  ​
 +void setup() ​
 +
 +   // Eingangs-Pins werden initialisiert...
 +   ​pinMode (pin_clk,​INPUT);​
 +   ​pinMode (pin_dt,​INPUT);​
 +   ​pinMode (button_pin,​INPUT);​
 +    ​
 +   // ...und deren Pull-Up Widerstände aktiviert
 +   ​digitalWrite(pin_clk,​ true);
 +   ​digitalWrite(pin_dt,​ true);
 +   ​digitalWrite(button_pin,​ true);
 +    ​
 +   // Initiales Auslesen des Pin_CLK
 +   ​Pin_clk_Letzter = digitalRead(pin_clk); ​  
 +   ​Serial.begin (38400);
 + ​} ​
 + 
 +// Das Programm überprüft,​ falls eine Änderung der Pin-Zustände sich ereignet hat, welcher der beiden
 +// Pins sich zuerst geändert hatte, was auf die Drehrichtung schließen lässt.
 +// Diese Information erhält man, in dem man einen der beiden Pin-Werte aus einem vorherigen
 +// Durchlauf mit dem Wert des aktuellen Durchlaufs vergleicht.
 +// Nachdem die Richtung festgestellt wurde, werden die Schritte von der Startposition an gezählt und ausgegeben.
 +// Ein Drücken auf den Knopf des Drehgebers resettet die aktuelle Position.
 + 
 +void loop()
 +
 +   // Auslesen des aktuellen Statuses  ​
 +   ​Pin_clk_Aktuell = digitalRead(pin_clk);​
 +    ​
 +   // Überprüfung auf Änderung
 +   if (Pin_clk_Aktuell != Pin_clk_Letzter)
 +   ​{ ​
 +          ​
 +        if (digitalRead(pin_dt) != Pin_clk_Aktuell) ​
 +        {  ​
 +            // Pin_CLK hat sich zuerst verändert
 +            Counter ++;
 +            Richtung = true;
 +        } 
 +          ​
 +        else
 +        {       // Andernfalls hat sich Pin_DT zuerst verändert
 +            Richtung = false;
 +            Counter--;
 +        }
 +        Serial.println ("​Drehung erkannt: ");
 +        Serial.print ("​Drehrichtung:​ ");
 +         
 +        if (Richtung)
 +        {
 +           ​Serial.println ("Im Uhrzeigersinn"​);​
 +        }
 +        else
 +        {
 +           ​Serial.println("​Gegen den Uhrzeigersinn"​);​
 +        }
 +         
 +        Serial.print("​Aktuelle Position: ");
 +        Counter = Counter;
 +        Serial.println(Counter);​
 +
 +        Serial.print("​Wahre aktuelle Position: ");
 +        Counter2 = (Counter/​2);​
 +        Serial.println(Counter2);​
 +
 +        Serial.println("​------------------------------"​);​
 +          ​
 +   ​} ​
 +    ​
 +   // Vorbereitung für den nächsten Druchlauf:
 +   // Der Wert des aktuellen Durchlaufs ist beim nächsten Druchlauf der vorherige Wert
 +   ​Pin_clk_Letzter = Pin_clk_Aktuell;​
 +    ​
 +   // Reset-Funktion um aktuelle Position zu speichern
 +   if (!digitalRead(button_pin) && Counter!=0)
 +     {
 +       ​Counter = 0;
 +       ​Serial.println("​Position resettet"​);​
 +     }
 +      ​
 + ​} ​
 +</​code>​
 +
 +Ausgabe:\\
 +<​code>​
 +Drehung erkannt: ​
 +Drehrichtung:​ Im Uhrzeigersinn
 +Aktuelle Position: 18
 +Wahre aktuelle Position: 9
 +------------------------------
 +Drehung erkannt: ​
 +Drehrichtung:​ Im Uhrzeigersinn
 +Aktuelle Position: 19
 +Wahre aktuelle Position: 9
 +------------------------------
 +Drehung erkannt: ​
 +Drehrichtung:​ Im Uhrzeigersinn
 +Aktuelle Position: 20
 +Wahre aktuelle Position: 10
 +------------------------------
 +
 +</​code>​
  
  
arduino_einstieg.txt · Zuletzt geändert: 20.02.2020 von Frank Hochrath