-------------------------------------------------------------------------------------------------------------------------
◎旋轉編碼器
安裝
- CLK → 2
- DT → 3
- SW → 4
- + → 5V
- GND → GND
程式碼:
#define SERIAL_BAUDRATE 115200 #define CLK_PIN 2 // 定義連接腳位 #define DT_PIN 3 #define SW_PIN 4 #define interruptA 0 // UNO腳位2是interrupt 0,其他板子請見官方網頁 volatile long count = 0; unsigned long t = 0; void setup() { Serial.begin(SERIAL_BAUDRATE); // 當狀態下降時,代表旋轉編碼器被轉動了 attachInterrupt(interruptA, rotaryEncoderChanged, FALLING); pinMode(CLK_PIN, INPUT_PULLUP); // 輸入模式並啟用內建上拉電阻 pinMode(DT_PIN, INPUT_PULLUP); pinMode(SW_PIN, INPUT_PULLUP); } void loop() { if(digitalRead(SW_PIN) == LOW){ // 按下開關,歸零 count = 0; Serial.println("count reset to 0"); delay(300); } } void rotaryEncoderChanged(){ // when CLK_PIN is FALLING unsigned long temp = millis(); if(temp - t < 200) // 去彈跳 return; t = temp; // DT_PIN的狀態代表正轉或逆轉 count += digitalRead(DT_PIN) == HIGH ? 1 : -1; Serial.println(count); }
- 9600 baud → 115200 baud
- 往右(順時針)旋轉 +
- 往左(逆時針)旋轉 --
◎不會移動的圓
程式碼:
import processing.serial.*;
Serial myPort;
void setup(){
size(500,500);
myPort = new Serial(this,"COM8",115200);
}
int x=0;
int lf=10;//new line , line feed
void draw(){
background(0);
if(myPort.available() >0){
String now = myPort.readStringUntil(lf);
x = int (now);
println(now + " " + x);
}
ellipse(width/2 + x*20, height/2, 100, 100);
}
◎左右移動的圓
程式碼:
import processing.serial.*;
Serial myPort;
void setup(){
size(500,500);
myPort = new Serial(this,"COM7",115200);
}
int x=0;
int lf=10;//new line , line feed
void draw(){
background(0);
if(myPort.available() >0){
String now = myPort.readStringUntil(lf);
x = int (split(now,'\r')[0]);
println(now);
}
ellipse(width/2 + x*20, height/2, 100, 100);
}
- 往右(順時針)旋轉:往右移
- 往左(逆時針)旋轉:往左移
沒有留言:
張貼留言