簡易遙控車DIY

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

本篇內的材料是由雲造 YUM(雲造臉書社團連結:https://www.facebook.com/groups/yunlinmaker)與喬智創意樂高機器人(https://www.facebook.com/george20140119)所提供的。

在自製遙控車之前,先用 TinkerCAD 認識馬達(範例https://www.tinkercad.com/things/0VDNKWqDK1i),要了解的項目有:
  1. 正負極與馬達旋轉方向的關係。
  2. 電壓與馬達旋轉速度的關係。





主要材料清單如下:
  • 三號(AA) 1.5V 電池六顆。
  • 四通遙控板組低頻裸片一套。
  • arduino 智能小車底盤套件一套。
  • 小型麵包板一塊。
  • 魔鬼氈。
  • 氣球。
  • 膠帶、雙面膠帶。
將天線區分為接收端發送端
用螺絲與螺帽將天線固定。

首先測試無線遙控板組:

用魔鬼氈將電池固定好以及接線好後,Arduino小車完成了,圖如下,此部分沒拍影片。

接著換全聯買的葡萄塑膠盒,用魔鬼氈將馬達與電池盒固定在盒子上,用雙面膠或膠帶將氣球固定住來當萬向輪: 

葡萄塑膠盒小車影片:

給小朋友玩後,小朋友覺得塑膠盒版本的小車比較有趣!!!了解原理後,就可以試試其他遙控車,例如遙控風力獸、mbitbot小車等。


遙控風力獸


遙控mbitbot小車


The easy way to create a strong password (設定密碼的技巧)

若您覺得文章寫得不錯,請點選網誌上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog. Thank you very much.

可參考底下影片:




底下提供筆者自己整理的技巧:

一:以中文輸入法按鍵當成密碼
例如我喜歡"海賊王"這部動漫,那我就可以用"海賊王"這三個中文字來當作密碼的基礎,於是 c93 yo6 j;6 三個字所組成的密碼就是 c93yo6j;6 ,以此為基礎還可以延伸為 c93_yo6_j;6 或是 c93@yo6_j;6 。選用的中文字也可以是自己喜歡的藝人、偶像、座右銘、成語,或是一段話。

二:將英文單字的字母順序位移
以 friday 單字為例
friday 每個字母往後位移一個字母變成 gsjebz
將 friday 每個字母往後位移二個字母變成 htkfca

三:將英文字母與數字穿插
例如 friday + 67890 變成 f6r7i8d9a0y

四:數字的英文單字
例如
生日為 2021/02/29 ,密碼可為 TwoThousandZeroOneZeroTwoTwentyNine
手機號碼為 0977123456,密碼可為 ZeroNineSevenSevenOneTwoThreeFourFiveSix

五:以一段英文句子當作密碼
例如:I like to share knowledge with you. 取每個單字的字首,可變成 IL2SkWu 。

六:取超長的密碼
例如:1234567890WithABCDE_abcde。請自己看出規律(哈哈)

最後,我們可以將以上方法合併使用。

C語言練習題:字串(C language exercise: String)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

練習一:字串輸入
撰寫一可以輸入字串並輸出所輸入字串的程式。

Exercise 1: Input a string
Design a program to input a string and displays it.

練習一參考解法:
Exercise 1 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
Input a string and displays it.
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int SIZE = 100;
    char str[SIZE];

    printf("Input a string:");
    // Get any string with space method 1
    scanf("%[^\n]%*c", str);
    printf("Your string: %s\n", str);

    printf("Input a string:");
    // Get any string with space method 2
    gets(str);
    printf("Your string: %s\n", str);

    printf("Input a string:");
    // Get any string with space method 3
    fgets(str, SIZE, stdin);
    printf("Your string: %s\n", str);

    return 0;
}


練習二:字串長度
撰寫一可以算出字串長度的程式,請不要使用strlen()函數。

Exercise 2: String's Length
Write a program to find the length of a string without using strlen() function.

練習二參考解法:
Exercise 2 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
Find the length of a string without using strlen() function.
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int SIZE = 100;
    char str[SIZE], cnt = 0;

    printf("Input a string:");

    // Get any string with space method 1
    //scanf("%[^\n]%*c", str);

    // Get any string with space method 2
    //gets(str);

    // Get any string with space method 3
    fgets(str, SIZE, stdin);

    while(str[cnt] != '\0' && ++cnt < SIZE);

    printf("Length:%d\n", cnt);

    return 0;
}


練習三:字元
設計可以將一字串的每個字元以空白區隔做輸出。

