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.
Es ist definitiv praktisch, ein ganzes Set zu kaufen, hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
|---|---|
Schaltplan
Experimentelle Verfahren
Schritt 1: Bauen Sie die Schaltung.
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: