2016年11月28日 星期一

Week13 JimC

一.Arduino開車
電路圖參考以下
source code 可参考Arduino 里的 File ——> Example ——> Digital ——> DigitalInputPullup
裡面有個網址有提供按鈕的電路圖(circuit)

二.寫出車子程式
void setup() {
size(640, 480, P3D);
rectMode(CENTER);
}
float carX=640/2, carY=320/2;
float carDir=PI, carWheel=0;
void drawCar() {
pushMatrix();
translate(carX, carY);
rotateZ(carDir);
rect(0, 0, 187, 89);
drawWheel(127/2, 89/2, 1);
drawWheel(127/2, -89/2, 1);
drawWheel(-127/2, 89/2, 0);
drawWheel(-127/2, -89/2, 0);
if (keyPressed && keyCode==UP) {
carX+= cos(carDir+carWheel);
carY+=sin(carDir+carWheel);
carDir+=carWheel/50;
} else if (keyPressed && keyCode==DOWN) {
carX-= cos(carDir+carWheel);
carY-=sin(carDir+carWheel);
carDir-=carWheel/50;
} else if (keyPressed && keyCode==RIGHT) {
carWheel+=0.01;
if (carWheel > 0.3) carWheel=0.3;
} else if (keyPressed && keyCode==LEFT) {
carWheel-=0.01;
if (carWheel < -0.3) carWheel=-0.3;
}
popMatrix();
}
void drawWheel(float x, float y, int front) {
pushMatrix();
translate(x, y);
if (front==1) rotateZ(carWheel);
rect(0, 0, 40, 20);
popMatrix();
}
void draw() {
background(100);
drawCar();
rect(0+187/2, 0+89/2, 187, 89);
rect(450+187/2, 0+89/2, 187, 89);
}

二.寫出車子程式(二)
void draw() {
  while(myPort.available()>0)
  {
      val=myPort.read();
      if(val==48)
      {
        carX+= cos(carDir+carWheel); 
        carY+=sin(carDir+carWheel);
        carDir+=carWheel/50;
        
      }
///按下按鈕車子往前行駛
      else if(val==49)
      {
        carX-= cos(carDir+carWheel); 
        carY-=sin(carDir+carWheel);
        carDir+=carWheel/50;
        
      }
//處於0的狀態車子往後退
  }
background(100);

二.寫出車子程式(三)
in arduino
void setup(){
  //start serial connection
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(13, OUTPUT); 

}

void loop(){
  
  int sensorVal = digitalRead(2);
  int sensorVal3 = digitalRead(3);
  int sensorVal4 = digitalRead(4);
   int sensorVal5 = digitalRead(5);
  
  if(sensorVal==LOW) Serial.print('0');
  if(sensorVal3==LOW) Serial.print('1');
  if(sensorVal4==LOW) Serial.print('2');
   if(sensorVal5==LOW) Serial.print('3');
  
  //Serial.println(sensorVal);  //delete
   if (sensorVal == HIGH) {
    digitalWrite(13, LOW);
  } 
  else {
    digitalWrite(13, HIGH);
  }
}

in processing

import processing.serial.*;
Serial myPort;
int val;
void setup() {
size(640, 480, P3D);
myPort=new Serial(this,"COM4",9600);
rectMode(CENTER);
}
float carX=640/2, carY=320/2;
float carDir=PI, carWheel=0;
void drawCar() {
pushMatrix();
translate(carX, carY);
rotateZ(carDir);
rect(0, 0, 187, 89);
drawWheel(127/2, 89/2, 1);
drawWheel(127/2, -89/2, 1);
drawWheel(-127/2, 89/2, 0);
drawWheel(-127/2, -89/2, 0);
if (keyPressed && keyCode==UP) {
carX+= cos(carDir+carWheel); 
carY+=sin(carDir+carWheel);
carDir+=carWheel/50;
} else if (keyPressed && keyCode==DOWN) {
carX-= cos(carDir+carWheel); 
carY-=sin(carDir+carWheel);
carDir-=carWheel/50;
} else if (keyPressed && keyCode==RIGHT) {
carWheel+=0.01;
if (carWheel > 0.3) carWheel=0.3;
} else if (keyPressed && keyCode==LEFT) {
carWheel-=0.01;
if (carWheel < -0.3) carWheel=-0.3;
}
popMatrix();
}
void drawWheel(float x, float y, int front) {
pushMatrix();
translate(x, y);
if (front==1) rotateZ(carWheel);
rect(0, 0, 40, 20);
popMatrix();
}
void draw() {
  while(myPort.available()>0)
  {
      val=myPort.read();
      if(val==49)
      {
        carX+= cos(carDir+carWheel); 
        carY+=sin(carDir+carWheel);
        carDir+=carWheel/50;
        
      }
      else if(val==48)
      {
        carX-= cos(carDir+carWheel); 
        carY-=sin(carDir+carWheel);
        carDir-=carWheel/50;
        
      }
      else if(val==50)
      {
       carWheel+=0.01;
        
      }
      else if(val==51)
      {
       carWheel-=0.01;
        
      }
  }
background(100);
drawCar();
rect(0+187/2, 0+89/2, 187, 89);
rect(450+187/2, 0+89/2, 187, 89);
}


沒有留言:

張貼留言