顯示具有 07160751_伍家敬 標籤的文章。 顯示所有文章
顯示具有 07160751_伍家敬 標籤的文章。 顯示所有文章

2020年12月21日 星期一

Sunnnnnnnnnnnnnn

 Week15



熟悉Vector
用物件讓它更有條理
-----
程式碼:

size(600,600);
PImage img=loadImage("img.jpg");
PVector pt = new PVector(10,20,0);
image(img,0,0);
println(pt.x);
float userX=10, userY=20, userZ=0;
float user2X=30, user2Y=40, user2Z=0;

PVector user=new PVector(10,20,0);
PVector user2=new PVector(30,40,0);
-----

畫出左上角這一顆球 ball
-----
程式碼:
PVector user;
void setup(){
 size(600,600);
 user = new PVector(10,20);
}

void draw(){
 background(255);
 ellipse(user.x , user.y,20,20);
}
-----




做一個彈弓


可以做出向量了!
-----
程式碼:
PVector user;
PVector Y, v=null;
void setup() {
  size(600, 400);
  user = new PVector(100, 300);
  Y = new PVector(100, 300);
}
void draw() {
  background(255);
  line( user.x, user.y, Y.x, Y.y);
  textSize(40);
  fill(255, 0, 0); 
  text("Y", Y.x, Y.y);
  fill(255); 
  ellipse( user.x, user.y, 20, 20);
  if(v!=null) user.add(v);
}
void mouseDragged() {
  user.x=mouseX;
  user.y=mouseY;
}
void mouseReleased() {
  PVector diff = PVector.sub(Y,user);
  v = diff.div(10);
}

-----

接上joystick
GND  ->  GND
5V  ->  5V
VRx   ->  A0   
VRy   ->  A1   
SW   ->  2    


-----
Processing + Arduino
移動球的位置

可以用搖桿控制哦!
-----
程式碼:
import processing.serial.*;
Serial myPort;
PVector user;
PVector Y,v=null;
void setup(){
 size(600,400);
myPort = new Serial(this,"COM4",9600);
user = new PVector(100,300);
Y= new PVector(100,300);
}
void draw(){
 background(255);
 if(mousePressed) line(user.x , user.y, Y.x,Y.y);
 while(myPort.available() >= 3)
 {
  int x = myPort.read();
  int y = myPort.read();
  int sw = myPort.read();
  user.x = 100+x-128;
  user.y = 300+y-128;
 }
 textSize(40);
 fill(255,0,0); text("Y",Y.x,Y.y);
 fill(255); ellipse(user.x, user.y,20,20);
 if(v!=null){
  user.add(v);
  v.y+=0.98;
 }
}
void mouseDragger(){
 user.x=mouseX;
 user.y=mouseY;
 v=null;
}
-----














2020年12月14日 星期一

Sunnnnnnnnnnnnnn

 Week14


