Breakout Rotary Encoder 360 Derajat PWM
Breakout Rotary Encoder 360 Derajat PWM
Deskripsi
Jenis sakelar ini adalah encoder putar inkremental. Faktanya, ini adalah yang paling banyak digunakan dari semua pembuat enkode putar karena biayanya yang rendah dan kemampuannya untuk memberikan sinyal yang dapat dengan mudah ditafsirkan untuk memberikan informasi terkait gerakan seperti kecepatan.
Dengan memutar, encoder putar dapat menghitung frekuensi pulsa keluaran dalam arah positif dan sebaliknya selama rotasi, tidak seperti penghitung potensiometer putar tanpa batasan penghitungan. Dengan tombol pada rotary encoder, itu dapat diatur ulang ke keadaan awal mulai dari nol.
Kode pengujian
int redPin = 2;
int yellowPin = 3;
int greenPin = 4;
int aPin = 6;
int bPin = 7;
int buttonPin = 5;
int negara = 0;
int longPeriod = 5000; // Waktu di hijau atau merah
int shortPeriod = 700; // Jangka waktu saat berubah
int targetCount = shortPeriod;
int hitung = 0;
batal penyiapan ()
{
pinMode (aPin, INPUT);
pinMode (bPin, INPUT);
pinMode (buttonPin, INPUT);
pinMode (redPin, OUTPUT);
pinMode (yellowPin, OUTPUT);
pinMode (greenPin, OUTPUT);
}
void loop ()
{
hitung ++;
if (digitalRead (buttonPin))
{
setLights (TINGGI, TINGGI, TINGGI);
}
lain
{
int perubahan = getEncoderTurn ();
int newPeriod = longPeriod + (ubah * 1000);
if (newPeriod> = 1000 && newPeriod <= 10000)
{
longPeriod = newPeriod;
}
if (count> targetCount)
{
setState ();
hitung = 0;
}
}
penundaan (1);
}
int getEncoderTurn ()
{
// return -1, 0, atau +1
static int oldA = LOW;
statis int oldB = RENDAH;
hasil int = 0;
int newA = digitalRead (aPin);
int newB = digitalRead (bPin);
if (newA! = oldA || newB! = oldB)
{
// sesuatu telah berubah
jika (lamaA == RENDAH && baruA == TINGGI)
{
hasil = - (oldB * 2 - 1);
}
}
oldA = newA;
oldB = newB;
hasil pengembalian;
}
int setState ()
{
jika (negara bagian == 0)
{
setLights (TINGGI, RENDAH, RENDAH);
targetCount = longPeriod;
negara = 1;
}
else if (state == 1)
{
setLights (TINGGI, TINGGI, RENDAH);
targetCount = shortPeriod;
negara = 2;
}
lain jika (negara bagian == 2)
{
setLights (RENDAH, RENDAH, TINGGI);
targetCount = longPeriod;
negara = 3;
}
lain jika (negara bagian == 3)
{
setLights (RENDAH, TINGGI, RENDAH);
targetCount = shortPeriod;
negara = 0;
}
}
void setLights (int merah, int kuning, int hijau)
{
digitalWrite (redPin, red);
digitalWrite (yellowPin, kuning);
digitalWrite (greenPin, hijau);
}