This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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