一開始用這個程式碼配上可變電阻(旋鈕)
接上5V,A0,GND
就可以發出聲音
-----
程式碼:
#define buzzer 2
#define buzzer 8
void setup() {
  // put your setup code here, to run once:
pinMode(13,OUTPUT);
pinMode(8,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
int now = analogRead(A0);
tone(8,now);
}
-----


這個程式碼可以讓燈隨著旋鈕變多變少
-----
程式碼:
void setup() {
  for (int i = 2; i <= 13; i++) {
    pinMode(i, OUTPUT);
  }

}
void loop() {
  int now = analogRead(A0);
  int level = now / (512 / 13);
  for (int i = 2; i <= 13; i++) {
    if (i < level) digitalWrite(i, HIGH);
    else digitalWrite(i, LOW);
  }

}
-----

一樣是控制燈多少
可以配合joystick改變
-----
程式碼:
void setup() {
  for (int i = 2; i <= 13; i++) {
    pinMode(i, OUTPUT);
  }
Serial.begin(9600);
}
void loop() {
  int now = analogRead(A0);
  int level = now / (1024 / 13);
  for (int i = 2; i <= 13; i++) {
    if (i < level) digitalWrite(i, HIGH);
    else digitalWrite(i, LOW);
  }
Serial.write(('A'+level));
delay(100);
}

-----

-----
紅色進度條多少
Processing程式碼:
import processing.serial.*;
Serial myPort;
void setup(){
 size(700,100);
 myport = new Serial(this,"COM4",9600);
}
int level=0;
void draw(){
 background(255);
 fill(255,0,0);
 rect(0,0,level*50,100);
 if( myPort.available()>0){
  int now = myPort.read();
  if(now=='A') level=0;
  if(now=='B') level=1;
  if(now=='C') level=2;
  if(now=='D') level=3;
  if(now=='E') level=4;
  if(now=='F') level=5;
  if(now=='G') level=6;
  if(now=='H') level=7;
  if(now=='I') level=8;
  if(now=='J') level=9;
  if(now=='K') level=10;
  if(now=='L') level=11;
  if(now=='M') level=12;
  if(now=='N') level=13;
 }
}


or
import processing.serial.*;
Serial myPort;
void setup(){
 size(700,100);
 myport = new Serial(this,"COM4",9600);
}
int level=0;
void draw(){
 background(255);
 fill(255,0,0);
 rect(0,0,level*50,100);
 if( myPort.available()>0){
  int now = myPort.read();
level = now-'A';
 }
}
-----

Processing 更精簡靈活的程式碼
-----
  import processing.serial.*;
  Serial myPort;
  void setup(){
   size(700,100);
   myport = new Serial(this,"COM4",9600);
  }
  int level=0;
  void draw(){
   background(255);
   fill(255,0,0);
   rect(0,0,level*3,100);
   if( myPort.available()>0){
    int now = myPort.read();
    level = now;
   }
  }
-----
Arduino版本
-----
程式碼:
void setup() {
  for (int i = 2; i <= 13; i++) {
    pinMode(i, OUTPUT);
  }
Serial.begin(9600);
}
void loop() {
  int now = analogRead(A0);
  int level = now/4;
  for (int i = 2; i <= 13; i++) {
    if (i < level) digitalWrite(i, HIGH);
    else digitalWrite(i, LOW);
  }
//Serial.write(('A'+level));
Serial.write(level);
delay(20);
}

-----









2020年12月7日 星期一

Sunnnnnnnnnnnnnn

 Week13


接到你的joystick上面
就可以滴滴嘟嘟

改變一下程式碼
讓Joystick按下去的時候會回傳1
鬆開時會回傳0

按右上角的放大鏡
可以檢查收到0和1


再來把它寫成Porcessing的程式
讀到Joystick按下去就會變成紅色
放開就是白色

寫個UDP網路傳輸到老師的電腦











2020年11月30日 星期一

Sunnnnnnnnnnnnnn

 Week12




Arduino連Processing
-----
程式碼:
#define Do 523
#define Re 587
#define Mi 659
void setup(){
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);
pinMode(8,OUTPUT);
tone(8,Do);
delay(100);
tone(8,Re);
delay(100),
tone(8,Mi);
delay(100);
noTone(8);
}
void loop(){
  while(Serial.available()>0)
  {
    Serial.read();
    tone(8,Mi,100);
  }
}
-----


程式碼都輸入完
就可以用鍵盤配合MakerUno彈了


2020年11月23日 星期一

Sunnnnnnnnnnnnnn

 W11k


今天拿了一個新的板子
MakerUno

記得下載它的驅動程式才能用

配合Arduino的程式碼可以發出聲音.燈光

到這個網站可以找到它原本的Code
然後就可以開始自己做更改

可以對照著這個表放進你要的聲音

就可以開始寫你要的音樂

陣列的大小可以用sizeof(melody)記得要/sizeof(int)
不然音樂會變得很奇怪,位元不同










2020年11月2日 星期一

