顯示具有 07160865_李亦芸 標籤的文章。 顯示所有文章
顯示具有 07160865_李亦芸 標籤的文章。 顯示所有文章

2020年12月21日 星期一

:D~week15

<Processing>

利用 PVector秀出圖片

size(1200,675);

PImage img=loadImage("img.jpg");

PVector pt=new PVector(10,20,0);

image(img,0,0);

println(pt.x);









利用PVector秀出一顆小球

PVector user;

void setup()

{

   size(600,600);

   user=new PVector(10,20);

}

void draw()

{

   background(255);

   ellipse(user.x,user.y,20,20);

}













利用PVector秀出類似彈弓

PVector user;

PVector Y;

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

}

void mouseDragged()

{

   user.x=mouseX;

   user.y=mouseY;

}

void mouseReleased()

{ 

    

}










利用滑鼠球可以發射出去

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

}











給球重力

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

   if(mousePressed)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);

     v.y+=0.98;

   }

}

void mouseDragged()

{

   user.x=mouseX;

   user.y=mouseY;

   v=null;

}

void mouseReleased()

{ 

   PVector diff=PVector.sub(Y,user);

   v=diff.div(4);

}












搖桿移動

<Arduino>

void setup() {

  pinMode(2,INPUT_PULLUP);

  Serial.begin(9600);

}

void loop() {//1000Hz(1000fps)

  int x=analogRead(A0);//0~1023

  int y=analogRead(A1);//0~1023

  int sw=digitalRead(2);//HIGH放開

  Serial.write(x/4);//第1個byte

  Serial.write(y/4);//第2個byte

  Serial.write(sw);//第3個byte

  delay(20);//1000ms/20ms => 50fps,變慢

}


球在哪就是搖桿現在的落點位置

<Processing>

import processing.serial.*;

Serial myPort;

void setup(){

  size(256, 256);

  myPort = new Serial(this,"COM4",9600);

}

int ballX=0,ballY=0;

void draw(){

  if(myPort.available()>=3){//延遲少一點 if 改 while

    int x=myPort.read();//0~255變成-128~+127

    int y=myPort.read();

    int sw=myPort.read();

    ballX=x;

    ballY=y;

  }

  ellipse(ballX,ballY,10,10);

}












利用搖桿控制球

<Processing>

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

   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;

   }

}




2020年12月14日 星期一

:D~week14

第一步 先將搖桿接在MakerUno上(或麵包板上)












(小心會很吵!!!)

移動搖桿,往上推是高音,往下推是低音

void setup() {

  pinMode(13,OUTPUT);

  pinMode(8,OUTPUT);

}

void loop() {

  int now=analogRead(A0);

  tone(8,now);

}



移動搖桿控制燈發光的數量(粗糙版)

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(0,150,200);

  rect(0,0,level*50,100);

  if(myPort.available()>0)

  {

     int now=myPort.read();

     level=now-'A';

  }

}









移動搖桿控制燈發光的數量(順暢版)

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/14)digitalWrite(i,HIGH);

    else digitalWrite(i,LOW);

  }

  Serial.write(level);

  delay(20);

}



<processing>

import processing.serial.*;

Serial myPort;

void setup()

{

  size(765,100);

  myPort=new Serial(this,"COM4",9600);

}

int level=0;

void draw()

{

  background(255);

  fill(0,150,200);

  rect(0,0,level*3,100);

  if(myPort.available()>0)

  {

     int now=myPort.read();

     level=now;

  }

}



Arduino和Processing比較,板子上的燈和processing做出的結果同步















2020年12月7日 星期一

:D~week13

按下按鈕會發出聲音

void setup() {

  pinMode(2,INPUT_PULLUP);

  pinMode(8,OUTPUT);

}


void loop() {

  if(digitalRead(2)==LOW)tone(8,572,100);

  else noTone(8);

}



按下按鈕出現1放開出現0

void setup() {

  Serial.begin(9600);

  pinMode(2,INPUT_PULLUP);

  pinMode(8,OUTPUT);

}

int state=0;

void loop() {

  // put your main code here, to run repeatedly:

  if(digitalRead(2)==LOW&&state==0)

  {

    state=1;

    Serial.write("1");

  }

  if(digitalRead(2)==HIGH&&state==1)

  {

    state=0;

    Serial.write("0");

  }

  delay(100);

}



















連到processing,按下按鈕背景變色
import processing.serial.*;
Serial myPort;
void setup()
{
   size(500,500);
   myPort=new Serial(this,"COM4",9600);
}
int button=0;
void draw()
{
   if(myPort.available()>0)
   {
     int now=myPort.read();
     println("現在",+now);
     if(now=='1')button=1;
     else button=0;
   }
   if(button==1)background(0,180,200);
   else background(255);
}
















