2013年1月16日 星期三

Week19,Final

作品名稱:跳不停

1.DEMO影片










2.操作界面


3.程式碼(Arduino)

int sensorPin = A0;
int sensorValue = 0;
int oldValue =0;
int val[6];
int oldval[6];
void setup() {
  Serial.begin(9600);
  for(int i=2;i<7;i++) pinMode(i, INPUT);
}
void loop() {
  sensorValue = analogRead(sensorPin);
  if(sensorValue-oldValue>100){
    Serial.print(8);
    //Serial.write(sensorValue);
    oldValue = sensorValue;
  }
  else if(sensorValue-oldValue<-10){
    Serial.print(9);
    //Serial.write(sensorValue);
    oldValue = sensorValue;
  }
  for(int i=2;i<7;i++) val[i-2] = digitalRead(i);
  if (val[0] != oldval[0]) {
      Serial.print(0);
      //Serial.write(0);
      oldval[0] = val[0];
  }
  if (val[1] != oldval[1]) {
      Serial.print(1);
      //Serial.write(1);
      oldval[1] = val[1];
  }
  if (val[2] != oldval[2]) {
      Serial.print(2);
      //Serial.write(2);
      oldval[2] = val[2];
  }
  if (val[3] != oldval[3]) {
      Serial.print(3);
      //Serial.write(3);
      oldval[3] = val[3];
  }
  if (val[4] != oldval[4]) {
      Serial.print(4);
      //Serial.write(4);
      oldval[4] = val[4];
  }
}

4.程式碼(Processing)

