# 我的備審資料
## 姓名
石均騰
## 興趣
我的興趣是寫程式或是做一些跟電路板有關的東西,有時在閒暇時間還會休息做點運動。
## 在校成績
雖我的在校成績不理想,但是我在高二時的資訊科技和高三時的進階程式設計課程都有拿到97分。
## 個人資料表
1. APCS:觀念題3分實作題2分

2. 英文能力:多益645分

3. 硬體設計:Arduino Uno、麵包板電路設計、電子元件的應用、micro:bit
4. 軟體設計:C/C++、排序演算法、Scratch
5. 熟悉工具:Vim、VSCode、GCC、Markdown、CodeBlocks、電烙鐵使用
6. 個人網頁:HackMD、GitHub
## 學習歷程自述
// 淡江不用
// 元智不用
### 高中學習歷程反思
### 就讀動機
我很喜歡寫程式和實作硬體設計。對我來說,寫程式就像是在解謎一樣,每次都有新的挑戰和解決的樂趣。而跟硬體有關的設計則讓我感受到自己在創造一些實際的東西,像是把想法經過硬體和一些程式的控制變成自己所想的東西。這些活動讓我能夠學習和成長,而且我覺得這也是一種極具實用性的技能和興趣。
### 未來規劃
我對未來抱持著極大的期待,希望能夠在大學的學習過程中深入探索並精進於程式相關的知識和技能,以迎接不斷變化的數位時代。同時,我也期待透過這個過程結交更多志同道合的朋友,彼此相互學習、成長。而對於未來的職涯規劃,我熱切地期待能夠加入一家資訊公司,融入一個具有活力和創新氛圍的團隊中,貢獻自己的專業知識與熱情,並不斷挑戰自我,實現個人的職業目標與夢想。
## 課程學習成果
## 多元表現綜整
**軟體設計**
### 排座位的程式
1. 排座位的程式
在高二的時候做了個可以把數字打亂的程式,是一個讓所有數字打亂並且排列出來的程式,操作時只需要打出需要被排列出來的數字的頭尾,而程式就會自動把頭尾之間的數字補齊並打亂再輸出
- 以下是完成的程式和成果:
``` c=
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int start, end, length;
int numbers[99];
printf("請輸入第一個數字和最後一個數字(用空格分隔)) ");
scanf("%d %d", &start, &end);
length = end - start + 1;
for(int i = 0;i < length;i++)
{
numbers[i] = start + i;
}
srand(time(NULL));
for (int i = length - 1; i > 0; i--)
{
int j = rand() % (i + 1);
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
printf("排出的順序為");
for (int i = 0; i < length; i++)
{
printf("%d ", numbers[i]);
}
printf("\n");
}
```
- 最後成果
``` c=
請輸入第一個數字和最後一個數字(用空格分隔)) 1 20
排出的順序為
12 15 8 19 3 5 7 2 1 14 9 13 6 11 10 17 20 4 18 16
```
- 動機:
當時在學校要我們用一個以自己喜歡的興趣為主題做成一個報告,當時因我只想到我對程式語言很感興趣,但是我沒有想到要做一個甚麼用途的程式,於是老師就跟我提議說我們班每次換座位時都是用抽籤抽到的順序來排列,她覺得非常的麻煩而且很花時間,所以希望我能做一個程式可以把讓他輸入我們的座號並打亂再列出來的程式再用排列出來的順序當成我們坐座位的位子。
- 學習心得:
在開始解決這個程式的挑戰之前,我花了一些時間思考應該如何使它運作,以及應該使用哪些方法來實現這個目標。我希望這個程式能夠操作起來簡單方便,因此我思考了如何使使用者界面更加友好的方法。
在一開始,使用者輸入數字的頭和尾以及填充數字之間的步驟非常簡單。只需要使用scanf函式來接受兩個變數作為頭和尾,然後使用一個for循環來填充這兩個數字之間的所有數字並將它們儲存到數組中即可。
然而,讓整列數字打亂卻是一個讓我感到困惑的問題。當時,我對於如何撰寫能夠打亂並重新排列數字的程式毫無頭緒。因此,我花了很長時間去研究它們的運作原理。
完成這個程式後,我獲得了兩個重要的收穫。首先,我變得更加精熟地思考如何撰寫程式碼,並且更加深入地理解了程式的運作原理。其次,我掌握了一些能夠將整列數字打亂並重新排列的演算法。這次經歷讓我深刻體會到了程式設計的過程中所獲得的成就感和挑戰。
### 樂透選號程式
2. 樂透選號程式
是一個可以根據不同遊戲而輸出不同號碼的模擬選號程式。
- 動機:
當時因為看到媽媽在買樂透每次都在猶豫要選哪個數字而苦惱很久,但她又不喜歡用快選來選擇數字,所以我想要寫一個可以幫她自動選擇三種樂透(大樂透,威力彩,今彩539)的數字讓她當作一個參考。
- 程式的流程圖
```mermaid
graph TD;
程式開始-->請選擇遊戲代號;
請選擇遊戲代號-->1.大樂透;
請選擇遊戲代號-->2.威力彩;
請選擇遊戲代號-->3.今彩539;
1.大樂透-->使用者輸入遊戲代號;
2.威力彩-->使用者輸入遊戲代號;
3.今彩539-->使用者輸入遊戲代號;
使用者輸入遊戲代號-->使用者輸入代號1;
使用者輸入遊戲代號-->使用者輸入代號2;
使用者輸入遊戲代號-->使用者輸入代號3;
使用者輸入代號1-->程式輸出6個號碼介於1到49之間;
使用者輸入代號2-->程式輸出6個號碼介於1到38之間;
使用者輸入代號3-->程式輸出5個號碼介於1到39之間;
程式輸出6個號碼介於1到38之間-->程式輸出一個號碼介於1到8之間;
程式輸出6個號碼介於1到49之間-->程式結束;
程式輸出一個號碼介於1到8之間-->程式結束;
程式輸出5個號碼介於1到39之間-->程式結束;
```
- 學習心得
在開始這個程式的過程中,一切進展順利。一開始,我設定了一個變數,然後使用了scanf函式來接收使用者要進行的遊戲,並使用printf函式輸出開始的提示語句。然而,在進行過程中,我發現自己忽略了一個重要的部分:如何生成隨機數。於是我開始尋找相關的資訊,最終找到了rand()這個函式,它可以生成隨機數。但是,我發現rand()生成的隨機數範圍很大,遠遠超出我實際需要的範圍。因此,我需要使用取餘運算符(%)來將隨機數限制在我們需要的範圍內。為了避免餘數為0的情況,我還需要將結果加1。因此,我最終得到了生成隨機數的公式:(rand() % 最大數) + 1。
在解決了這個問題之後,我需要將生成的隨機數存儲到一個數組中。我使用了for迴圈來控制生成的隨機數的數量,並將它們存儲到預先準備好的數組中。
然而,我注意到生成的數字並沒有按照大小排列,這在後續進行樂透對獎時可能會帶來一些不便。為了解決這個問題,我想到了之前學到的bubbleSort排序算法。我將生成的數字傳遞給BubbleSort函式,並成功地將它們按照大小排序。
完成這個程式的過程讓我感到非常有成就感。我不僅解決了遇到的問題,還學到了新的語法和算法。這次經歷讓我對於寫程式的能力又有了新的提升,我期待著在未來能夠運用這些知識來解決更多的問題。
- bubbleSort的運作流程
用17,8,21,13,20這五個數字來當作比較時的範例,每次取兩個比大小,數字大的會被排在右邊
```mermaid
graph TD;
開始-->17,8,21,13,20;
17,8,21,13,20-->第一輪開始;
第一輪開始-->8,17,21,13,20;
8,17,21,13,20-->8,17,21,13,20;
8,17,21,13,20-->8,17,13,21,20;
8,17,13,21,20-->8,17,13,20,21;
8,17,13,20,21-->第二輪開始;
第二輪開始-->8,13,17,20,21;
8,13,17,20,21-->結束;
```
**硬體實作**
### 用Arduino開發板和麵包板控制七段顯示器來顯示出大樂透的個數字
- 用Arduino開發板和麵包板控制七段顯示器來顯示出大樂透的6個數字:
按一下按鈕,七段顯示器就會提示收到訊號並開始運作,他會由小到大左右左右的顯示出數字,並不停地重複顯示,如果使用者不滿意這組數字,也只需要長按按鈕直到七段顯示器的LED燈全亮,提示已經收到要換數字的指令就能放手,接著程式就會再找一組新的數字並讓七段顯示器開始重複顯示新的數字,可以一直換數字直到使用者滿意。
- 以下是我的操作流程圖:
```mermaid
graph TD;
程式開始-->按下按鈕;
按下按鈕-->開始運作;
開始運作-->七段顯示器的LED燈全亮表示開始;
七段顯示器的LED燈全亮表示開始-->七段顯示器開始顯示六組數字;
七段顯示器開始顯示六組數字-->重複顯示;
重複顯示-->長按按鈕直到七段顯示器的燈全亮;
長按按鈕直到七段顯示器的燈全亮----->七段顯示器的LED燈全亮表示開始;
```
- 程式碼:
``` c=
#include <stdio.h>
#include <stdlib.h>
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
int f = 6;
int g = 7;
int dp = 8;
int D4 = 9; //個位數
int D3 = 10; //十位數
int D2 = 11; //百位數
int D1 = 12; //千位數
int bon = 13; //按鈕
void setup()
{
pinMode(D1,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
pinMode(D4,OUTPUT);
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(dp,OUTPUT);
pinMode(bon,INPUT);
ClearAll();
}
void ClearAll()
{
//0 on/1 off
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,1);
//0 off/1 on
digitalWrite(a,0);
digitalWrite(b,0);
digitalWrite(c,0);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,0);
digitalWrite(dp,0);
}
void loop()
{
//直接用大樂透
int y = rand();
int bon = 0;
int x = 1;
while(bon != 1)
{
bon = digitalRead(13);
}
digitalWrite(D1,0);
digitalWrite(D2,0);
digitalWrite(D3,0);
digitalWrite(D4,0);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,1);
delay(1000);
int array[6];
if(x == 1)
for (int i = 0;i < 6; i++)
{
array[i] = (rand() % 49) + 1;
for (int j = 0;j < i; j++)
{
if(array[i] == array[j])
{
j = 6;
i = i - 1;
}
}
}
for (int i = 6 - 2; i >= 0; i--)//bubbleSort開始
for(int j = 0; j <= i; j++)
if (array[j] > array[j + 1])
{
int t = array[j];//t = temp用來當bubbleSort的暫存數字
array[j] = array[j + 1];
array[j + 1] = t;//bubbleSort結束
}
bon = 0;
ClearAll();
delay(1000);
while(bon != 1)
{
bon = digitalRead(13);
for (int i = 0 ; i < 6; i = i + 2)
{
bon = digitalRead(13);
while(bon == 1)
break;
for (int j = 0 ; j < 100; j++)
{
bon = digitalRead(13);
while(bon == 1)
break;
if (array[i] / 10 == 0 )
{
digitalWrite(D1,0);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,0);
delay(5);
}
else if (array[i] / 10 == 1)
{
digitalWrite(D1,0);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,0);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,0);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] / 10 == 2)
{
digitalWrite(D1,0);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,0);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,0);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] / 10 == 3)
{
digitalWrite(D1,0);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] / 10 == 4)
{
digitalWrite(D1,0);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,0);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
if (array[i] % 10 == 0)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,0);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] % 10 == 1)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,0);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,0);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] % 10 == 2)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,0);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,0);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] % 10 == 3)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] % 10 == 4)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,0);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] % 10 == 5)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,0);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,0);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] % 10 == 6)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,0);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] % 10 == 7)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,0);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] % 10 == 8)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i] % 10 == 9)
{
digitalWrite(D1,1);
digitalWrite(D2,0);
digitalWrite(D3,1);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,0);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
}
ClearAll();
for (int k = 0; k < 100; k++)
{
bon = digitalRead(13);
while(bon == 1)
break;
if (array[i+1] / 10 == 0 )
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,0);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,0);
delay(5);
}
else if (array[i+1] / 10 == 1)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,0);
digitalWrite(D4,1);
digitalWrite(a,0);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,0);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] / 10 == 2)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,0);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,0);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,0);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] / 10 == 3)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,0);
digitalWrite(D4,1);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] / 10 == 4)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,0);
digitalWrite(D4,1);
digitalWrite(a,0);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
if (array[i+1] % 10 == 0)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,0);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] % 10 == 1)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,0);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,0);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] % 10 == 2)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,0);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,0);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] % 10 == 3)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] % 10 == 4)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,0);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] % 10 == 5)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,1);
digitalWrite(b,0);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,0);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] % 10 == 6)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,1);
digitalWrite(b,0);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] % 10 == 7)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,0);
digitalWrite(e,0);
digitalWrite(f,0);
digitalWrite(g,0);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] % 10 == 8)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,1);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
else if (array[i+1] % 10 == 9)
{
digitalWrite(D1,1);
digitalWrite(D2,1);
digitalWrite(D3,1);
digitalWrite(D4,0);
digitalWrite(a,1);
digitalWrite(b,1);
digitalWrite(c,1);
digitalWrite(d,1);
digitalWrite(e,0);
digitalWrite(f,1);
digitalWrite(g,1);
digitalWrite(dp,0);
delay(5);
}
}
ClearAll();
}
ClearAll();
delay(1000);
}
}
```
- 成果:
1. 按一下按鈕讓程式開始運作