連線到老師的電腦,按下按鈕,老師的電腦會顯示顏色

import hypermedia.net.*;

UDP udp;

void setup()

{

  size(500,500);

  udp=new UDP(this,6000);

  udp.send("hello world","120.125.70.53",6100);

}

void draw()

{

}

void mousePressed()

{

   udp.send("mousePressed","120.125.70.53",6100); 

}

我是第二台電腦





2020年11月30日 星期一

:D~week12

做出Do Mi So三個音

#define Do 523

#define Mi 659

#define So 784


void setup() {

  // put your setup code here, to run once:

  pinMode(8,OUTPUT);

  tone(8,Do);

  delay(1000);

  tone(8,Mi);

  delay(1000);

  tone(8,So);

  delay(1000);

  noTone(8);

}


void loop() {

  // put your main code here, to run repeatedly:

}



發出Do Mi So 三個音,且按按鈕會發出Mi的聲音

#define Do 523

#define Mi 659

#define So 784

#define BUTTON


void setup() {

  // put your setup code here, to run once:

  pinMode(2,INPUT_PULLUP);

  pinMode(8,OUTPUT);

  tone(8,Do);

  delay(100);

  tone(8,Mi);

  delay(100);

  tone(8,So);

  delay(100);

  noTone(8);

}


void loop() {

  // put your main code here, to run repeatedly:

  if(digitalRead(2)==LOW)tone(8,Mi,100);

}




發出Do Mi 兩個音,並傳送資料到Processing

#define Do 523

#define Mi 659

#define So 784

#define BUTTON


void setup() {

  Serial.begin(9600); //USB傳輸的速度 (A<=>P要一樣)

  // put your setup code here, to run once:

  pinMode(2,INPUT_PULLUP);

  pinMode(8,OUTPUT);

  tone(8,Do);

  delay(100);

  tone(8,Mi);

  delay(100);

  noTone(8);

}


void loop() {

  while(Serial.available()>0)

  {

    Serial.read();

    tone(8,So,100);

  }

}

結合Processing

import processing.serial.*;

Serial myPort;

void setup()

{

   myPort=new Serial(this,"COM4",9600); 

}

void draw()

{

  

}

void mousePressed()

{

   myPort.write("1"); 

}



做出類似小鋼琴

#define Do 523

#define Re 587

#define Mi 659

#define Fa 698

#define So 784

#define La 880

#define Si 988

#define Doo 1046

#define BUTTON


void setup() {

  Serial.begin(9600); //USB傳輸的速度 (A<=>P要一樣)

  // put your setup code here, to run once:

  pinMode(2,INPUT_PULLUP);

  pinMode(8,OUTPUT);

  tone(8,Do);

  delay(100);

  tone(8,Mi);

  delay(100);

  noTone(8);

}


void loop() {

  while(Serial.available()>0)

  {

    int now=Serial.read();

    if(now=='1')tone(8,Do);

    if(now=='2')tone(8,Re);

    if(now=='3')tone(8,Mi);

    if(now=='4')tone(8,Fa);

    if(now=='5')tone(8,So);

    if(now=='6')tone(8,La);

    if(now=='7')tone(8,Si);

    if(now=='8')tone(8,Doo);

    if(now=='0')noTone(8);

  }

}

傳送到processing,按數字鍵即可發出音階

import processing.serial.*;

Serial myPort;

void setup()

{

   myPort=new Serial(this,"COM4",9600); 

}

void draw()

{

  

}

void keyPressed()

{

   if(key=='1')myPort.write("1"); 

   if(key=='2')myPort.write("2");

   if(key=='3')myPort.write("3"); 

   if(key=='4')myPort.write("4");

   if(key=='5')myPort.write("5");

   if(key=='6')myPort.write("6");

   if(key=='7')myPort.write("7");

   if(key=='8')myPort.write("8");

}

void keyReleased()

{

   myPort.write("0"); 

}

void mousePressed()

{

   myPort.write("1"); 

}












2020年11月23日 星期一

:D~week11

 老師發了Maker Uno給我們用












音符對照表








利用Arduino寫發出音樂的程式

#define Do 523

#define Re 587

#define Mi 659

#define Fa 698

#define So 784

#define Do1 1046




int melody[] = {Do,0,Do,0,Do,Re,Mi,0,Mi,Re,Mi,Fa,So,0,Do1,Do1,0,So,So,0,Mi,Mi,0,Do,Do,0,So,Fa,Mi,Re,Do};

void setup()

{

  delay(1000);

  pinMode(8,OUTPUT);

  for (int i=0;i<31;i++) { 

    tone(8,melody[i],100);

    delay(200);

    }

}

void loop()

{


}