import ddf.minim.*;
Minim minim;
AudioPlayer bgm0;//背景音樂1
AudioPlayer bgm1;//背景音樂2
AudioPlayer bgm2;//背景音樂3
import processing.serial.*;
Serial myPort;
int val;
int mute,nowbgm;//靜音,現正播放
int m,savedtime,stage=0;
int gameover=0;
int character,count;
int score,time;//現在時間,現在分數
float characterX=50,characterY=0;//人物位置
float vx=1,vy;//人物速度
float g=0.1;//場景重力
float stageX,startX;//場景位移,怪物位移
float[] monsterX = new float[20];//怪物位置
int nowbtn=1;
PImage Pstage,Pstop,help,title;
PImage[][] Pcharacter = new PImage[20][6];//人物
PImage[][] Pmonster = new PImage[20][6];//怪物
PImage[][] Pbutton = new PImage[2][2];//選單按鈕
PImage Pscore,Ptime,dotImage,xx;//分數,時間,冒號,乘號
PImage[] num = new PImage[10];
PImage[] sound = new PImage[2];//音樂開關
PImage[] playing = new PImage[3];//播放中
void setup(){
  String portName = Serial.list()[0];
  myPort = new Serial(this, "COM3", 9600);
  size(1280,720);
  Pstage=loadImage("stage.png");
  Pstop=loadImage("stop.png");
  help=loadImage("help.png");
  title=loadImage("title.png");
  for(int i=0;i<20;i++){
    for(int j=0;j<6;j++){
      Pcharacter[i][j] = loadImage("/character/Frame"+i+"_"+j+".png");//人物
      Pmonster[i][j] = loadImage("/monster/Frame"+i+"_"+j+".png");//怪物
      if(i<2&&j<2) Pbutton[i][j] = loadImage("button"+i+"_"+j+".png");//選單按鈕
    }
    monsterX[i]=monsterX[i]=320+random(6400);//怪物位置
    if(i<10) num[i] = loadImage("/count/"+i+".png");//場景
    if(i<2) sound[i] = loadImage("sound"+i+".png");//音樂開關
    if(i<3) playing[i] = loadImage((i+1)+".png");//播放中 
  }
  Pscore = loadImage("/count/score.png");//分數
  Ptime = loadImage("/count/time.png");//時間
  dotImage = loadImage("/count/dot.png");//冒號
  xx = loadImage("/count/x.png");
  minim = new Minim(this);
  bgm0 = minim.loadFile("/bgm/bgm0.mp3");//背景音樂1
  bgm1 = minim.loadFile("/bgm/bgm1.mp3");//背景音樂2
  bgm2 = minim.loadFile("/bgm/bgm2.mp3");//背景音樂3
}
void draw(){
  if ( myPort.available() > 0) {  // If data is available,
    val = myPort.read();
    control(val);
  }
  m = millis();
  showstage(stage);
  showsound(mute,nowbgm);//音樂控制
}
void showmonster(int x,float y){
  image(Pmonster[x][m/100%5],y,500);
  if(characterX>y&&characterX<y+44&&characterY>433.5&&characterY<566.5){
    gameover=1;
  }
}
void showstage(int x){
  switch(x){
    case 0: 
    image(Pstage,0,0);
    image(title,0,0);
    image(Pbutton[0][0],440,300);//選單按鈕1
    image(Pbutton[1][0],440,450);//選單按鈕2
    if(nowbtn==1) image(Pbutton[0][1],440,300);//選單按鈕1
    else if(nowbtn==2) image(Pbutton[1][1],440,450);//選單按鈕2
    break;
    case 1:
    if(stageX<-1280)  stageX+=1280;
    image(Pstage,0,0);
    image(Pstage,stageX+1280,0);
    image(Pcharacter[character][m/100%5],characterX,characterY);
    for(int i=0;i<20;i++){
    if(monsterX[i]+startX<-100) monsterX[i]+=1280+random(6400);
    showmonster(i,monsterX[i]+startX);
    }
    vy-=g;
    if(abs(vy)<0.1) vy=0;
    characterY-=vy;
    if(characterY>=500){
      vy=0;
      characterY=500;
    }
    if(characterY<=0) characterY=0;
    vx*=0.999;
    characterX+=vx;
    if(characterX>640){
      characterX=640;
      stageX-=vx;
      startX-=vx;
    }
    if(gameover==1){
      vx=0;
      vy=0;
      g=0;
      image(Pstop,0,0);
    }
    if(vx!=0){
    score++;
    int  passedtime = millis() - savedtime;
    time=passedtime;
    }
    showScore(score);
    showTime(time/10); 
    break;
    case 2:
    image(Pstage,0,0);
    image(title,0,0);
    image(help,320,180);
    break;
  }
}
void showScore(int x){
  int a,b,c,d,e,f;
  f=x%10; x/=10;
  e=x%10; x/=10;
  d=x%10; x/=10;
  c=x%10; x/=10;
  b=x%10; x/=10;
  a=x%10;
  image(Pscore,920,10);
  image(num[a],1080,10);
  image(num[b],1110,10);
  image(num[c],1140,10);
  image(num[d],1170,10);
  image(num[e],1200,10);
  image(num[f],1230,10);
}
//顯示時間
void showTime(int x){
  int a,b,c,d,e,f;
  f=x%10; x/=10;
  e=x%10; x/=10;
  d=x%10;  x/=10;
  c=x%6; x/=6;
  b=x%10; x/=10;
  a=x;
  image(Ptime,10,10);
  image(num[a],120,10);
  image(num[b],150,10);
  image(dotImage,180,10);
  image(num[c],210,10);
  image(num[d],240,10);
  image(dotImage,270,10);
  image(num[e],300,10);
  image(num[f],330,10);
}
void keyPressed() {
  switch(stage){
    case 0:
    if (key == CODED) {
      if (keyCode == UP) {
        nowbtn=1;
      } else if (keyCode == DOWN) {
        nowbtn=2;
      }
    }
    if(key == 'z'){
        stage=nowbtn;
    }
    break;
    case 1:
    if(key == 'x'){
      if(gameover==0)
      if(characterY>=500) vy+=10;
    }
    if(key == 'c'){
        if(gameover==0) vx++;
    }
    if(key == 'z'){
      if(gameover==1)
        exit();
    }
    break;
    case 2:
    if(key == 'z'){
        stage=0;
    }
    break;
  }
}
void control(int x){
  if(x == '4'){
      mute++;
  }
  if(x == '8'){
      if(nowbgm<3) nowbgm++;
  }
  else if(x == '9'){
     if(nowbgm>0)nowbgm--;
  }
  switch(stage){
   case 0:
    if (x == '1') {
      nowbtn=1;
    } else if (x == '2') {
      nowbtn=2;
    }
    if(x == '0'){
        stage=nowbtn;
    }
    break;
    case 1:
    if(x == '1'){
      if(gameover==0)
      if(characterY>=500) vy+=10;
    }
    if(x == '2'){
        if(gameover==0) vx++;
    }
    if(x == '0'){
      if(gameover==1)
        exit();
    }
    if(x == '3'){
      if(gameover==0){
        count++;
        character=count%20;
      }
    }
    break;
    case 2:
    if(x == '0'){
        stage=0;
    }
    break;
  }
}
void showsound(int x,int y){
  image(num[1],70,660);
  image(num[2],110,660);
  image(num[3],150,660);
  if(x%4==2){
    image(sound[0],10,660);
    switch(y){
      case 0:
      bgm0.play();
      bgm1.pause();
      bgm2.pause();
      image(playing[0],70,660);
      break;
      case 1:
      bgm1.play();
      bgm0.pause();
      bgm2.pause();
      image(playing[1],110,660);
      break;
      case 2:
      bgm2.play();
      bgm1.pause();
      bgm0.pause();
      image(playing[2],150,660);
      break;
    }
  }else if(x%4==0){
    image(sound[1],10,660);
    bgm0.pause();
    bgm1.pause();
    bgm2.pause();
  }
}