Exercise 3: Characters
Design a program to split a string into characters.

練習三參考解法:
Exercise 3 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
Split a string into characters.
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int SIZE = 100;
    char str[SIZE], idx = 0;;

    printf("Input a string:");

    gets(str);

    while(str[idx] != '\0')
        printf("%c ", str[idx++]);

    return 0;
}


練習四:大小寫轉換
設計可以將字串的小寫字母轉換成大寫字母,大寫字母轉換成小寫字母。例如 HelLoWoRLD 經轉換後,變成hELlOwOrld。

Exercise 4: Invert Case
Design a program that inverts string case. For example:  HelLoWoRLD will be inverted to hELlOwOrld.

練習四參考解法:
Exercise 4 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
Invert Case
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int SIZE = 100;
    char str[SIZE], idx = 0;;

    printf("Input a string:");

    gets(str);

    while(str[idx] != '\0')
    {
        char c = str[idx];

        // Convert to upper case.
        if(c >= 'a' && c <= 'z')
            c = c - 32;
        // Convert to lower case.
        else if(c >= 'A' && c <= 'Z')
            c = c + 32;

        printf("%c", c);
        idx++;
    }

    return 0;
}


練習五:反轉字串
設計可以將字串反轉的程式,例如 Hello World 會變成 dlroW olleH。

Exercise 5: Reverse String
Design a program to reverse any string. For example: Hello World ==> dlroW olleH

練習五參考解法:
Exercise 5 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
Reversed string
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int SIZE = 100;
    char str[SIZE], idx = 0;;

    printf("Input a string:");

    gets(str);

    while(str[idx] != '\0')
        idx++;

    while(idx >= 0)
        printf("%c", str[--idx]);
    return 0;
}


練習六:母音或子音
設計一個可以算出字串中的母音字母的個數與子音字母的個數。

Exercise 6: Vowel or consonant
Design a program that finds the total of vowel or consonant in a string.

練習六參考解法:
Exercise 6 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
Vowel or consonant
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int SIZE = 100;
    char str[SIZE], idx = 0;
    int vowelCnt = 0, consonantCnt = 0;

    printf("Input a string:");

    gets(str);

    while(str[idx] != '\0')
    {
        char c = str[idx];
        switch(c)
        {
            case 'a':
            case 'A':
            case 'e':
            case 'E':
            case 'i':
            case 'I':
            case 'o':
            case 'O':
            case 'u':
            case 'U':
                vowelCnt++;
                break;

            default:
                if( (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') )
                    consonantCnt++;
                break;
        }
        idx++;
    }

    printf("Total vowel:%d\tTotal consonant:%d\n", vowelCnt, consonantCnt);
    return 0;
}


練習七:迴文
設計可以判斷迴文的程式。例如:madam 是迴文。

Exercise 7: Palindrome
Design a program that checks whether a string is palindrome or not.

練習七參考解法:
Exercise 7 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
Palindrome
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int SIZE = 100;
    char str[SIZE], idx = 0;
    int isPalindrome = 1;

    printf("Input a string:");

    gets(str);

    while(str[idx] != '\0')
        idx++;

    int i = 0;
    while(i < idx)
    {
        if(str[i++] != str[--idx])
        {
            isPalindrome = 0;
            break;
        }
    }

    if(isPalindrome != 0)
        printf("Yes\n");
    else
        printf("No\n");

    return 0;
}


練習八:出現次數
設計一個可以統計每個字元在字串中出現的次數。

Exercise 8: Character Frequency
Design a program that calculates each character's frequency in a string.

練習八參考解法:
Exercise 8 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
Character Frequency
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int CHR_NO = 255;
    const int SIZE = 1000;
    char str[SIZE];
    int frequency[CHR_NO];

    for(int i = 0; i < CHR_NO; i++)
        frequency[i] = 0;

    printf("Input a string:");

    gets(str);

    for(int i = 0; str[i] != '\0'; i++)
    {
        frequency[(int)(str[i])]++;
    }

    for(int i = 0; i < CHR_NO; i++)
    {
        printf("%c:%d\n", i, frequency[i]);
    }

    return 0;
}


練習九:出現次數最高的字元
設計一個可以統計每個字元在字串中出現的次數,並找次數最高的字元與次數。

Exercise 9: Highest frequency character 
Design a program to find the highest frequency character in a given string.