2020年11月2日 星期一

:D~week08

🔴吸取圖片的顏色

 PImage img;

color nowcolor;

void setup()

{

  size(300,300);

  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日 星期一

:D~week07

🔴找出三角形的點

 size(500,500);

for(int angle=0;angle<360;angle+=120)

{

   float angle2=radians(angle);

   float x=100+cos(angle2)*50;

   float y=100+sin(angle2)*50;

   ellipse(x,y,2,2);

}













🔴將點連線變三角形

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);//ellipse(x,y,2,2);

}

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);//ellipse(x,y,2,2);

  }

  endShape(CLOSE);

}













🔴隨著游標移動的轉動三角形

void setup()

{

   size(500,500); 

}

void draw()

{

  //background(255);

  beginShape();

  for(int angle=0;angle<360;angle+=120)

  {

     float angle2=radians(angle+mouseX);

     float x=mouseX+cos(angle2)*50;

     float y=mouseY+sin(angle2)*50;

     vertex(x,y);//ellipse(x,y,2,2);

  }

  endShape(CLOSE);

}













🔴隨著游標移動也會自己旋轉的三角形

void setup()

{

   size(500,500); 

}

void draw()

{

  //background(255);

  beginShape();

  for(int angle=0;angle<360;angle+=120)

  {

     float angle2=radians(angle+frameCount);

     float x=mouseX+cos(angle2)*100;

     float y=mouseY+sin(angle2)*100;

     vertex(x,y);//ellipse(x,y,2,2);

  }

  endShape(CLOSE);

}




















2020年10月19日 星期一

:D~week06

顯示文字

🔴顯示出文字,預設為白色

 text("Hello",30,30);







🔴文字顏色用fill

fill(255,0,0); 

text("Hello",30,30);







fill(255,0,0); 

textSize(40);

text("Hello",30,30);







size(500,400);

rect(100,100,200,100);

fill(255,0,0);

textSize(40);

textAlign(LEFT,TOP);

text("Hello",100,100);











size(800,300);

fill(255,0,0);

PFont font1=createFont("Times New Roman",30);

textFont(font1);

text("中文vs.English",30,30);

PFont font2=createFont("標楷體",30);

textFont(font2);

text("中文vs.English",30,130);







🔴陣列填色

int [][]A={ {1,1,1},

           {0,1,0},

           {0,1,1},

           {1,1,1} };

size(300,400);

for(int i=0;i<4;i++)

{

  for(int j=0;j<3;j++)

  {

    if(A[i][j]==0)fill(0);

    else fill(150,0,250);

    rect(j*100,i*100,100,100);

  }

}












🔴陣列填圖

int [][]A={ {2,2,2,2},

           {0,1,1,1},

           {0,1,1,1},

           {2,2,2,2} };

PImage bird,pig;

void setup()

{

  size(400,400);

  bird=loadImage("bird.png");

  pig =loadImage("snoopy.png");

}

void draw()

{

  background(0);

  for(int i=0;i<4;i++)

  {

    for(int j=0;j<4;j++)

    {

      if(A[i][j]==1)image(bird,j*100,i*100,100,100);

      if(A[i][j]==2)image(pig,j*100,i*100,100,100);

    }

  }

}













🔴戳泡泡遊戲

int [][]A={ {2,2,2,2},

           {0,1,1,1},

           {0,1,1,1},

           {2,2,2,2} };

PImage bird,pig;

void mousePressed()

{

   int i=int(mouseY/100);

   int j=int(mouseX/100);

   A[i][j]=0;

}

void setup()

{

  size(400,400);

  bird=loadImage("bird.png");

  pig =loadImage("snoopy.png");

}

void draw()

{

  background(0);

  for(int i=0;i<4;i++)

  {

    for(int j=0;j<4;j++)

    {

      if(A[i][j]==1)image(bird,j*100,i*100,100,100);

      if(A[i][j]==2)image(pig,j*100,i*100,100,100);

    }

  }

  ellipse(mouseX,mouseY,25,25); //滑鼠游標

  text("mouseX:"+mouseX+"mouseY"+mouseY,100,100); //座標

}

















2020年10月12日 星期一

:D~week05

水果忍者o(*°▽°*)o

🔴水果跳出

PImage img;

float x=100,y=100,vx=3,vy=-13;

void setup()

{

   size(500,500);

   img=loadImage("fruit1.png");

}

void draw()

{

  //background(255,255,255);  

  image(img,x,y,100,100);

    x+=vx;

    y+=vy;

    vy+=0.98;

}













🔴水果連續隨機跳出

PImage img;

float x=100,y=100,vx=3,vy=-13;

void setup()

{

   size(500,500);

   img=loadImage("fruit1.png");

}

void draw()