5.心得

這次製作其實沒有想像中的簡單,大概是因為我對電路不夠熟悉的緣故
同時在Processing跟Arduino的連結也很差勁
其實感覺還有很多可改進的部分。

2013年1月15日 星期二

Week19,final,project

作品名稱:划船遊戲

1. 遊戲進行及裝置介紹

首先是開頭畫面



再來是進入到遊戲畫面



然後努力滑要到終點了 ! !



















如果在時間內趕上終點  你就贏了

就會顯示贏的畫面




















如果沒辦法就會顯示輸的畫面



















這是我們 arduino 的裝置圖 - 划船裝置




這張是裝置的內部

是採用彈簧與桿子的槓桿原理做出划船力道的模擬








我們把按鈕黏上彈簧讓控制時需要力道才能順利案到按鍵

然後利用保麗龍塊固定按鈕位置


















接者是控制示意圖



























下面是遊戲進行畫面 方向示意圖

右上角是剩餘時間





















2. 遊戲玩法說明

        當畫面一開始,就按下紅色開始鍵開始遊戲,雙手放在桿子上,模擬划船的槳
當手往前推動,遊戲畫面中的船就會往該方向前去,而在 30 秒內要到達終點
如果 30 秒內抵達就是任務達成,否則就是任務失敗遊戲結束


3. 心得

        這個划船遊戲能夠完整的利用裝置來操控,真的是非常的幸運
在整個遊戲作品的製作過程中,遇見了許許多多的問題,有和一些同學們共同討論解決
謝謝他們提供的建議和解決方式,也謝謝助教建議的軟體與硬體操控的方向 :)

         在完成裝置之前都是理想中的設計裝置,製作過程中便是狀況一堆
不僅僅是按鈕和搖桿的結合,再加上 arduino 接線、程式撰寫等等搭配,遇到的問題真不少
尤其是裝置的方形按鈕與接線處頻頻出錯,一下是按鈕壞掉接觸不良,一下是接線鬆掉
後來嘗試用了課堂上做的小鋼琴按鈕,結果卻是如我們預期的控制船的方向移動

        但這樣就要捨棄掉利用桿子進行操控裝置的方法,讓我們非常挫折與無奈
也因為捨棄掉操控裝置的方法可惜,我們不斷地的嘗試,看還有甚麼方式能補救
運氣很好的,在我們裝上小按鈕,再接上方形按鈕後卻可以操控了 ! ! ! ! !
划船裝置也在那時候如我們預期成果般地完成,順利地完成 demo
也很感謝同學和老師、助教的肯定,讓我們獲得了獎品,謝謝大家 :D

        很開心這學期學到了這麼多和互動相關的東西,這堂課很充實 :P 