練習九參考解法:
Exercise 9 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
Highest Character Frequency
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int CHR_NO = 255;
    const int SIZE = 1000;
    char str[SIZE];
    int frequency[CHR_NO];
    int maxFreq = 0;
    char mChr;

    for(int i = 0; i < CHR_NO; i++)
        frequency[i] = 0;

    printf("Input a string:");

    gets(str);

    for(int i = 0; str[i] != '\0'; i++)
    {
        frequency[(int)(str[i])]++;
    }

    for(int i = 0; i < CHR_NO; i++)
    {
        if(frequency[i] > maxFreq)
        {
            maxFreq = frequency[i];
            mChr = (char)(i);
        }
    }

    printf("%c %d\n", mChr, maxFreq);
    return 0;
}


練習十:取代空白字元
設計可以將字串中的空白字元以特定的字元取代。

Exercise 10: Spaces replacing
Design a program that replaces all spaces in a given with a specific character.

練習十參考解法:
Exercise 10 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
Spaces replacing
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const int SIZE = 1000;
    char str[SIZE];
    char aChr;


    printf("Input a string:");
    gets(str);

    printf("Enter a special character:");
    scanf("%c", &aChr);

    for(int i = 0; str[i] != '\0'; i++)
    {
       if(str[i] == ' ') str[i] = aChr;
    }


    printf("The input string becomes %s\n", str);
    return 0;
}


C語言練習題:函數(C language exercise: Fun with Function )

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

練習一:加法函數
設計一函數可以輸入兩個參數a與b,並回傳 a 加 b的結果。

Exercise 1: Adding function
Design a function that takes two parameters and return the result of a + b.


練習一參考解法:
Exercise 1 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>

float add(float a, float b)
{
    return a + b;
}

int main()
{
    float x = 3.4f, y = 3.6f;

    printf("%.2f + %.2f = %.2f\n", x, y, add(x, y));
    return 0;
}


練習二:整數乘法
設計一函數可以輸入兩個參數a與b,並回傳 a 乘 b的結果。

Exercise 2:  Multiplying Two Integers
Design a function that takes two parameters and return the result of a * b.


練習二參考解法:
Exercise 2 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>

int multiply(int a, int b)
{
    return a * b;
}

int main()
{
    int x = 3, y = 4;
    printf("%3d + %3d = %3d\n", x, y, multiply(x, y));
    return 0;
}


練習三:奇數或偶數
設計一函數可以輸入一個整數,函數回傳數值 1 表示是奇數,回傳數值 0 表示偶數。 

Exercise 3:  Odd or Even?
Design a function that takes one integer. It will return 1 if the integer is odd, return 0 if the integer is even.


練習三參考解法:
Exercise 3 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>

int isOdd(int x)
{
    // We can use return x % 2;
    return x % 2;
    // if( x % 2 == 1 ) return 1;
    // if( x % 2 == 0 ) return 0;
}

int main()
{
    int x = 3;

    if( isOdd(x) == 1 )
        printf("%d is odd.\n", x);
    else if( isOdd(x) == 0 )
        printf("%d is even.\n", x);

    x = 4;
    if( isOdd(x) == 1 )
        printf("%d is odd.\n", x);
    else if( isOdd(x) == 0 )
        printf("%d is even.\n", x);

    return 0;
}


練習四:歡迎訊息
設計一個可以輸入兩個參數 n 與 msg 的函數,此函數用來輸出 msg 訊息 n 次。

Exercise 4: Greetings
Design a function that takes two parameters n and msg. This function will print msg n times.

練習四參考解法:
Exercise 4 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>

void prtMsg(char *msg, int n)
{
    for(int i = 0; i < n; i++)
        printf("%s", msg);
}

int main()
{
    int n = 3;
    char *msg = "Hello, player!\n";
    prtMsg(msg, n);

    return 0;
}


練習五:互換
設計可以交換兩個整數的函數。

Exercise 5: Swap
Design a function that swap two integers.

練習五參考解法:
Exercise 5 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <stdlib.h>

void swap(int *a, int *b)
{
    // Method 1
    int t = *a;
    *a = *b;
    *b = t;

    // Method 2
    /*
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
    */
}

int main()
{
    int i = 7, j = 8;
    printf("i = %d, j = %d\n", i, j);
    swap(&i, &j);
    printf("i = %d, j = %d\n", i, j);

    return 0;
}


練習六:二進位數字
設計一個可以將十進位數字轉換成二進位數字的函數。

Exercise 6: Binary Number
Design a function that converts a decimal number to a binary number.


練習六參考解法:
Exercise 6 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h>

