ESP8266固有の所は、
void ICACHE_RAM_ATTR enc1_proc();
void ICACHE_RAM_ATTR enc2_proc();
である。
スケッチ
Rotaly.hを含め、スケッチはJA2GQP's Download siteのesp8266フォルダからダウンロードできる。
//-------------------------------------------------------------
// ESP8266 Multi encorder test
// 2010/5/4
// JA2GQP
//-------------------------------------------------------------
#include "src/Rotary.h"
Rotary r1 = Rotary(D3,D4); // encorder 1
void ICACHE_RAM_ATTR enc1_proc();
Rotary r2 = Rotary(D1,D2); // encorder 2
void ICACHE_RAM_ATTR enc2_proc();
//---------- setup --------------------------------------------
void setup() {
Serial.begin(115200);
r1.begin(0);
attachInterrupt(digitalPinToInterrupt(D3), enc1_proc, CHANGE);
attachInterrupt(digitalPinToInterrupt(D4), enc1_proc, CHANGE);
r2.begin(1);
attachInterrupt(digitalPinToInterrupt(D1), enc2_proc, CHANGE);
attachInterrupt(digitalPinToInterrupt(D2), enc2_proc, CHANGE);
}
//---------- main loop ----------------------------------------
void loop() {
}
//---------- encorder 1 proc ---------------------------------
void enc1_proc() { // rotary encoder events
unsigned char result = r1.process();
if (result == DIR_NONE) {
// do nothing
}
else if (result == DIR_CW) {
Serial.println("Enc 1 CW");
}
else if (result == DIR_CCW) {
Serial.println("Enc 1 CCW");
}
}
//---------- encorder 2 proc ---------------------------------
void enc2_proc() { // rotary encoder events
unsigned char result = r2.process();
if (result == DIR_NONE) {
// do nothing
}
else if (result == DIR_CW) {
Serial.println("Enc 2 CW");
}
else if (result == DIR_CCW) {
Serial.println("Enc 2 CCW");
}
}
1 件のコメント:
interesting solution.
tnx.
コメントを投稿