我們從同學、老師、助教身上學到很多寶貴的經驗、程式撰寫技巧以及遊戲設計概念等等
也完成兩個簡單的小作品,雖然這兩個小作品不是非常的完整 ˊ  ˇ  ˋ
但對我們來說是很好的經驗,也讓我們更了解自己不足的地方,希望之後能表現得更好:D

4. 遊戲 demo 影片



5. 作品分工狀況


遊戲作品構思:王靚暄、詹中豪
遊戲背景素材貼圖:王靚暄
遊戲程式:王靚暄、詹中豪
遊戲裝置構思:詹中豪
遊戲裝置製做:王靚暄、詹中豪


6. 程式碼
*processing

import processing.serial.*;
Serial myPort;
PImage sence1;
PImage sence3;
PImage sence4;
PImage ship;
PImage bg;
int W=1000,H=700;
float boatX=320,boatY=100, boatVX=0, boatVY=0;
float bgX=0,bgY=-1232;
int gameTime,s;
boolean ctrl=true;
int lastTime;
import ddf.minim.*; 
Minim minim; 
int testState=0;
AudioPlayer player;


void setup(){
  size(W,H);
  sence1 = loadImage("sence1.jpg");
  sence3 = loadImage("sence3.jpg");
  sence4 = loadImage("sence4.jpg");
  image(sence1,0,0);
  ship = loadImage("ship.png");
  bg=loadImage("bg.jpg");
  s=millis()/1000;
  minim = new Minim(this);
  myPort = new Serial(this,"COM3", 9600); 
   player = minim.loadFile("abdc.mp3");
  player.play();
}

void draw(){
  
  testState = myPort.read();
  println(testState);
  
  if (testState=='G') {
    ctrl=false;
  }
   if(ctrl==true){
    s = millis();
    image(sence1,0,0); 
    } 
    else if(ctrl==false){{
    image(bg, bgX, bgY);
    if (bgY>0)
    bgY=0;
    boat(boatX, boatY);
    boatMove();
    
  }
  
    fill(255,0,0);
    textSize(60);

    lastTime = millis()- s; 
    gameTime = 30-lastTime/1000;  
    text(gameTime,900,70); 
  
  
  
    if(gameTime>0 && bgY==0){
    image(sence4,0,0);
    
    } 
    else if(gameTime <=0){
    image(sence3,0,0);
    gameTime = 0;
    
    }
  
    }
}
boolean [] keys=new boolean[250];
void boatMove() {
  if ( testState == 'A') {
    boatVY-=1;
    boatVX+=1;
    if (boatVX<0)boatVX=0;
    if (boatVY>-0.5)boatVY=-0.5;
  }
  if (testState == 'S') {
    boatVX-=0.5;
    boatVY-=0.5;
    if (boatVX<-1)boatVX=-1;
    if (boatVY>-0.5)boatVY=-0.5;
  }
  
  boatX+=boatVX;
  boatY+=boatVY;
  if (boatY<H/2) {
  bgY-=(boatY-H/2);
  boatY=H/2;
  }
  if (boatX<0) {
    boatX=0;
  }
   if (boatX>600) {
    boatX=600;
  }
  
  if (boatY>650) {
    boatY=650;
  }
  
  
  boatVY*=0.9;
  boatVX*=0.9;
}





void keyPressed() {
 if (testState=='G') {
   ctrl=false;
  }
  else if (testState=='A') {
    boatVY-=1;
    boatVX+=1;
  }
  else if (testState=='S') {
    boatVX-=0.5;
    boatVY-=0.5;
  }
  
}

void keyReleased() {
 if (testState=='A') {
    boatVY=0;
    boatVX=0;
  }
  else if (testState=='S') {
    boatVX=0;
    boatVY=0;
  }
} 

void boat(float X, float Y) {
  image(ship, boatX, boatY);
}



