顯示具有 Week12 標籤的文章。 顯示所有文章
顯示具有 Week12 標籤的文章。 顯示所有文章

2018年1月20日 星期六

Week12 芷萱的課堂筆記

利用Processing結合Arduino


1.首先在Processing中打入一小串程式碼

程式碼:
import processing.serial.*;
Serial myPort;

void setup(){
  size(400,400);
  myPort=new Serial(this,"COM7",115200);
}
void draw(){
  if(myPort.available()>0){
    String now =myPort.readString();
    println(now);
  }
}


2.建置環境-安裝驅動程式

控制台→裝置管理員


手動選擇路徑

選擇安裝即可













































選擇相對應的COM即可











程式碼:
// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(115200);
}

void loop() {
  Serial.print("Switch:  ");
  Serial.print(digitalRead(SW_pin));
  Serial.print("\n");
  Serial.print("X-axis: ");
  Serial.print(analogRead(X_pin));
  Serial.print("\n");
  Serial.print("Y-axis: ");
  Serial.println(analogRead(Y_pin));
  Serial.print("\n\n");
  delay(50);
}

3.
Arduino中

程式碼:
// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(115200);
}

void loop() {
  Serial.write(digitalRead(2));
  delay(50);
}


於Processing中

程式碼:
import processing.serial.*;
Serial myPort;

void setup(){
  size(400,400);
  myPort=new Serial(this,"COM7",115200);
}
void draw(){
  if(myPort.available()>0){
    int pin2=myPort.read();
    println(pin2);
    if(pin2==1)background(255,0,0);
  else background(255,255,0);
  }
}

4.
Arduino中

程式碼:
// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output

void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(115200);
}

void loop() {
  Serial.write(digitalRead(2));
  Serial.write(analogRead(A0)/4);
  Serial.write(analogRead(A1)/4);
  delay(50);
}

於Processing中

程式碼:
import processing.serial.*;
Serial myPort;

void setup(){
  size(400,400);
  myPort=new Serial(this,"COM7",115200);
}
void draw(){
  if(myPort.available()>0){
    int pin2=myPort.read();
    int x=myPort.read();
    int y=myPort.read();
    println(pin2);
    if(pin2==1)background(255,0,0);
  else background(255,255,0);
  ellipse(x,y,20,20);
  }
}

2017年12月11日 星期一

week12 3D的互動筆記

一、連接Arduino把JoyStick(蘑菇頭)接上去

1.到https://brainy-bits.com/blogs/tutorials/arduino-joystick-tutorial有JoyStick接線圖


2.下面在Arduino的程式碼


3.打進Arduino後,執行可以看到JoyStick的運作訊息,
因為Serial.begin(115200),所以右下角要改成"115200"的傳輸速度


4.之後我們運用Processing來讀取Arduino產生的訊息


5.剛剛是印出資訊,現在要運用這資訊做事情,所以改成這樣(Arduino小視窗會看不到訊息)


6.當我們按下JoyStick就會變換背景顏色,以及用圓形判斷搖桿移動的位置


7.執行結果



Week13 是賴小沫的

✎旋轉編碼器

👀參考他人的程式碼,並測試其結果

Arduino

#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);
}

將程式上傳至開發板,並觀看其執行結果

👀如何連接UNO與旋轉編碼器

參考此網站,並連接UNO與旋轉編碼器

示意圖
實際組裝

✎旋轉編碼器連結processing

👀processing程式碼

import processing.serial.*;
Serial myPort;
void setup(){
  size(500,500);
  myPort = new Serial(this,"COM7",115200);
}
int x=0;
int lf=10; //line feed,new line
void draw(){
  background(0);
  if(myPort.available()>0){
    String now = myPort.readStringUntil(lf);
    x=int(split(now,'\r')[0]);
    println(x+" "+now);
  }
  ellipse(width/2+x*20,height/2,100,100);
}

按下左上角的三角形Ctrl+R,即可執行看結果

✎knob馬達

👀組裝

示意圖
實際組裝

👀程式碼-開啟範例檔Knob


將程式上傳至開發版,觀察操作結果

執行結果如下

Week 12 邱

#第12週
-------------------------------------------------------------------------------------------------------------------------


  • 搖桿




















  • KEY:按鈕
  • Y:Y座標
  • X:X座標
  • VCC:伏特
  • GND:接地





  • Switch:1(按下去) / 0(沒有按)
  • 9600 baud → 115200 baud







  • myPort = new Serial(this, portName, 115200) ;







  • readString()


import processing.serial.*;

Serial myPort;  // The serial port

void setup() {
  // List all the available serial ports:
  printArray(Serial.list());
  // Open the port you are using at the rate you want:
  myPort = new Serial(this, Serial.list()[0], 9600);
}

void draw() {
  while (myPort.available() > 0) {
    String inBuffer = myPort.readString();   
    if (inBuffer != null) {
      println(inBuffer);
    }
  }
}


  • The Code


// Arduino pin numbers const int SW_pin = 2; // digital pin connected to switch output const int X_pin = 0; // analog pin connected to X output const int Y_pin = 1; // analog pin connected to Y output void setup() { pinMode(SW_pin, INPUT); digitalWrite(SW_pin, HIGH); Serial.begin(115200); } void loop() { Serial.print("Switch: "); Serial.print(digitalRead(SW_pin)); Serial.print("\n"); Serial.print("X-axis: "); Serial.print(analogRead(X_pin)); Serial.print("\n"); Serial.print("Y-axis: "); Serial.println(analogRead(Y_pin)); Serial.print("\n\n"); delay(500); }


  • Switch:1



  • Switch:0