Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

2.1.6 Drehgeber-Modul

Einführung

In diesem Projekt werden Sie den Drehgeber kennenlernen. Ein Drehgeber ist ein elektronischer Schalter mit einer Reihe von regelmäßigen Impulsen in einer streng getakteten Reihenfolge. In Kombination mit einem IC kann er Erhöhungen, Verringerungen, Seitenumbrüche und andere Vorgänge wie Mausscrollen, Menüauswahl usw. ausführen.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

../_images/Part_two_25.png

Es ist definitiv praktisch, ein ganzes Set zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

Drehgebermodul

KAUFEN

Schaltplan

../_images/image349.png

Experimentelle Verfahren

Schritt 1: Bauen Sie die Schaltung.

../_images/2.1.6_fritzing.png

Schritt 2: Öffnen Sie die Code-Datei.

cd ~/raphael-kit/c/2.1.6/

Schritt 3: Kompilieren Sie den Code.

gcc 2.1.6_RotaryEncoder.c -lwiringPi

Schritt 4: Start.

sudo ./a.out

Sie werden den Zählerstand im Shell sehen. Wenn Sie den Drehgeber im Uhrzeigersinn drehen, wird der Zähler erhöht; wenn Sie ihn gegen den Uhrzeigersinn drehen, wird der Zähler verringert. Wenn Sie den Schalter am Drehgeber drücken, wird der Zählerstand auf null zurückgesetzt.

Bemerkung

Wenn es nach dem Starten nicht funktioniert oder eine Fehlermeldung erscheint: "wiringPi.h: Datei oder Verzeichnis nicht gefunden", ziehen Sie bitte Installieren und Überprüfen von WiringPi zurate.

Code

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <wiringPi.h>

#define  clkPin    0
#define  dtPin    1
#define  swPin     2

static volatile int globalCounter = 0 ;

unsigned char flag;
unsigned char Last_dtPin_Status;
unsigned char Current_dtPin_Status;

void btnISR(void)
{
   globalCounter = 0;
}

void rotaryDeal(void)
{
   Last_dtPin_Status = digitalRead(dtPin);

   while(!digitalRead(clkPin)){
      Current_dtPin_Status = digitalRead(dtPin);
      flag = 1;
   }

   if(flag == 1){
      flag = 0;
      if((Last_dtPin_Status == 0)&&(Current_dtPin_Status == 1)){
         globalCounter --;
      }
      if((Last_dtPin_Status == 1)&&(Current_dtPin_Status == 0)){
         globalCounter ++;
      }
   }
}

int main(void)
{
   if(wiringPiSetup() < 0){
      fprintf(stderr, "Unable to setup wiringPi:%s\n",strerror(errno));
      return 1;
   }

   pinMode(swPin, INPUT);
   pinMode(clkPin, INPUT);
   pinMode(dtPin, INPUT);

   pullUpDnControl(swPin, PUD_UP);

   if(wiringPiISR(swPin, INT_EDGE_FALLING, &btnISR) < 0){
      fprintf(stderr, "Unable to init ISR\n",strerror(errno));
      return 1;
   }

   int tmp = 0;

   while(1){
      rotaryDeal();
      if (tmp != globalCounter){
         printf("%d\n", globalCounter);
         tmp = globalCounter;
      }
   }

   return 0;
}

Code-Erklärung

  • Den Wert von dtPin lesen, wenn clkPin niedrig ist.

  • Wenn clkPin hoch ist und dtPin von niedrig zu hoch wechselt, verringert sich der Zählwert; andernfalls erhöht er sich.

  • swPin gibt einen niedrigen Wert aus, wenn die Achse gedrückt wird.

Daraus ergibt sich der folgende Programmablauf:

../_images/2.1.6_flow.png

Phänomen-Bild

../_images/2.1.6rotary_ecoder.JPG