*arduino
/*
DigitalReadSerial
Reads a digital input on pin 2, prints the result to the serial monitor
This example code is in the public domain.
*/
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton2= 2;
int pushButton3 = 3;
int pushButton4 = 4;
int buttonState2 =0;
int buttonState3 =0;
int buttonState4 =0;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton2, INPUT);
pinMode(pushButton3,INPUT);
pinMode(pushButton4,INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
int buttonState2 = digitalRead(pushButton2);
int buttonState3 = digitalRead(pushButton3);
int buttonState4 = digitalRead(pushButton4);
// print out the state of the button:
if (buttonState2 == HIGH) {     
   Serial.write('A');
  } 
  if (buttonState3== HIGH) {     
   Serial.print('S');
  }
  if (buttonState4 == HIGH ) {     
    Serial.print('G');
    buttonState4 = 1;}

   else {
   Serial.print('H');
  }
   delay(100);
}

98160860黃麒, 98163021張耀璇, Final,



介紹:
我們這組所做的是剪紅線,名字只是個比喻,就好像有五顆炸彈,其中一顆會爆炸,而我們必須猜對那一顆炸彈才能讓贏得遊戲,本來是思考享用很多很多顆假炸彈參雜數顆真炸彈,可是手邊的材料沒有那麼多,所以就縮減成五顆。

程式碼:

import processing.serial.*;
Serial myPort;
import ddf.minim.*;
Minim minim;
AudioPlayer wrong,right;
int com;
int x=0;
int val;
PImage a1,a2,a3,a4,a5,b1,b2,b3,b4,b5,r1,r2;
void setup(){
   myPort = new Serial(this, "COM4", 9600);
  com=int(random(4))+1;
  minim = new Minim(this);
  size(800,600);
  wrong= minim.loadFile("w.mp3");
  right = minim.loadFile("r.mp3");
  a1 = loadImage("a1.png");
  b1 = loadImage("b1.png");
  a2 = loadImage("a2.png");
  b2 = loadImage("b2.png");
  a3 = loadImage("a3.png");
  b3 = loadImage("b3.png");
  a4 = loadImage("a4.png");
  b4 = loadImage("b4.png");
  a5 = loadImage("a5.png");
  b5 = loadImage("b5.png");
  r1 = loadImage("r1.png");
  r2 = loadImage("r2.png");
}
void draw(){
  if(myPort.available()&rt;0){
    val = myPort.read();
 //   println(val);
   }
   if(val=='1'){
     x=1;
   }
   else if(val=='2'){
     x=2;
   }
   else if(val=='3'){
     x=3;
   }
   else if(val=='4'){
     x=4;
   }
   else if(val=='5'){
     x=5;
   }
   else if(val=='R'){
     x=0;
     right.pause();
     right.rewind();
    com=int(random(4))+1;
   }
  background(244,219,142);
  rect (200,0,400,75);
  if(x==1)  image(b1,50,100,200,200);
  else image(a1,50,100,200,200);
  
  if(x==2)  image(b2,300,100,200,200);
  else image(a2,300,100,200,200);
  
  if(x==3)  image(b3,550,100,200,200);
  else image(a3,550,100,200,200);
  
  if(x==4)  image(b4,175,300,200,200);
  else image(a4,175,300,200,200);
  
  if(x==5)  image(b5,425,300,200,200);
  else image(a5,425,300,200,200);
  
  if(x==6)  image(r2,0,510,800,90);
  else image(r1,0,510,800,90);
  
  
 println("com="+com);
//  println(x);
  if (x==com && x!=0)  {fill(183,244,69);
  right.play();
}
  else if (x!=com && val!='H' && x!=0)  {
    wrong.play();
    wrong.rewind();
}
  else
    fill(255,0,0);
  rect (200,0,400,75);  
}
void keyPressed(){
  if(key=='1') x=1;
  if(key=='2') x=2;
  if(key=='3') x=3;
  if(key=='4') x=4;
  if(key=='5') x=5;
  if(key==' '){x=6;
    com=int(random(4))+1;
  }
}

遊戲畫面:




Week15,HW12

期末進度

原本打算做出新的程式,但是沒有好的想法
可能還是使用期中作品的修改
但是其中的操作是使用滑鼠,要對應到Arduino可能還有問題
首先得先把鍵盤部分做出來。

Week13,HW11

簡易鋼琴(可變音)

1.影片
2.心得

喇叭的線容易接觸不良,在接線時有些麻煩。

3.程式碼

int val[6];
int sensorPin = A0;
int sensorValue = 0;
void setup(){
  for(int i=2;i<7;i++) pinMode(i, INPUT);
}
void loop(){
  sensorValue = analogRead(sensorPin); 
  for(int i=2;i<7;i++) val[i-2] = digitalRead(i);
  for(int i=0;i<6;i++)
    if (val[i] == HIGH) {
      switch(i){
        case 0 : tone(8,262+sensorValue,4); break;
        case 1 : tone(8,294+sensorValue,4); break;
        case 2 : tone(8,330+sensorValue,4); break;
        case 3 : tone(8,349+sensorValue,4); break;
        case 4 : tone(8,392+sensorValue,4 ); break;
      }
    }
}


Week19, Final Project


Processing程式碼:

import processing.serial.*;
Serial port;
int word;
PImage img;
int rx=28,ry=5;
boolean move = true;
int a=0,b=0,c=0,d=0;
void setup() {
  size(400, 400);
  img = loadImage("maze.jpg");
  port = new Serial(this, "COM3", 9600);
}
void draw() {
 
  if(port.available()>0){
    word = port.read();
    }
 
  image(img, 0, 0);
  loadPixels();
 
  fill(225, 0, 0);//點點
  ellipse(rx, ry, 10, 10);
 
  if (move==true) {
    if(word=='W')ry=ry-1;
    if(word=='S')ry=ry+1;
    if(word=='A')rx=rx-1;
    if(word=='D')rx=rx+1;
  }
  color now_color = pixels[ry*400+rx];
 
  if (rx>398){
    rx=398;
    fill(0, 0, 0);
    rect(0, 0, 400, 400);
    textSize(50);
    fill(255, 255, 0);
    text("Congratulation", 20, 220);
  }
 
  if (red(now_color)<100){
    move = false;
    fill(0, 0, 0);
    rect(0, 0, 400, 400);
    textSize(50);
    fill(255, 255, 0);
    text("GAME OVER", 60, 220);
  }
 
  else move = true;

}

----------------------------------------------------------------------------

Arduino程式碼:

int buttonPin1 = 2;
int buttonPin2 = 3;
int buttonPin3 = 4;
int buttonPin4 = 6;

int buttonState1 = 0;  
int buttonState2 = 0;  
int buttonState3 = 0;  
int buttonState4 = 0;  
 
void setup() {
  
  Serial.begin(9600);
  pinMode(buttonPin1, INPUT);     
  pinMode(buttonPin2, INPUT);     
  pinMode(buttonPin3, INPUT);     
  pinMode(buttonPin4, INPUT);     
  
}

void loop() {
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);
  buttonState3 = digitalRead(buttonPin3);
  buttonState4 = digitalRead(buttonPin4);
  
  if (buttonState1 == HIGH) {     
   Serial.write('W');
  }  
  if (buttonState2 == HIGH) {     
   Serial.print('S');
  }
  if (buttonState3 == HIGH) {     
   tone(8, 165 , 300);
   Serial.print('A');
  }
  if (buttonState4 == HIGH) {     
   tone(8, 175 , 300);
   Serial.print('D');
  }
  delay(100);
}

2013年1月14日 星期一

期末作品 Final


系統名稱:  <piano>

如何製作:

  1、用黑白膠帶纏住由冰棍製成的黑鍵與白鍵
  2、連接電路板、七個電阻、一個喇叭。
  3、製作由processing點選開始的畫面、進入鋼琴的畫面。
  4、撰寫arduino的程式碼。
  5、搜尋processing與arduino相互連接的程式。

圖片:
一開始執行的畫面
點選"Enter to play"後的畫面
按第一個按鈕,發出Do的聲音
按第二個按鈕,發出Re的聲音
按第三個按鈕,發出Me的聲音
按第四個按鈕,發出Fa的聲音
按第五個按鈕,發出So的聲音
小鋼琴圖片-1
小鋼琴圖片-2
小鋼琴圖片-3
電路板接線圖

