17.3 字符類 Buzzer 蜂鳴器 和 led 燈類似,蜂鳴器的設(shè)備節(jié)點(diǎn)也是在/dev 目錄下,如下圖所示。 ![]() 蜂鳴器的硬件和 led 燈類似,如下圖所示。 ![]() 如上圖所示。 原理圖很容易理解,如果網(wǎng)絡(luò) MOTOR_PWM 為高電平,則 L9014 導(dǎo)通,蜂鳴器響,如果網(wǎng)絡(luò)MOTOR_PWM 為低電平,則 L9014 截止,蜂鳴器則不響。 操作方式和 led 小燈類似。 蜂鳴器測試?yán)?/strong> 編寫簡單的 buzzertest.c 文件測試蜂鳴器。 首先添加頭文件,如下圖所示,下面新加了幾個(gè)庫文件,一般常用的就是下面幾個(gè),寫代碼的時(shí)候, 為了方便,可以直接都添加上。 ![]() 然后 main 函數(shù)如下圖所示。 ![]() 如上圖代碼所示。由于只有一個(gè) IO,底層沒有做第三個(gè)參數(shù)的判斷,所以無效 第 16-19 行,對參數(shù) argv[1]有個(gè)簡單的判斷,命令只能是 0 或者 1。 第 21-24 行,open 函數(shù)打開蜂鳴器設(shè)備節(jié)點(diǎn) 第 26 行,使用 ioctl 函數(shù)操作蜂鳴器。 第 27 行,使用 close 函數(shù)關(guān)閉設(shè)備節(jié)點(diǎn)。 編譯運(yùn)行測試 在 Ubuntu 系統(tǒng)下,如下圖所示,進(jìn)入前面實(shí)驗(yàn)創(chuàng)建的目錄“/home/linuxsystemcode/charcontrol”,將源碼 buzzertest.c 拷貝進(jìn)去,如下圖所示。 ![]() 使用命令“arm-none-linux-gnueabi-gcc -o buzzertest buzzertest.c -static”編譯buzzertest 文件,如下圖所示,使用命令“l(fā)s”可以看到生成了 buzzertest 可執(zhí)行文件。 ![]() 這里介紹 U 盤拷貝代碼的方法,也可以編譯進(jìn)文件系統(tǒng)。 將編譯成的可執(zhí)行文件 buzzertest,拷貝到 U 盤,啟動(dòng)開發(fā)板,插入 U 盤,加載 U 盤, 運(yùn)行程序如下。 使用參數(shù) 1 和 0,蜂鳴器會(huì)響。第二個(gè)參數(shù)實(shí)際上并不起作用。 ![]() 如下圖所示,使用參數(shù) 0 和 0,蜂鳴器會(huì)停止響。 ![]() 17.4 字符類 ADC 模數(shù)轉(zhuǎn)換 和 led 燈類似,數(shù)模轉(zhuǎn)換的設(shè)備節(jié)點(diǎn)也是在/dev 目錄下,如下圖所示。 ![]() 模數(shù)轉(zhuǎn)換的硬件部分如下圖所示。 ![]() 如上圖所示。 XadcAIN0 網(wǎng)絡(luò)可以讀取到當(dāng)前輸入電壓,滑動(dòng)變阻器 R 移動(dòng)的時(shí)候,1 和 2 之間的電阻 R12 改變,滑動(dòng)變阻器最大電阻為 R13,然后電壓 Vadc=R12*VDD1V8_EXT/R13 上面公式中 Vadc 可以通過 4412 讀取出來,VDD1V8 和 R13 已知,那么就很容易求出 R12 的電阻。如下圖所示,在 4412datasheet 中 ADC 章節(jié)中有真實(shí)的電阻和電壓曲線圖。 ![]() 這里將數(shù)值做一個(gè)簡單的換算, 1.8V 對應(yīng)的是 10K 歐姆,對應(yīng)的寄存器數(shù)值為 0xfff; 0V 對應(yīng)的是 0 歐姆,對應(yīng)的寄存器數(shù)值為 0x0。 這樣做一個(gè)簡單公式,將讀取的數(shù)值 r 轉(zhuǎn)化為電阻值 R。 R = r*10000/0xfff,即 R = r*10000/4095。 這個(gè)小公式在后面的代碼中將會(huì)使用到。 模數(shù)轉(zhuǎn)換例程 編寫簡單的 ADC.c 文件測試 adc 的驅(qū)動(dòng)。首先添加頭文件,如下圖所示。 ![]() 然后 main 函數(shù)如下圖所示。 ![]() 如上圖代碼所示。 第 14 行,設(shè)備節(jié)點(diǎn)為 char *adc = "/dev/adc"。 第 21 行,打開設(shè)備節(jié)點(diǎn)文件。 第 26 行,使用 read 函數(shù),將讀取數(shù)字賦予 buffer。 第 30 和 31 行,做個(gè)簡單地?fù)Q算,將讀取的數(shù)值轉(zhuǎn)化為電阻值。 編譯運(yùn)行測試 在 Ubuntu 系統(tǒng)下,如下圖所示,進(jìn)入前面實(shí)驗(yàn)創(chuàng)建的目錄“/home/linuxsystemcode/charcontrol/”將源 碼 ADC.c 拷貝進(jìn)去,如下圖所示。 ![]() 使用命令“arm-none-linux-gnueabi-gcc -o ADC ADC.c -static”編譯 ADC 文件,如下圖所示,使用命令“l(fā)s”可以看到生成了 ADC 可執(zhí)行文件。 ![]() 這里介紹 U 盤拷貝代碼的方法,也可以編譯進(jìn)文件系統(tǒng),具體方法參考 10.3.5 小節(jié)。將編譯成的可執(zhí)行文件 open,拷貝到 U 盤,啟動(dòng)開發(fā)板,插入 U 盤,加載 U 盤,運(yùn)行程序。 如下圖所示,使用命令“./mnt/udisk/ADC”即可檢測當(dāng)前電阻值,中間的大段打印參數(shù)是多次打印寄存器的數(shù)值,在驅(qū)動(dòng)實(shí)驗(yàn)中再去介紹。 ![]() 調(diào)整滑動(dòng)電阻器之后,再次使用測試程序,如下圖所示,輸出數(shù)值會(huì)有變化。 ![]() 滑動(dòng)變阻器向順時(shí)針旋轉(zhuǎn),阻值會(huì)減小,最小為 0; 滑動(dòng)變阻器向逆時(shí)針旋轉(zhuǎn),阻值會(huì)增大,最大為 10K。 ![]() |