2. 顯示器上會依照大小跑出隨機六個數字

3. 長按按鈕直到LED全亮

4. 又會再出現一組新的數字

- 動機:
在做完樂透選號程式之後因為想要讓程式實體的表現出來,於是就做了個可以顯示樂透選號程式的實體版,雖然因為arduino開發板的接腳不夠,又因為按鈕只有一個,所以只能做出大樂透的選號程式,這樣也能讓媽媽每次要選號時不用盯著電腦螢幕顯示出的小字,可以透過七段顯示器這種大數字讓他比較好看清楚。
- 學習心得:
從開始進行這個作品的過程中,我遭遇了一系列問題。首先是關於麵包板電路和接線的問題。由於我對麵包板的操作不熟悉,最初我將正極和負極接在同一條線路上,這是一個很大的錯誤,因為這樣的接線會導致短路,並損壞電路板。透過老師的提醒,我明白了這個問題的嚴重性,好險發現的早,不然還可能會把電腦跟周邊一起燒壞。
接下來,我學習了四位數七段顯示器的接腳和控制方法,並理解了控制七段顯示器的LED發光接腳,以及按鈕內部的工作原理。然而,我在接腳時忘記了添加阻抗,這可能會導致電路中的電流過大,損壞元件。透過老師的指導後,我也知道了這個問題的解決方法。
在寫程式的過程中,我遇到了LED未發亮的問題。後來發現是因為程式執行速度過快,導致LED以一個人眼看不到的速度亮了一下。於是我調整了程式,添加了delay()函式讓LED持續一段時間的發亮,解決了這個問題。
在進行第二個版本時,我增加了讓七段顯示器左右顯示數字的功能,並且利用視覺暫留的時間差,讓數字的變換更加流暢。後來,我還加入了一個循環顯示數字的功能,以確保使用者在沒有記錄到數字時能夠再看一次。
最後,我在第四個版本中加入了一個重新選擇數字的功能,讓使用者長按按鈕即可重新選擇數字。為了提醒使用者程式已經開始重新選擇數字了,我還添加了一個LED全亮的提示功能,只要LED全亮使用者就可以放開按著按鈕的手了。
通過這個作品的製作過程,我學到了如何正確接線和操作電路板,了解了七段顯示器和按鈕的工作原理,知道如何運用人類的視覺暫留讓程式的表現能夠更多樣化,並掌握了如何編寫Arduino程式。這次的學習過程讓我更加熟悉了硬體和軟體之間的互動,提高了我的實踐能力和解決問題的能力。
### 個人網頁設計
在高中期間我還學會了如何用markdown語法在HackMD寫網頁,並利用它畫出了程式的架構圖跟流程圖,我還把我當時為了準備考APCS而寫過的程式還有Vim跟VSCode的學習筆記寫在HackMD並變成了一個網頁,這個製作過程非常有趣,裡面記錄了我的學習歷程還有遇到過的問題及解決方法。
網址如下:
https://hackmd.io/@IAmNemo/VIM