程式碼

processing程式碼


import processing.serial.*;
Serial myPort;

PImage bg1,Do,Re,Mi,Fa,So,La,Si;

void setup() {
  size(800, 600);
  bg1 = loadImage("piano.jpg");  //載入圖檔
  Do = loadImage("piano-Do1.jpg");
  Re = loadImage("piano-Re1.jpg");
  Mi = loadImage("piano-Mi1.jpg");
  Fa = loadImage("piano-Fa1.jpg");
  So = loadImage("piano-So1.jpg");
  La = loadImage("piano-La1.jpg");
  Si = loadImage("piano-Si1.jpg");
  myPort = new Serial(this, "COM15", 9600);
}

void draw() {
  image(bg1, 0, 0, 800, 600);
  image(Do, 86, 82, 89, 333);
  image(Re, 169, 80, 89, 333);
  image(Mi, 253, 81, 89, 333);;
  image(Fa, 338.5, 84, 89, 333);
  image(So, 425, 81, 89, 333);;
  image(La, 509, 82, 89, 333);
  image(Si, 593, 82, 89, 333);
}


arduino程式碼


const int inPin1 = 1;
const int inPin2 = 2;
const int inPin3 = 3;
const int inPin4 = 4;
const int inPin5 = 5;
const int inPin6 = 6;
const int inPin7 = 7;

int val1 = 0, val2 = 0, val3 = 0, val4 = 0, val5 = 0, val6 = 0, val7 = 0;

void setup() {
   Serial.begin(9600);

   pinMode(inPin1, INPUT);
   pinMode(inPin2, INPUT);
   pinMode(inPin3, INPUT);
   pinMode(inPin4, INPUT);
   pinMode(inPin5, INPUT);
   pinMode(inPin6, INPUT);
   pinMode(inPin7, INPUT);
}

void loop() {
   val1 = digitalRead(inPin1);
   val2 = digitalRead(inPin2);
   val3 = digitalRead(inPin3);
   val4 = digitalRead(inPin4);
   val5 = digitalRead(inPin5);
   val6 = digitalRead(inPin6);
   val7 = digitalRead(inPin7);

      if(val1==HIGH){
         tone(8,524,8);
      }
      if(val2==HIGH){
         tone(8,588,8);
      }
      if(val3==HIGH){
         tone(8,660,8);
      }
      if(val4==HIGH){
         tone(8,698,8);
      }
      if(val5==HIGH){
         tone(8,784,8);
      }
       if(val6==HIGH){
         tone(8,880,8);
      }
       if(val7==HIGH){
         tone(8,988,8);
      }
}





心得介紹:
  我們在家執行時,程式碼是可以執行的;但在學校卻不能執行,經過老師的指導才知道原來
  是程式碼的問題,我們把之前在家裡寫得很完整的有些程式碼註解掉了,導致程式在執行
  時,狀況一堆 。
  原本我們的構想是想在這次的期末作品中,利用二維陣列寫出錄音的功能,可以記錄時間、
  音樂,讓玩家可以儲存自己在彈奏的旋律,並加入播放的功能,聲音是由電腦發出剛剛輸入
  的聲音。希望之後可以完成這兩項功能。

影片:




組員分工:

  陳孟琳:主要負責processing、arduino的程式碼。

  紀詠心:主要負責電路連接。

Week19,Final project


1.系統名稱
越吃越長貪食蛇

2.製作方式
用processing 結合arduino板 製作出一個簡易的貪食蛇遊戲

並設置4個按鈕 控制貪食蛇上下左右行走 讓自己越吃越長
隨心所欲愛吃什麼就吃什麼

3.圖片




 



















4.心得介紹
由於之前所做的跟其他組相似,所以全部都重新來過,所以我們做一個貪食蛇的遊戲
遊戲非常簡單,讓大家操作起來更得心應手也有趣,所以瞞開心的也蠻有成就感的yeah