void dToB(int d)
{
    char b[32];
    short p = 0;

    if(d == 0)
        printf("0");

    while(d > 0)
    {
        b[p] = d % 2? '1':'0';
        d = d / 2;
        p++;
    }

    while(--p >= 0)
        printf("%c", b[p]);
    printf("\t");
}

int main()
{
    for(int i = 0; i < 64; i++)
        dToB(i);

    return 0;
}

練習七:陣列中最大值
撰寫可以找出陣列中最大值的函數。

Exercise 7: Maximum in an array
Design a function that finds the maximum in an array.

練習七參考解法:
Exercise 7 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*
Find the maximum in an array.
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

double getMax(double numbers[], int size)
{
    // the maximum number
    double m = -1e9;

    for(int i = 0; i < size; i++)
        if(numbers[i] > m)
            m = numbers[i];

    return m;
}

int main()
{
    double data[] = {1, 3.23, 333, -334.5, 363};
    int size = sizeof(data) / sizeof(double);

    printf("Max:%.2lf\n", getMax(data, size));

    return 0;
}


練習八:總和
設計可以加總陣列中所有數值的函數。

Exercise 8: Sum
Design a function that find sum of all  elements in an array.


練習八參考解法:
Exercise 8 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
Find sum of all elements in an array
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

double getSum(double numbers[], int size)
{
    // The total
    double total = 0;

    for(int i = 0; i < size; i++)
        total += numbers[i];

    return total;
}

int main()
{
    double data[] = {1, 3.23, 333, -334.5, 363};
    int size = sizeof(data) / sizeof(double);

    printf("Max:%.2lf\n", getSum(data, size));

    return 0;
}


練習九:第幾象限
設計一個可以判斷(x, y)座標在第幾象限的函數。

Exercise 9: Coordinate
Design a function that prints the quadrant of the given point(x, y).

練習九參考解法:
Exercise 9 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
Prints the quadrant of the given point(x, y).
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

void getQuadrant(double x, double y)
{
    if(x > 0 && y > 0)
    {
        printf("First");
    }
    else if(x < 0 && y > 0)
    {
        printf("Second");
    }
    else if(x < 0 && y < 0)
    {
        printf("Third");
    }
    else if(x > 0 && y < 0)
    {
        printf("Fourth");
    }

    printf(" Quadrant.\n");
}

int main()
{
    double x = 1.0, y = 1.0;
    getQuadrant(x,y);

    x = -1.0;
    getQuadrant(x,y);

    y = -1.0;
    getQuadrant(x,y);

    x = 1.0;
    getQuadrant(x,y);

  


練習十:費氏數
設計一個可以算出第 N個費氏數的函數。

Exercise 10: 
Design a function that find the n-th Fibonacci number.

練習十參考解法:
Exercise 10 solution:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*
Find the n-th Fibonacci number.
Author: Holan
*/

#include <stdio.h>
#include <stdlib.h>

int getFib(int N)
{
    int fibo[10000];

    fibo[0] = 0;
    fibo[1] = 1;

    for(int i = 2; i < N; i++)
    {
        fibo[i] = fibo[i-1] + fibo[i-2];
    }

    return fibo[N-1];
}

int main()
{
    const int N = 10;
    for(int i = 1; i <= N; i++)
        printf("%2d ", getFib(i));

    return 0;
}

Python 動手做「Micro:bit」Unit 1:點亮 LED

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

本篇文章會使用Mu Code Editor來開發micro:bit的應用程式,Mu Code Editor是一個給Python初學者的撰寫Python程式碼的軟體工具,此軟體的操作方式可參考Mu Code Editor官方的教學文章:https://codewith.mu/en/tutorials/

LED的原理與應用(Behind the MakeCode Hardware - LEDs on micro:bit)


Micro:bit 用 25顆的 LEDs 來顯示一些圖形,例如愛心、笑臉等。 

第一個範例就使用micro:bit線上 Python Editor 的範例。程式碼如下:
1
2
3
4
5
6
7
# Write your code here :-)
from microbit import *

while True:
    display.scroll('Hello, World!')
    display.show(Image.HEART)
    sleep(2000)

範例結果影片:


此外https://makecode.microbit.org/ 裡的tutorials也有提供 Python 的自學課程,例如點選 Flashing Heart ,再點選 Python 後,就可以練習用 Python 來做閃爍的愛心了。



APCS 觀念考題測驗表單

若您覺得文章寫得不錯,請點選網誌上的廣告,來支持小編,謝謝。

官方觀念考古題
APCS 程式設計觀念題  105 年 10 月 29 日
APCS 程式設計觀念題 106 年 03 月 04 日

其他線上觀念題