- UID
- 373967
- 帖子
- 8779
- 主題
- 2609
- 精華
- 0
- 積分
- 993
- 楓幣
- 2637
- 威望
- 970
- 存款
- 31556
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 50
- 在線時間
- 451 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2024-11-5
|
以下是使用attiny85單片機製作的手持型轉速計的程式碼:
#include <avr/io.h>
#include <avr/interrupt.h>
volatile unsigned int count = 0;
volatile unsigned long last_time = 0;
volatile unsigned long current_time = 0;
void setup()
{
cli();
TCCR0A = 0;
TCCR0B = 0;
TCNT0 = 0;
OCR0A = 249; // 1ms period
TCCR0B |= (1 << WGM01); // CTC mode
TCCR0B |= (1 << CS02) | (1 << CS00); // set prescaler to 1024
TIMSK |= (1 << OCIE0A); // enable interrupt on OCR0A match
sei();
pinMode(2, INPUT);
Serial.begin(9600);
}
ISR(TIMER0_COMPA_vect)
{
count++;
}
void loop()
{
current_time = millis();
if (current_time - last_time >= 1000)
{
float rpm = count * 60.0 / 11.0;
Serial.println(rpm);
count = 0;
last_time = current_time;
}
}
int main(void)
{
setup();
while (1)
{
loop();
}
}
這個程式碼使用了attiny85的計時器0(Timer0)來進行計數和中斷,並通過計數值和時間差來計算轉速。
程式碼中使用了Arduino IDE的函數庫來簡化代碼的撰寫,並且使用了內置的Serial函數來通過串口將計算出的轉速值輸出到電腦端。
在程式碼中,設置了計時器0的計時週期為1ms,並且設置了中斷服務程序(ISR)來將計數器值進行加1。
每隔1秒,程式碼會通過計數器的值和時間差來計算轉速值,並通過串口輸出到電腦端。 |
|