Sunnnnnnnnnnnnnn

 Week08



第一個是教取得Pixel值(顏色)
取得之後就可以顯示在左上角
根據滑鼠在哪裡可以得到不同顏色

Pixels的概念圖解

-----
程式碼:

PImage img;
color nowColor;
void setup(){
 size(250,250);
 img = loadImage("cloud.png");
}
void draw(){
 image(img,0,0); 
 fill(nowColor); rect(0,0,30,30);
}
void mouseMoved(){
 loadPixels();
 int now = width * mouseY + mouseX ;
 nowColor = pixels[now];
 }
-----




2020年10月26日 星期一

Sunnnnnnnnnnnnnn

 Week07


使用數學的Sin跟Cos
畫一個像時鐘的圓

然後用畫圖 - beginShape
角度可以自己調整

+120就變成三角形了 很好理解8

-----
程式碼:

size(500,500);
beginShape();
for(int angle=0;angle<360; angle+=120  ){
 float angle2 = radians(angle);
 float x = 100+cos(angle2)*50;
 float y = 100+sin(angle2)*50;
  vertex(x,y);
}
endShape(CLOSE);
-----

可以跟著滑鼠畫了哦
-----
程式碼:
void setup() {
  size(500, 500);
}
void draw() {
  beginShape();
  for (int angle=0; angle<360; angle+=120  ) {
    float angle2 = radians(angle+mouseX);
    float x = 100+cos(angle2)*50;
    float y = 100+sin(angle2)*50;
    vertex(x, y);
  }
  endShape(CLOSE);
}
-----

會動的三角形
自己會旋轉,也可以用滑鼠控制三角形的位置

寫一個接水果的程式
街到了加分,水果重生
沒接到水果直接重生
-----
程式碼:
float fruitX=150, fruitY=0;
float kidX=150, kidY=450;
int score=0;
void setup() {
  size(300, 500);
}
void draw() {
  background(255);
  rect(kidX, kidY, 50, 80);
  kidX=mouseX;
  ellipse(fruitX, fruitY, 60, 80);
  fruitY++;
  if (fruitY>kidY) {
    if (kidX < fruitX && fruitX<kidX+80)
    {
      score +=10;
      fruitY=0; 
      fruitX=random(50, 450);
    } else
    {
      fruitY=0;
      fruitX=random(50, 450);
    }
  }
}
-----
把水果改成用陣列的方式
就可以有很多水果
-----
程式碼:
//float fruitX=150, fruitY=0;
float [] fruitX = new float[10];
float [] fruitY = new float[10];
float kidX=150, kidY=450;
int score=0;
void setup() {
  size(500, 500);
  for (int i=0; i<10; i++)
  {
    fruitX[i] = random(50, 450);
    fruitY[i] = -i*100;
  }
}
void draw() {
  background(255);
  rect(kidX, kidY, 50, 80);
  kidX=mouseX;
  for (int i=0; i<10; i++) {
    ellipse(fruitX[i], fruitY[i], 60, 80);
    fruitY[i]++;
    if (fruitY[i]>kidY) {
      if (kidX < fruitX[i] && fruitX[i]<kidX+80)
      {
        score +=10;
        fruitY[i]=0; 
        fruitX[i]=random(50, 450);
      } else
      {
        fruitY[i]=0;
        fruitX[i]=random(50, 450);
      }
    }
  }
}
-----







2020年10月19日 星期一

Sunnnnnnnnnnnnnn

 Week06


一開始先教的是text和textSize
顏色要用fill來填充不能用stroke(外框)
Hello後面的30,30表示字會從30,30開始往右網上寫字

利用textAlign可以讓字對齊
(字會在裡面)
-LEFT,CENTER,RIGHT-
-TOP,CENTER,BOTTOM-

要秀字型就要先讓程式知道你要用什麼字體
並且匯入 不然會變成框框 印不出來

再來教一個二為陣列的概念
A[i][j]
 