{

  //background(255,255,255);  

  image(img,x,y,100,100);

    x+=vx;

    y+=vy;

    vy+=0.98;

    if(y>500)

    {

      if(frameCount%2==0)

      {

         x=random(250); y=500;

         vx=random(2,3); vy=-random(28,32);

      }

      else

      {

         x=random(250,500); y=500;

         vx=-random(2,3); vy=-random(28,32); 

      }

    }   

}













🔴做出滑鼠刀子的效果,已大致完成水果忍者

PImage img;

float x=100,y=500,vx=3,vy=-13;

int fruitDie=0;

void setup()

{

   size(500,500);

   img=loadImage("fruit1.png");

}

void draw()

{

  background(0,0,0);  //加上背景,才不會有殘影

  image(img,x,y,100,100);

    x+=vx;

    y+=vy;

    vy+=0.98;

    if(y>500) fruitDie=1;

    if(x<mouseX&&mouseY<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); y=500;

          vx=random(2,3); vy=random(28,32);

       }

       fruitDie=0;

    }

}













🔴加入聲音,需下載聲音外掛













(我用方法一無法跑,但用方法二就成功了)

方法一

import processing.sound.*;  //聲音外掛

SoundFile sound1;

SoundFile sound2;

void setup()

{

   size(300,300);

   sound1=new SoundFile(this,"swords.wav");

   sound2=new SoundFile(this,"wind.wav");

   sound1.play();

   sound2.loop();

}

void draw()

{


}

void mousePressed()

{

   sound1.play();

}


方法二

import ddf.minim.*;  //聲音外掛

Minim minim;

AudioPlayer player1;

AudioPlayer player2;

void setup()

{

   minim=new Minim(this);

   player1=minim.loadFile("wind.wav");

   player2=minim.loadFile("swords.wav");

   player1.loop();

}

void draw()

{


}

void mousePressed()

{

   player2.rewind();

   player2.play();

}


🔴最後把聲音的程式碼跟水果的程式碼結合,即大致完成有聲音的水果忍者(。・∀・)ノ゙

PImage img;

float x=100,y=500,vx=3,vy=-13;

int fruitDie=0;

import ddf.minim.*;

Minim minim;

AudioPlayer player1;

AudioPlayer player2;

void setup()

{

   size(500,500);

   img=loadImage("fruit1.png");

   minim=new Minim(this);

   player1=minim.loadFile("wind.wav");

   player2=minim.loadFile("swords.wav");

   player1.loop();

}

void draw()

{

  background(0,0,0);  

  image(img,x,y,100,100);

    x+=vx;

    y+=vy;

    vy+=0.98;

    if(y>500) fruitDie=1;

    if(x<mouseX&&mouseY<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); y=500;

          vx=random(2,3); vy=random(28,32);

       }

       fruitDie=0;

    }

}

void mousePressed()

{

   player2.rewind();

   player2.play();

}


2020年10月5日 星期一

:D~week04

🔴嘗試用程式秀出一張圖片

PImage img;

size(385,231);

img=loadImage("image.png");

image(img,0,0);


🔴秀出兩張圖片

PImage img;

PImage img2;

size(385,231);

img=loadImage("image.png");

img2=loadImage("pic.png");

image(img,0,0);

image(img2,310,2,70,70);









🔴做出拖曳效果

PImage img;

PImage img2;

void setup()

{

  size(385,231);

  img=loadImage("image.png");

  img2=loadImage("pic.png");

}

void draw()

{

  image(img,0,0);

  image(img2,mouseX-70/2,mouseY-70/2,70,70);

}









🔴卷軸滾動

PImage img;

PImage img2;

void setup()

{

  size(200,100);

  img=loadImage("longpic.jpg");

  img2=loadImage("fatubo.png");

}

int x;

void draw()

{

  if(mouseX>100)x--;

  image(img,x,0);

  image(img2,mouseX-70/2,mouseY-70/2,70,70);

}












🔴牛頓定律

float x=250,y=200;

float vx=1.0,vy=2.5;

void setup()

{

  size(500,400);

}

void draw()

{

  ellipse(x,y,10,10);

  x+=vx;

  y+=vy;

  if(x>500||x<0)vx=-vx;

  if(y>400||y<0)vy=-vy;

}











🔴牛頓第二運動定律

float x=250,y=200;

float vx=1.3,vy=-14;

void setup()

{

  size(500,400);

}

void draw()

{

  ellipse(x,y,10,10);

  x+=vx;  y+=vy;//牛頓第一運動定律

  vy+=0.98;//牛頓第二運動定律

  if(x>500||x<0)vx=-vx*0.85;//遇到邊界反彈

  if(y>400||y<0)vy=-vy*0.85;//遇到邊界反彈

}