5.影片

6.組員分工情況
我們的程式設計 還有配接電路加上所有的美觀美術都是大家一起分工合作完成的,非常和樂融融,開心萬分。

WEEK19, Final Project

專案名稱 : 我要打星星
程式碼 :
arduino :

const int buttonPin1 = 2;
const int buttonPin2 = 4;
const int buttonPin3 = 6;
const int buttonPin4 = 8;
const int buttonPin5 = 10;
const int buttonPin = 6;
const int ledPin1 = 3;
const int ledPin2 = 5;
const int ledPin3 = 7;
const int ledPin4 = 9;
const int ledPin5 = 11;
int buttoni=0;
int buttoni1=0;
int buttoni2=0;
int buttoni3=0;
int buttoni4=0;
int buttoni5=0;
int switchi=0;
int ledi=0;
int uv=0;
int buttonState=0;
int bt=1;
int rdn=random(1, 6);
unsigned long time;
unsigned long time1;
unsigned long dtime1;
unsigned long dtime=1000;
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if(buttonState==HIGH)
{uv=1;
dtime=1000;
buttoni=0;
bt=1;
}
if(uv==1)
{
int i;
for(i=0;i<=2;i++){
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin5, HIGH);
delay(1000);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
delay(1000);
if(i==2)
{
uv=2;
}
 }
}
if(uv==2)
{
if(bt==1){
bt=0;
switch (rdn) {
case 1:
digitalWrite(ledPin1, HIGH);
break;
case 2:
digitalWrite(ledPin2, HIGH);
break;
case 3:
digitalWrite(ledPin3, HIGH);
break;
case 4:
digitalWrite(ledPin4, HIGH);
break;
case 5:
digitalWrite(ledPin5, HIGH);
break;
}
time = millis();
}
time1=millis();
dtime1=time1-time;
if(dtime1>=dtime&&bt==0){
uv=3;
}
buttoni1 = digitalRead(buttonPin1);
buttoni2 = digitalRead(buttonPin2);
buttoni3 = digitalRead(buttonPin3);
buttoni4 = digitalRead(buttonPin4);
buttoni5 = digitalRead(buttonPin5);
if(buttoni1==HIGH)
buttoni=1;
if(buttoni2==HIGH)
buttoni=2;
if(buttoni3==HIGH)
buttoni=3;
if(buttoni4==HIGH)
buttoni=4;
if(buttoni5==HIGH)
buttoni=5;
if(buttoni!=0&&buttoni!=rdn)
uv=3;
if(buttoni==rdn)
{
bt=1;
dtime-=20;
switch (buttoni) {
case 1:
digitalWrite(ledPin1, LOW);
break;
case 2:
digitalWrite(ledPin2, LOW);
break;
case 3:
digitalWrite(ledPin3, LOW);
break;
case 4:
digitalWrite(ledPin4, LOW);
break;
case 5:
digitalWrite(ledPin5, LOW);
break;
}
rdn=random(1, 6);
delay(dtime);
time=millis();
buttoni=0;
}
}
if(uv==3)
{
int i;
for(i=0;i<=2;i++){
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin5, HIGH);
delay(500);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
delay(500);
if(i==2)
{
uv=0;
}
}
}
 }

processing :
按中間的開始鍵會有加10分
import processing.serial.*;
Serial myPort;
int score = 0;
float count=1.5;
float count2=0;
void setup(){
size(600,400);
//background(255, 204, 0);
myPort = new Serial(this, "COM3", 9600);
float yrope = 100;
}
int value=0;
void draw(){
background(255, 204, 0);
fill(0);
textSize(150);
text(score, 300, 350);
while(myPort.available()>0)
{
value = myPort.read();
println(value);
if(value=='G'){
score+=10;//分數跳一次加10分
count2+=1;
}
}
}
圖片 :
心得:
在製作的過程中電線有時候一直短路很困擾,再連接processing 時一直出現狀況
燈有時候會一直閃不停QQ
原本processing是用來加分數,可是只做到傳送開始鈕的值~
我們利用遊戲時間即次數來控制遊戲結束與否。