Skip to content

Instantly share code, notes, and snippets.

@kkmonster
Last active December 13, 2022 04:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kkmonster/4bd4d37782c95e12345e317605c595d8 to your computer and use it in GitHub Desktop.
Save kkmonster/4bd4d37782c95e12345e317605c595d8 to your computer and use it in GitHub Desktop.
#include <Arduino.h>
#include <ESP32Encoder.h>
#define pulse2rev 824.5f
const int encoder_a = 26;
const int encoder_b = 25;
const int motor_control_a = 21;
const int motor_control_b = 22;
const int vr1_pin = 13, vr2_pin = 33, vr3_pin = 14, vr4_pin = 27;
// setting PWM properties
const int freq = 100;
const int ledChannel = 0;
const int resolution = 12;
int count = 0;
float degree = 0;
float degree_prev = 0;
float omega = 0;
ESP32Encoder encoder;
void setup() {
Serial.begin(115200);
ESP32Encoder::useInternalWeakPullResistors = UP;
encoder.attachFullQuad(encoder_a, encoder_b);
pinMode(motor_control_a, OUTPUT);
pinMode(motor_control_b, OUTPUT);
pinMode(vr1_pin, INPUT);
pinMode(vr2_pin, INPUT);
pinMode(vr3_pin, INPUT);
pinMode(vr4_pin, INPUT);
ledcSetup(ledChannel, freq, resolution);
ledcAttachPin(motor_control_a, ledChannel);
}
void loop() {
ledcWrite(ledChannel, analogRead(vr1_pin));
degree_prev = degree; // save old position
count = encoder.getCount(); // คำนวณตำแหน่งใหม่
degree = count * 360.0f / pulse2rev; // คำนวณตำแหน่งใหม่
omega = (degree - degree_prev) / 50 * 1000;
Serial.print(analogRead(vr1_pin));
Serial.print(" ");
Serial.print(degree);
Serial.print(" ");
Serial.print(omega);
Serial.print("\n");
delay(50);
}
#include <Arduino.h>
const int encoder_a = 26;
const int encoder_b = 25;
int encoder_a_val = 0;
int encoder_b_val = 0;
int encoder_a_val_prev = 0;
int encoder_b_val_prev = 0;
int count = 0;
void setup() {
Serial.begin(115200);
pinMode(encoder_a, INPUT_PULLUP);
pinMode(encoder_b, INPUT_PULLUP);
}
void loop() {
encoder_a_val_prev = encoder_a_val;
encoder_b_val_prev = encoder_b_val;
encoder_a_val = digitalRead(encoder_a);
encoder_b_val = digitalRead(encoder_b);
// Serial.print(encoder_a_val);
// Serial.print(",");
// Serial.print(encoder_b_val);
// Serial.print("\n");
if (encoder_b_val == 0 && encoder_a_val_prev == 0 && encoder_a_val == 1) {
count++;
}
if (encoder_a_val == 1 && encoder_b_val_prev == 0 && encoder_b_val == 1) {
count++;
}
if (encoder_b_val == 1 && encoder_a_val_prev == 1 && encoder_a_val == 0) {
count++;
}
if (encoder_a_val == 0 && encoder_b_val_prev == 1 && encoder_b_val == 0) {
count++;
}
if (encoder_b_val == 0 && encoder_a_val_prev == 1 && encoder_a_val == 0) {
count--;
}
if (encoder_a_val == 1 && encoder_b_val_prev == 1 && encoder_b_val == 0) {
count--;
}
if (encoder_b_val == 1 && encoder_a_val_prev == 0 && encoder_a_val == 1) {
count--;
}
if (encoder_a_val == 0 && encoder_b_val_prev == 0 && encoder_b_val == 1) {
count--;
}
Serial.print(count);
Serial.print("\n");
delay(5);
}
#include <Arduino.h>
const int en_a_pin = 26;
const int en_b_pin = 25;
int en_a_val = 0;
int en_b_val = 0;
int en_a_val_prev = 0;
int en_b_val_prev = 0;
int count = 0;
void setup() {
Serial.begin(115200);
pinMode(en_a_pin, INPUT_PULLUP);
pinMode(en_b_pin, INPUT_PULLUP);
}
void loop() {
en_a_val_prev = en_a_val;
en_b_val_prev = en_b_val;
en_a_val = digitalRead(en_a_pin);
en_b_val = digitalRead(en_b_pin);
///////////////////////////////////////////////////////////////
if (en_b_val == 0 && en_a_val_prev == 0 && en_a_val == 1) {
count++;
}
if (en_a_val == 1 && en_b_val_prev == 0 && en_b_val == 1) {
count++;
}
if (en_b_val == 1 && en_a_val_prev == 1 && en_a_val == 0) {
count++;
}
if (en_a_val == 0 && en_b_val_prev == 1 && en_b_val == 0) {
count++;
}
/////////////////////////////////////////////////////////////////
if (en_a_val == 0 && en_b_val_prev == 0 && en_b_val == 1) {
count--;
}
if (en_b_val == 1 && en_a_val_prev == 0 && en_a_val == 1) {
count--;
}
if (en_a_val == 1 && en_b_val_prev == 1 && en_b_val == 0) {
count--;
}
if (en_b_val == 0 && en_a_val_prev == 1 && en_a_val == 0) {
count--;
}
// Serial.print(en_a_val);
// Serial.print(",");
// Serial.print(en_b_val);
// Serial.print("\n");
Serial.print(count);
Serial.print("\n");
delay(5);
}
#include <Arduino.h>
const int encoder_a = 26;
const int encoder_b = 25;
int encoder_a_val = 0;
int encoder_b_val = 0;
int encoder_a_val_prev = 0;
int encoder_b_val_prev = 0;
int count = 0;
void IRAM_ATTR chA_isr(void) {
encoder_a_val = digitalRead(encoder_a);
encoder_b_val = digitalRead(encoder_b);
if (encoder_a_val == 1){
if (encoder_b_val == 0){
count++;
}else{
count--;
}
}else{
if (encoder_b_val == 1) {
count++;
}
else {
count--;
}
}
}
void IRAM_ATTR chB_isr(void) {
encoder_a_val = digitalRead(encoder_a);
encoder_b_val = digitalRead(encoder_b);
if (encoder_b_val == 1) {
if (encoder_a_val == 1) {
count++;
}
else {
count--;
}
}
else {
if (encoder_a_val == 0) {
count++;
}
else {
count--;
}
}
}
void setup() {
Serial.begin(115200);
pinMode(encoder_a, INPUT_PULLUP);
pinMode(encoder_b, INPUT_PULLUP);
attachInterrupt(encoder_a, chA_isr, CHANGE);
attachInterrupt(encoder_b, chB_isr, CHANGE);
}
void loop() {
// encoder_a_val_prev = encoder_a_val;
// encoder_b_val_prev = encoder_b_val;
// encoder_a_val = digitalRead(encoder_a);
// encoder_b_val = digitalRead(encoder_b);
// Serial.print(encoder_a_val);
// Serial.print(",");
// Serial.print(encoder_b_val);
// Serial.print("\n");
// if (encoder_b_val == 0 && encoder_a_val_prev == 0 && encoder_a_val == 1) {
// count++;
// }
// if (encoder_a_val == 1 && encoder_b_val_prev == 0 && encoder_b_val == 1) {
// count++;
// }
// if (encoder_b_val == 1 && encoder_a_val_prev == 1 && encoder_a_val == 0) {
// count++;
// }
// if (encoder_a_val == 0 && encoder_b_val_prev == 1 && encoder_b_val == 0) {
// count++;
// }
// if (encoder_b_val == 0 && encoder_a_val_prev == 1 && encoder_a_val == 0) {
// count--;
// }
// if (encoder_a_val == 1 && encoder_b_val_prev == 1 && encoder_b_val == 0) {
// count--;
// }
// if (encoder_b_val == 1 && encoder_a_val_prev == 0 && encoder_a_val == 1) {
// count--;
// }
// if (encoder_a_val == 0 && encoder_b_val_prev == 0 && encoder_b_val == 1) {
// count--;
// }
Serial.print(count);
Serial.print("\n");
delay(50);
}
#include <Arduino.h>
#include <ESP32Encoder.h>
const int encoder_a = 26;
const int encoder_b = 25;
int count = 0;
ESP32Encoder encoder;
void setup() {
Serial.begin(115200);
ESP32Encoder::useInternalWeakPullResistors = UP;
encoder.attachFullQuad(encoder_b, encoder_a);
}
void loop() {
count = encoder.getCount();
Serial.print(count);
Serial.print("\n");
delay(50);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment