360 derajat PWM Rotary Encoder Breakout
360 derajat PWM Rotary Encoder Breakout
Keterangan
Jenis sakelar ini adalah encoder putar tambahan. Faktanya, itu adalah yang paling banyak digunakan dari semua encoder putar karena biaya dan kemampuannya yang rendah untuk memberikan sinyal yang dapat dengan mudah ditafsirkan untuk memberikan informasi terkait gerak seperti kecepatan.
Dengan berputar, rotary encoder dapat menghitung frekuensi pulsa output dalam arah positif dan terbalik selama rotasi, tidak seperti penghitung potensiometer putar tanpa menghitung batasan. Dengan tombol pada rotary encoder, itu dapat diatur ulang ke keadaan awalnya mulai dari nol.
Kode pengujian
int redpin = 2;
int yellowpin = 3;
int greenpin = 4;
int apin = 6;
int bpin = 7;
int buttonpin = 5;
status int = 0;
int longiod = 5000; // waktu di hijau atau merah
int shortperiod = 700; // periode waktu saat berubah
int targetCount = shortperiod;
Int Count = 0;
void setup ()
{
pinmode (apin, input);
pinmode (bpin, input);
pinmode (tombol, input);
pinmode (redpin, output);
pinmode (yellowpin, output);
pinmode (greenpin, output);
}
void loop ()
{
Count ++;
if (DigitalRead (Buttonpin))
{
setlight (tinggi, tinggi, tinggi);
}
kalau tidak
{
INT Change = getEncoderTurn ();
int newperioD = longiod + (ubah * 1000);
if (newperiod> = 1000 && newperiod <= 10000)
{
longperiod = newperiod;
}
if (count> targetcount)
{
setState ();
hitung = 0;
}
}
tunda (1);
}
int getEncoderturn ()
{
// return -1, 0, atau +1
static int olda = rendah;
static int oldb = rendah;
Hasil int = 0;
int noda = DigitalRead (APIN);
int newB = DigitalRead (BPIN);
if (noda! = olda || newb! = oldb)
{
// sesuatu telah berubah
if (olda == rendah && newa == tinggi)
{
hasil = - (oldb * 2 - 1);
}
}
Olda = noda;
oldb = newb;
hasil pengembalian;
}
int setState ()
{
if (state == 0)
{
setlight (tinggi, rendah, rendah);
targetCount = longiod;
status = 1;
}
lain jika (state == 1)
{
setlight (tinggi, tinggi, rendah);
TargetCount = Shortperiod;
status = 2;
}
lain jika (state == 2)
{
setlight (rendah, rendah, tinggi);
targetCount = longiod;
status = 3;
}
lain jika (state == 3)
{
setlight (rendah, tinggi, rendah);
TargetCount = Shortperiod;
status = 0;
}
}
void setlights (int red, int yellow, int green)
{
DigitalWrite (redpin, merah);
DigitalWrite (Yellowpin, Yellow);
DigitalWrite (Greenpin, Green);
}