2024年11月21日 星期四
2024年11月15日 星期五
2024年10月30日 星期三
2024年10月24日 星期四
2024年10月8日 星期二
AVR 的 LIbrary 查找 ?
search:avr-libc
AVR C Runtime Library
Homepage
Online Users Manual
Library Reference
<util/delay.h>: Convenience functions for busy-wait delay loops
2024年10月3日 星期四
2024年9月27日 星期五
Arduino 202409 AVRDUDESS 燒錄設定
使用的是: ATmega328P-PU 單晶片 Arduino微控制器 32KB Flash 20MHz晶片
軟體版本:目前最新版本 avrdude version 8.0 AVRDUDESS 2.18
Programmer(-c):arduino_as_isp....(AVR as programmer with and Arduino-as-ISP FW)
上圖片:
2024年8月7日 星期三
2024年8月5日 星期一
2024年7月28日 星期日
Arduino 筆記(下)
<<:左移運算子,將數字 1 向左移 x 個位元。
| :"或 / or"運算子。將兩個運算元的對應位元進行或運算,只要有一個位元為 1,結果的對應位元就為 1。任一為1 為1,否則為 0 一。
& :"和 / and"運算子。將兩個運算元的對應位元進行或運算,只要有兩個位元為 1,結果的對應位元就為 1。倆著為1 為1,否則為 0 一。
頻率(f):在每單位時間內(即每秒)重複發生的次數(週期數,即循環次數)
週期(T):定義為重複事件發生的最小時間間隔。
同底數(冪)相乘,底數不變,指數相加:
a^m*a^n=a^(m+n)
同底數(冪)相除,底數不變,指數相減:
a^m/a^n=a^(m-n)
同指數(冪)相除,指數不變,底數相除(b不為0)
a^n/b^n=(a/b)^n
Atmega328P 的默認時鐘頻為8MHz。-------------------------------------------------
"CLKPR" 是 Clock Prescaler Register 的縮寫,中文翻譯為「時鐘預分頻器寄存器」
"CLKPCE" 通常是指 "Clock Prescaler Change Enable" 的縮寫,中文翻譯為「時鐘預分頻器更改啟用」, 它是一個控制位。
"TCCR0A" 是指 Timer/Counter 0 的控制(C)寄存器 A。(0210/584) 控制 TCNT0 的計數模式 , 時鐘源和波形模式及比較器。
"TCCR0B" 是指 Timer/Counter 0 的控制(C)寄存器 B。(0211/589)
"OCRnB" 是 Output Compare Register nB 的縮寫。(0253/937)
"OCFnB 是 Output Compare Flag nB 的縮寫,中文翻譯為「輸出比較旗標 nB」。(256/960)
"TCNT0" 是指 Timer/Counter 0 的計數器寄存器。(0208/576)
"TIFR0" 是 Timer/Counter 0 Interrupt Flag Register 的縮寫,中文翻譯為"計時器/計數器中斷標誌寄存器 0"
"TOV0”是 Timer/Counter Overflow Flag 0 的縮寫,中文翻譯為「計數器溢出旗標 0」
"OCFnA 是 Output Compare Flag nA 的縮寫,中文翻譯為「輸出比較旗標 nA」。(0255/952)
"OCRnA" 是 Output Compare Register nA 的縮寫。
"OCRnA" 和 "OCRnB" 都是輸出比對寄存器,
"OCFnX "是微控制器 (MCU) 中輸出比較模組 (Output Compare Module) 的一個旗標 (flag)。
"CTC模式”通常被翻譯為“單週期計數模式” (CTC模式)。CTC 模式是一種定時器操作模式,定時器從 0 計數到比較值(OCRx),然後重設為 0
2024年7月21日 星期日
二進制中,一般寫法 0xF2 其中字母大小寫有分嗎?另外 0x01 與 0x1 及 0x00 與 0x0 相同嗎?
在十六進位表示法(一種使用基數 16 表示數字的方法)中,字母不區分大小寫。這意味著十六進位數 0xF2 相當於 0xf2、0XF2和0xHf2。十六進制數字可以是大寫或小寫,並且表示的值保持不變。
這種不區分大小寫的情況是由於十六進制數字的編碼方式所造成的。每個十六進位數字對應於 16 進位數字系統中的一個特定值:
0到9:以對應的數字表示(0、1、2、3 、... 、9 )
A到F:用字母A到F表示,對應16進位的值10到15
由於底層值表示不受字母大小寫的影響,因此十六進制數字被認為不區分大小寫。
關於第二個問題:
0x01和0x1代表相同的值,即十進制的1。
0x00和0x0代表同一個值,都是十進制的0。
這是因為十六進位表示法中的前導零不會影響所表示的值。十六進制數的值由其數字的組合決定,從最高有效數字開始,向最低有效數字移動。在 0x01 和 0x00 的情況下,單一數字 1 或 0 是唯一有效的數字,前導零對整體值沒有貢獻。
2024年7月20日 星期六
2024年7月19日 星期五
此($2^8-1$) 中$代表何意?
01. 此($2^8-1$) 中$代表何意?
在數學中,符號 $ 表示一個數學表達式的開始或結束,這在許多數學文獻中是常見的用法。在這個上下文中,$2^8-1$ 是一個數學表達式,表示計算
28 的值然後減去 1。二進位計算
在二進位計算中,每個位元可以是 0 或 1。從右到左,每個位元的權重是 $2^0, 2^1, 2^2, ..., 2^7$。一個 8 位元的二進位數字可以表示的範圍是:00000000(2) to 11111111(2)十進位換算
將這些二進位數字換算成十進位,可以得到:2024年7月17日 星期三
2024年5月29日 星期三
2024年5月27日 星期一
2024年5月18日 星期六
2024年4月14日 星期日
即溶咖啡沖泡時水溫幾度為宜 (微酸時) ?
Gemini 回復:
一般來說,即溶咖啡的沖泡水溫以80-90度之間為宜。水溫過高會使咖啡口感變苦,水溫過低則會使咖啡口感偏酸。
如果您喜歡微酸的咖啡,可以嘗試將水溫控制在80-85度之間。這樣可以使咖啡的酸味更加柔和,同時保留咖啡的香氣。
以下是即溶咖啡沖泡的具體步驟:
準備好即溶咖啡粉、熱水和杯子。
將2克即溶咖啡粉放入杯中。
先倒入少量熱水(約30毫升),攪拌均勻,使咖啡粉完全溶解。
再加入剩下的熱水(約100毫升),攪拌均勻即可。
在沖泡即溶咖啡時,需要注意以下幾點:
使用新鮮的熱水。如果使用放置過久的熱水,咖啡的風味會受到影響。
不要直接將沸水倒入咖啡粉中,否則會使咖啡口感變苦。
沖泡後,可以根據自己的喜好添加牛奶、糖、蜂蜜等。
希望以上信息對您有所幫助。
2024年4月4日 星期四
報章雜誌常常說每天喝咖啡不能超過多少杯,請問這 "咖啡" 的規格是?
Gemini:
一般來說,報章雜誌所說的 "咖啡" 是指沖泡好的咖啡,而非咖啡豆。一杯咖啡的容量約為 240 毫升 (標準的 8 盎司 (約237 毫升) 的美式咖啡杯。這是一種常見的標準規格。),因此每天喝咖啡不能超過多少杯,通常是指咖啡因的攝取量不能超過多少毫克。
根據美國食品藥品管理局 (FDA) 的建議,健康成年人每天的咖啡因攝取量不應超過 400 毫克。孕婦、哺乳期婦女和兒童的咖啡因攝取量應更低。
咖啡因的含量會因咖啡的種類、烘焙程度、沖泡方式和飲用量而異。一般來說,一杯濃縮咖啡 (Espresso) 的咖啡因含量約為 60 毫克,一杯濾掛咖啡 (Drip coffee) 的咖啡因含量約為 95 毫克,一杯美式咖啡 (Americano) 的咖啡因含量約為 150 毫克。
因此,如果每天喝 4 杯濃縮咖啡、3 杯濾掛咖啡或2 杯美式咖啡,就可能攝取超過 400 毫克的咖啡因。
以下是一些常見咖啡的咖啡因含量:
咖啡種類 - 咖啡因含量 (毫克)
濃縮咖啡 (Espresso) 60
濾掛咖啡 (Drip coffee) 95
美式咖啡 (Americano) 150
拿鐵咖啡 (Latte) 75
卡布奇諾 (Cappuccino) 75
冰咖啡 (Iced coffee) 150
速溶咖啡 (Instant coffee) 60-150
無咖啡因咖啡 (Decaffeinated coffee) 2-5
如果您擔心自己的咖啡因攝取量,可以選擇無咖啡因咖啡或減少咖啡的飲用量。
以下是一些減少咖啡因攝取量的建議:
選擇無咖啡因咖啡或低咖啡因咖啡。
減少咖啡的飲用量。
避免在下午或晚上喝咖啡。
將咖啡與其他飲料交替飲用,例如水、茶或果汁。
如果您有任何健康問題,請諮詢醫生以了解您應該攝取多少咖啡因。
註:即溶咖啡 建議沖調比例:每1.8公克咖啡加150毫升熱水沖調。咖啡因含量:60毫克 (每份咖啡為1.8公克的咖啡因含量)。2. 120ml 水加1.44即溶咖啡。含48毫克咖啡因,48/400=8.333杯咖啡。
2024年3月16日 星期六
2024年3月4日 星期一
Excel 中的參照位置
Excel 中的
參照位置
參照位置是指一個儲存格或範圍在工作表中的位置。它由兩個部分組成:
**列標籤:**表示儲存格所在的列,例如 A、B、C 等。
**行號:**表示儲存格所在的行,例如 1、2、3 等。
例如,儲存格 A1 的參照位置為 A1。
絕對參照位置
絕對參照位置始終指向同一個單元格或範圍,即使公式被複製或移動到其他位置。絕對參照位置使用美元符號 ($) 表示。例如:
$A$1:始終指向儲存格 A1。
相對參照位置
相對參照位置相對於公式所在的位置進行調整。當公式被複製或移動到其他位置時,相對參照位置會自動更新。例如:
A1:相對於公式所在的位置。如果公式複製到 B2,則參照位置變為 B2。
混合參照位置
混合參照位置結合了絕對和相對參照。例如:
$A1:列絕對引用,行相對引用。如果公式複製到 B2,則參照位置變為 $A2。
A$1:列相對引用,行絕對引用。如果公式複製到 B2,則參照位置變為 B$1。
用途
參照位置用於在公式中指定儲存格或範圍。例如:
=A1+B1:將儲存格 A1 和 B1 的值相加。
=SUM(A1:B10):將範圍 A1 到 B10 中所有值的總和。
=IF(A1>B1, "大於", "小於"):如果儲存格 A1 大於儲存格 B1,則返回 "大於",否則返回 "小於"。
參照位置可以幫助您創建動態且可重用的公式,這些公式可以根據其位置自動調整。
2024年2月2日 星期五
紅燒豬腳用豬的前腳還是後腳腳有肉?
紅燒豬腳通常使用豬的後腳,因為後腳的肉質較豐富,含有較多的肌肉。豬腿部位是豬身上的大塊肌肉,有著豐富的肉質和筋絡,適合慢燉或紅燒的烹調方式。
製作紅燒豬腳的過程中,通常會先將豬腿切成塊狀,然後用慢燉或紅燒的方式,讓豬腿的肉質變得軟嫩,並充分吸收烹調液體的風味。這樣製作出來的紅燒豬腳,肉質多汁、鮮嫩,搭配著豐富的調味汁,味道十分美味。
總的來說,不同的菜式可能使用不同的部位,但製作紅燒豬腳時,一般而言會選擇使用豬的後腳。
2024年1月27日 星期六
2024年1月26日 星期五
AI : 請用繁體中文詳細解說下Arduino中millis()函式及其功能功用?
GPT3.5 請用繁體中文詳細解說下Arduino中millis()函式及其功能功用?
millis() 函數是Arduino程式中的一個內建函數,用來獲取自程式開始運行以來的毫秒數。這個函數在許多應用中非常實用,特別是當你需要在程式中追踪時間的過程或執行定時操作時。
以下是對 millis() 函數的詳細解說:
取得毫秒數:
millis() 函數返回一個 unsigned long(無符號長整數),表示自Arduino板開始運行以來的毫秒數。這個數字會隨著時間的流逝而增加。
>>>>
unsigned long currentMillis = millis();
用途 - 跟蹤時間:
最常見的用途是在程式中跟蹤時間。例如,當你需要確定某個操作發生多久以前,或者當你需要執行某個操作的時間間隔時,你可以使用 millis() 來記錄時間戳記。
>>>>
unsigned long previousMillis = millis();
處理定時操作:
millis() 可以用於實現定時操作,例如在一定的時間間隔內執行某些代碼。通過與上一次的時間戳記進行比較,你可以確定是否已經過了一定的時間。
>>>>>
unsigned long interval = 1000; // 1秒
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// 在每秒執行的代碼
// ...
// 更新上一次的時間戳記
previousMillis = currentMillis;
}
避免阻塞:
與 delay() 不同,millis() 可以用於實現非阻塞的時間等待。你可以在程式中進行其他操作,同時定期檢查是否已經過了指定的時間。
>>>>>
unsigned long startTime = millis();
unsigned long duration = 5000; // 5秒
while (millis() - startTime < duration) {
// 在等待的同時執行其他操作
// ...
}
總體而言,millis() 函數是一個強大的工具,用於處理時間相關的操作,特別是在需要非阻塞和定時操作的Arduino程式中。
我的第一次:請 AI幫我寫 Arduino 程式 (1)
台大生物機電工程系(生機系)郭教授 Arduino 的第二堂課匆匆解釋了下面這問題一下就過了 !! 連程式碼都沒有甚是奇怪?想想用 AI 有一段時間了現在試試幫我寫一段程式看看 !
撰寫一個 Arduino 程式 他能執行以下功能
Build a circuit that composes of an LED and a button
• Blink the LED at
• 2Hz when the button is pressed
• ½ Hz when the button is released
CGPT3.5 回復:
以下是一個簡單的Arduino程式,實現了按下按鈕時LED閃爍2Hz,釋放按鈕時LED閃爍0.5Hz的功能。在這個例子中,我們使用Digital Pin 2作為按鈕的輸入,Digital Pin 13作為LED的輸出。
const int buttonPin = 2; // 按鈕接線到Digital Pin 2
const int ledPin = 13; // LED接線到Digital Pin 13
int buttonState = 0; // 記錄按鈕的狀態
unsigned long previousMillis = 0; // 記錄上一次閃爍的時間
const long intervalOn = 500; // 按下按鈕時LED閃爍的時間間隔 (2Hz)
const long intervalOff = 2000; // 釋放按鈕時LED閃爍的時間間隔 (0.5Hz)
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
// 檢查按鈕是否被按下
if (buttonState == HIGH) {
// 按下按鈕時LED閃爍2Hz
blinkLED(2);
} else {
// 釋放按鈕時LED閃爍0.5Hz
blinkLED(0.5);
}
}
void blinkLED(float frequency) {
unsigned long currentMillis = millis();
// 計算閃爍的時間間隔
long interval = 1000 / (2 * frequency);
// 判斷是否過了閃爍的時間間隔
if (currentMillis - previousMillis >= interval) {
// 記錄當前時間
previousMillis = currentMillis;
// 切換LED狀態
if (digitalRead(ledPin) == HIGH) {
digitalWrite(ledPin, LOW);
} else {
digitalWrite(ledPin, HIGH);
}
}
}
這個程式中,我們使用了millis()函數來跟蹤時間,以便在指定的頻率下閃爍LED。按下按鈕時,閃爍頻率設置為2Hz,釋放按鈕時,閃爍頻率設置為0.5Hz。
Bard(實驗版)
// 定義 LED 和按鈕的接腳
const int ledPin = 13;
const int buttonPin = 2;
// 定義 LED 的閃爍頻率
const int blinkInterval = 1000 / 2; // 2Hz
const int halfBlinkInterval = 1000 / (2 * 2); // ½ Hz
// 初始化 LED 和按鈕
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
// 主回圈
void loop() {
// 讀取按鈕的狀態
int buttonState = digitalRead(buttonPin);
// 如果按鈕按下
if (buttonState == HIGH) {
// 以 2Hz 閃爍 LED
digitalWrite(ledPin, HIGH);
delay(blinkInterval);
digitalWrite(ledPin, LOW);
delay(blinkInterval);
} else {
// 如果按鈕釋放
// 以 ½ Hz 閃爍 LED
digitalWrite(ledPin, HIGH);
delay(halfBlinkInterval);
digitalWrite(ledPin, LOW);
delay(halfBlinkInterval);
}
}
請謹慎使用程式碼。了解詳情
此程式首先定義 LED 和按鈕的接腳。然後,它定義 LED 的閃爍頻率。在主回圈中,程式會讀取按鈕的狀態。如果按鈕按下,程式會以 2Hz 閃爍 LED。如果按鈕釋放,程式會以 ½ Hz 閃爍 LED。
您可以使用以下電路來實現此程式:
LED
|
|
| 10kΩ
|
|
GND
LED 的正極連接到 Arduino 板上的 13 接腳。LED 的負極連接到 Arduino 板上的 GND 接腳。按鈕的其中一端連接到 Arduino 板上的 2 接腳。按鈕的另一端連接到 Arduino 板上的 GND 接腳。
您可以將此程式修改為執行其他功能。例如,您可以修改程式以使 LED 閃爍不同的顏色。
Google AI Studio
const int ledPin = 13;
const int buttonPin = 2;
int buttonState = 0;
int ledState = 0;
unsigned long previousMillis = 0;
const long interval = 1000; // 1 second
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
unsigned long currentMillis = millis();
if (buttonState == HIGH) {
if (ledState == LOW) {
digitalWrite(ledPin, HIGH);
ledState = HIGH;
previousMillis = currentMillis;
} else if (ledState == HIGH && (currentMillis - previousMillis >= interval / 2)) {
digitalWrite(ledPin, LOW);
ledState = LOW;
previousMillis = currentMillis;
}
} else {
if (ledState == HIGH) {
digitalWrite(ledPin, HIGH);
ledState = HIGH;
previousMillis = currentMillis;
} else if (ledState == LOW && (currentMillis - previousMillis >= interval)) {
digitalWrite(ledPin, LOW);
ledState = LOW;
previousMillis = currentMillis;
}
}
}
```
這個程式使用了無符號整數變數 `previousMillis` 來儲存前一次按鈕狀態改變的時間。程式還使用了常數 `interval` 來定義 LED 閃爍的間隔。
當按鈕按下時,程式會以 2Hz 的頻率閃爍 LED。當按鈕釋放時,程式會以 ½ Hz 的頻率閃爍 LED。
您可以使用以下電路來實現此程式:
LED
|
|
| 10kΩ
|
|
GND
LED 的正極連接到 Arduino 板上的 13 接腳。LED 的負極連接到 Arduino 板上的 GND 接腳。按鈕的其中一端連接到 Arduino 板上的 2 接腳。按鈕的另一端連接到 Arduino 板上的 GND 接腳。
您可以將此程式修改為執行其他功能。例如,您可以修改程式以使 LED 閃爍不同的顏色。