哭阿哭阿
豬阿汪汪汪汪汪汪






2020年10月12日 星期一

Sunnnnnnnnnnnnnn

 Week05


時間小偷
Fruit Ningaaaaa


水果開始會跳 有在切的感覺
還沒去背
---
程式碼:
PImage img;
float x=100, y=500, vx=3, vy=-30;
int fruitDie=0;
void setup() {
  size(500, 500);
  img=loadImage("fruit.png");
}
void draw() {
  background(0);
  image(img, x, y, 100, 100); 
  x+=vx;
  y+=vy;
  vy+=0.98;
  if (y>500)fruitDie=1;
  if (x<mouseX && mouseX < x+100&& y<mouseY && mouseY<y+100) fruitDie=1;
  stroke(255); 
  line(mouseX, mouseY, pmouseX, pmouseY);
  if (fruitDie==1) {
    if (frameCount%2==0) {
      x=random(250); 
      y=500; 
      vx=random(2, 3); 
      vy=-random(28, 32);
    } else {
      x=random(250, 500); 
      vx=-random(2, 3); 
      vy=-random(28, 32);
    }
    fruitDie=0;
  }
}

-----
要下載好外掛程式才能使用聲音


打好你的程式碼
檔案丟進去 就可以撥出聲音了
loop是循環 可以丟背景音樂
play是只撥放一次

另外一個版本:
---
程式碼:
import ddf.minim.*;
Minim minim;
AudioPlayer player1;
AudioPlayer player2;

void setup(){
 minim = new Minim(this);
 player1 = minim.loadFile("sea.wav");
 player2 = minim.loadFile("2.wav");
 player1.loop();
}
void draw(){
  
}
void mousePressed(){
 player1.rewind();
 player2.play();
}
---
程式碼 All:
import ddf.minim.*;
Minim minim;
AudioPlayer player1;
AudioPlayer player2;
PImage img;
float x=100, y=500, vx=3, vy=-30;
int fruitDie=0;
void setup() {
  size(500, 500);
  img=loadImage("fruit.png");
 minim = new Minim(this);
 player1 = minim.loadFile("sea.wav");
 player2 = minim.loadFile("2.wav");
 player1.loop();
}
void draw() {
  background(0);
  image(img, x, y, 100, 100); 
  x+=vx;
  y+=vy;
  vy+=0.98;
  if (y>500)fruitDie=1;
  if (x<mouseX && mouseX < x+100&& y<mouseY && mouseY<y+100) fruitDie=1;
  player2.rewind();
  player2.play();
  stroke(255); 
  line(mouseX, mouseY, pmouseX, pmouseY);
  if (fruitDie==1) {
    if (frameCount%2==0) {
      x=random(250); 
      y=500; 
      vx=random(2, 3); 
      vy=-random(28, 32);
    } else {
      x=random(250, 500); 
      vx=-random(2, 3); 
      vy=-random(28, 32);
    }
    fruitDie=0;
  }
}
---


2020年10月5日 星期一

Sunnnnnnnnnnnnnn

 Week04


先在網路上找到圖片
直接把圖片拉到Processing裡面就會在檔案總管裡

然後讀入圖片,調整好大小
再印出來 就會有原本的圖片了!

用同樣的方法就可以印出更多張圖
img後面的參數可以調整起始印圖片的位置,再後面的參數是控制圖片大小

改編一下你的程式碼
這樣第二章印出來的圖片就會跟著你的滑鼠跑
   
然後找一個超~~~~~~長的背景圖
跟一個去背的主角圖

接著把背景圖片的x設為變數
如果滑鼠的x座標>200 圖片就會往左邊拉
就有在滾動的效果

最後一節課做的是碰到邊界會反彈的球

好酷好酷
上面截不到 反正就是跟上一張圖一樣的東西
總之就是可以彈出去的球

ㄉㄨㄞ唷ㄉㄨㄞ唷
煙燻豬肉