第一天課程:2小時
AI輔助Processing程式設計發展過程
先設定chatGPT的角色以避免答非所問,例如:【chatGPT為一位processing 程式設計師】
試著在processing 上劃一個圓,【請在畫布中間畫一個圓】或【請在畫布中間畫一個紫色的圓】
試著在processing 上按下滑鼠按鍵改變 顏色,【按下滑鼠左鍵圓變成紅色,按下滑鼠右鍵圓變成綠色】或【在圓上按下滑鼠左鍵圓變成紅色,按下滑鼠右鍵圓變成綠色】
試著畫一間房子【請在畫布中畫一個灰色的正方形,在正方形的上方畫一個紅色的三角形】
你可以在房子上面加上一個十字架嗎?
你可以在用滑鼠控制房子牆壁、屋頂、十字架的顏色嗎?
第二天
先設定chatGPT的角色以避免答非所問,例如:【chatGPT為一位arduino程式設計師】
把Arduino IDE程式啟動,並且將Arduino連接至USB2.0,參考頁面
【讓LED 閃爍 ,LED在第13腳】
【兩個LED交互閃爍 ,紅色LED在第12腳,藍色LED在第13腳】
【2個LED交互閃爍並且發出警笛聲 ,紅色LED在第12腳,藍色LED在第13腳,蜂鳴器在第5腳】
【用Arduino播放小星星的音樂,蜂鳴器在第接腳5。 】
【用Arduino播放小星星的音樂,按下第2腳的按鈕播放一次,蜂鳴器在第接腳5。 】
第三天
先設定chatGPT的角色以避免答非所問,例如:【你是一位擅長撰寫Arduino與Processing程式碼的工程師 】
把Arduino IDE程式啟動,並且將Arduino連接至USB,參考頁面
Processing 的滑鼠控制Arduino的LED【arduino與processing透過USB通訊 】
注意事項:
把Arduino 程式碼複製起來,貼到Arduino IDE程式中。善用 Ctrl+A(全選),Ctrl+V(貼上)
把Processing 程式碼複製起來,貼到Processing程式中。善用 Ctrl+A(全選),Ctrl+V(貼上)
Arduino要先編譯、下載完成後,才可以執行Processing的程式碼。
如果無法成功,請找出myPort = new Serial(this, Serial.list()[0], 9600); 要修改Serial.list()[0]的[0]數字。
把Arduino讀取的資料傳送至Processing上【將Arduino上光敏電阻的數值顯示在Processing上,光敏電阻在第A1腳 】
如果Arduino出現上傳失敗,請先檢查Processing執行中的程式是否已經停止(按下Processing的方形按鈕)
【在processing畫布中央繪製一個指針,讀取Arduino上可變電阻的數值從0到1024對應使指針指向從0度到180度,可變電阻在第A0腳 】
進階題目:
你可以在按下按鈕2後讓指針前端發射一個黃色的子彈。
你可以在螢幕上畫出紅、黃、綠的圓形,在按下對應的圓形後,讓板子上面的三色LED(白色RGBLED)發出對應的光。
// 遊戲物件變數
int ballX, ballY; // 球的位置
int ballSpeedX = 3; // 球的水平速度
int ballSpeedY = 3; // 球的垂直速度
int ballSize = 15; // 球的大小
int paddleX; // 平台的X座標
int paddleY; // 平台的Y座標
int paddleWidth = 100; // 平台寬度
int paddleHeight = 10; // 平台高度
int rows = 5; // 磚塊的行數
int cols = 8; // 磚塊的列數
int brickWidth, brickHeight;
boolean[][] bricks; // 用來存儲磚塊狀態
void setup() {
size(800, 600); // 設定畫布大小
ballX = width / 2; // 初始化球的位置
ballY = height / 2;
paddleY = height - 40; // 平台的位置
brickWidth = width / cols; // 每塊磚的寬度
brickHeight = 20; // 磚塊的高度
// 初始化磚塊陣列
bricks = new boolean[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
bricks[i][j] = true; // 設定所有磚塊為可見
}
}
}
void draw() {
background(0); // 黑色背景
drawBall(); // 畫球
drawPaddle(); // 畫平台
drawBricks(); // 畫磚塊
moveBall(); // 移動球
checkCollision(); // 檢查碰撞
}
void drawBall() {
fill(255, 0, 0); // 球的顏色 (紅色)
ellipse(ballX, ballY, ballSize, ballSize);
}
void drawPaddle() {
fill(0, 255, 0); // 平台的顏色 (綠色)
paddleX = mouseX - paddleWidth / 2; // 平台隨滑鼠移動
rect(paddleX, paddleY, paddleWidth, paddleHeight);
}
void drawBricks() {
fill(0, 0, 255); // 磚塊顏色 (藍色)
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (bricks[i][j]) {
int brickX = j * brickWidth;
int brickY = i * brickHeight;
rect(brickX, brickY, brickWidth - 2, brickHeight - 2); // 磚塊間留2像素間隔
}
}
}
}
void moveBall() {
ballX += ballSpeedX;
ballY += ballSpeedY;
// 碰到左右牆壁反彈
if (ballX <= 0 || ballX >= width) {
ballSpeedX *= -1;
}
// 碰到上方牆壁反彈
if (ballY <= 0) {
ballSpeedY *= -1;
}
// 如果球掉到畫面底部,遊戲重新開始
if (ballY > height) {
ballX = width / 2;
ballY = height / 2;
ballSpeedX = 3;
ballSpeedY = 3;
}
}
void checkCollision() {
// 檢查球與平台碰撞
if (ballY + ballSize / 2 >= paddleY &&
ballX > paddleX && ballX < paddleX + paddleWidth) {
ballSpeedY *= -1; // 垂直方向反彈
ballY = paddleY - ballSize / 2; // 避免穿透平台
}
// 檢查球與磚塊碰撞
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (bricks[i][j]) { // 如果磚塊可見
int brickX = j * brickWidth;
int brickY = i * brickHeight;
if (ballX > brickX && ballX < brickX + brickWidth &&
ballY > brickY && ballY < brickY + brickHeight) {
bricks[i][j] = false; // 磚塊消失
ballSpeedY *= -1; // 垂直反彈
}
}
}
}
}
// 遊戲物件變數
int ballX, ballY; // 球的位置
int ballSpeedX = 3; // 球的水平速度
int ballSpeedY = 3; // 球的垂直速度
int ballSize = 15; // 球的大小
int paddleX; // 平台的X座標
int paddleY; // 平台的Y座標
int paddleWidth = 100; // 平台寬度
int paddleHeight = 10; // 平台高度
int rows = 5; // 磚塊的行數
int cols = 8; // 磚塊的列數
int brickWidth, brickHeight;
boolean[][] bricks; // 用來存儲磚塊狀態
int score = 0; // 分數變數
color[] brickColors = {color(255, 0, 0), color(255, 255, 0), color(0, 0, 255), color(0, 255, 0)}; // 紅、黃、藍、綠
void setup() {
size(800, 600); // 設定畫布大小
ballX = width / 2; // 初始化球的位置
ballY = height / 2;
paddleY = height - 40; // 平台的位置
brickWidth = width / cols; // 每塊磚的寬度
brickHeight = 20; // 磚塊的高度
// 初始化磚塊陣列
bricks = new boolean[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
bricks[i][j] = true; // 設定所有磚塊為可見
}
}
}
void draw() {
background(0); // 黑色背景
drawBall(); // 畫球
drawPaddle(); // 畫平台
drawBricks(); // 畫磚塊
drawScore(); // 顯示分數
moveBall(); // 移動球
checkCollision(); // 檢查碰撞
}
void drawBall() {
fill(255, 0, 0); // 球的顏色 (紅色)
ellipse(ballX, ballY, ballSize, ballSize);
}
void drawPaddle() {
fill(0, 255, 0); // 平台的顏色 (綠色)
paddleX = mouseX - paddleWidth / 2; // 平台隨滑鼠移動
rect(paddleX, paddleY, paddleWidth, paddleHeight);
}
void drawBricks() {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (bricks[i][j]) {
fill(brickColors[i % brickColors.length]); // 根據行數設定顏色
int brickX = j * brickWidth;
int brickY = i * brickHeight;
rect(brickX, brickY, brickWidth - 2, brickHeight - 2); // 磚塊間留2像素間隔
}
}
}
}
void drawScore() {
fill(0); // 白色文字
textSize(20);
text("Score: " + score, 10, 30); // 顯示分數
}
void moveBall() {
ballX += ballSpeedX;
ballY += ballSpeedY;
// 碰到左右牆壁反彈
if (ballX <= 0 || ballX >= width) {
ballSpeedX *= -1;
}
// 碰到上方牆壁反彈
if (ballY <= 0) {
ballSpeedY *= -1;
}
// 如果球掉到畫面底部,遊戲重新開始
if (ballY > height) {
ballX = width / 2;
ballY = height / 2;
ballSpeedX = 3;
ballSpeedY = 3;
score = 0; // 重設分數
}
}
void checkCollision() {
// 檢查球與平台碰撞
if (ballY + ballSize / 2 >= paddleY &&
ballX > paddleX && ballX < paddleX + paddleWidth) {
ballSpeedY *= -1; // 垂直方向反彈
ballY = paddleY - ballSize / 2; // 避免穿透平台
}
// 檢查球與磚塊碰撞
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (bricks[i][j]) { // 如果磚塊可見
int brickX = j * brickWidth;
int brickY = i * brickHeight;
if (ballX > brickX && ballX < brickX + brickWidth &&
ballY > brickY && ballY < brickY + brickHeight) {
bricks[i][j] = false; // 磚塊消失
ballSpeedY *= -1; // 垂直反彈
// 根據磚塊顏色計分
switch (i % brickColors.length) {
case 0: score += 25; break; // 紅色磚塊
case 1: score += 10; break; // 黃色磚塊
case 2: score += 5; break; // 藍色磚塊
case 3: score -= 5; break; // 綠色磚塊
}
}
}
}
}
}
元件腳位規劃如下:
D0:預留RX使用(可外接藍芽)
D1:預留TX使用(可外接藍芽)
D2:按键模組 SW1
D3:按键模組 SW2
D4:DHT11温濕度傳感器模組
D5:蜂鳴器模組
D6:紅外線接收器模組
D7:預留腳位(已接出杜邦接頭)
D8:預留腳位(已接出杜邦接頭)
D9:RGB三色LED模組
D10:RGB三色LED模組
D11:RGB三色LED模組
D12:紅色LED模組
D13:藍色LED模組
A0:旋轉電位器模組
A1:光敏電阻模組
A2:LM35温度傳感器模組
A3:預留腳位(已接出杜邦接頭)
A4:預留I2C模組腳位(SDA已接出杜邦接頭) 在 SW1上面
A5:預留I2C模組腳位(SCL已接出杜邦接頭) 在 SW1上面
請用arduino 寫一個紅綠燈,紅燈接第2腳,綠燈接第3腳,黃燈接第4腳
請用processing 在螢幕上顯示一個紅色的圓,背景是白色。
當滑鼠在圓上按下左鍵,紅色的圓變成暗紅色,按下右鍵紅色的圓變成正紅色.
將arduino 上的第2腳與紅色LED連接。用processing 寫一個與arduino 使用USB連線的程式,當滑鼠在圓上按下左鍵時紅色的圓變成暗紅色而且arduino 上的紅色LED熄滅,按下右鍵紅色的圓變成正紅色而且arduino 上的紅色LED亮起。
請用processing 畫一個滑桿,可以用滑鼠左鍵移動長度。外框為黑色,滑桿為藍色,按鈕為紅色。
請用processing 畫一個滑桿,可以用滑鼠左鍵移動長度。外框為黑色,滑桿為藍色,按鈕為紅色。滑鼠移動最大值為255。 將滑鼠移動的位置透過usb傳送到arduino上,以控制接腳3LED的亮度
請用processing 畫一個滑桿,可以用滑鼠左鍵移動長度。外框為黑色,滑桿為藍色,按鈕為紅色。滑鼠移動最大值為255。將滑鼠移動的位置透過usb傳送到arduino上,以控制接腳5伺服馬達的角度
應用
用來校正機械手臂的起始角度
用來控制紅綠燈
Google Gemini 2.0 Flash 震撼登場!超越 1.5 Pro|即時鏡頭互動、高級語音模式不再是夢!實測能力表現! 19'01"
谷歌的逆袭之作:实测Gemini 2.0三大核心功能,原生多模态+工具,超越当前AI助手的局限 16'39"
ChatGPT不需要登入也可以使用了?!|OpenAI宣布無需登入 也可以使用ChatGPT
离谱!完全不懂编程,我竟然4小时靠AI复刻出月入$600k的APP的同款,方法居然这么简单? 16'04"
AI开发神器:https://bolt.new/
Can AI code Flappy Bird? Watch ChatGPT try
A.I. Learns To PERFECT Flappy Bird
场景、角色、音乐、剧情全用AI生成,这款游戏花了3天就做出来了
2024-07-10 投影片