|
通過(guò)串口輸出PWM信號(hào),也就是脈沖寬度調(diào)制。改變占空比,可以近似輸出不同的電壓,從而對(duì)電機(jī)進(jìn)行調(diào)速。
所有資料51hei提供下載:
串口_調(diào)_PWM.rar
(4.84 KB, 下載次數(shù): 54)
2017-8-10 21:28 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
arduino源程序如下:
- // 串口管理單元
- // Alita 2016-10-13 嘗試簡(jiǎn)單的數(shù)值命令--實(shí)用版
- // Alita 2016-10-15 v2:支持負(fù)數(shù)
- int GetCMD()
- {
- // Read serial input:
- while (Serial.available() > 0)
- {
- // 讀取一個(gè)字符
- int inChar = Serial.read();
- // Alita 2016-10-15 負(fù)數(shù)符號(hào)判定
- if(inChar == 45 and inString.length() == 0)
- {
- // 負(fù)號(hào)條件必須出現(xiàn)在字符串的開(kāi)頭(當(dāng)前先這樣處理)
- inString += (char)inChar;
- }
- // 判定是不是數(shù)值字符(0~9)
- // [注意]該判定方法組會(huì)導(dǎo)致只提取字符串中的所有數(shù)字并將其構(gòu)成一個(gè)數(shù)字字符序列
- if (isDigit(inChar)) {
- // 添加到字符串中(byte轉(zhuǎn)換為char類型)
- inString += (char)inChar;
- }
- // 換行符表示結(jié)束--也可以使用特殊字符但是需要小心處理
- if (inChar == '\n')
- {
- // 有效性判定
- if(inString.length() <=0)
- {
- // 無(wú)效數(shù)據(jù)
- return 0;
- }
- // 將字符轉(zhuǎn)換為數(shù)值
- int intCMD = inString.toInt();
- if(intCMD == -10)
- {
- Serial.println("right");
- }
- Serial.println(intCMD);
- // 清空輸入
- inString = "";
- // 反饋結(jié)果
- return intCMD;
- }
- }
- // 無(wú)效結(jié)果
- return 0;
- }
- //對(duì)串口接受到的數(shù)據(jù)進(jìn)行有效性判定
- void Test_SerialPort_CMD1()
- {
- int intCMDValue = 0;
- intCMDValue = GetCMD();
- if(intCMDValue < -255 or intCMDValue > 255)
- {
- // 無(wú)效命令
- Serial.println("[Error]Err Speed CMD,Range exception ,not between[0,255]");
- return;
- }
- else if(intCMDValue == 0)
- {
- return;
- }
- else
- {
- analogWrite(13, intCMDValue);
- }
-
- }
復(fù)制代碼
|
|