通过串口输出PWM信号,也就是脉冲宽度调制。改变占空比,可以近似输出不同的电压,从而对电机进行调速。
所有资料51hei提供下载:
串口_调_PWM.rar
(4.84 KB, 下载次数: 54)
arduino源程序如下:
- // 串口管理单元
- // Alita 2016-10-13 尝试简单的数值命令--实用版
- // Alita 2016-10-15 v2:支持负数
- int GetCMD()
- {
- // Read serial input:
- while (Serial.available() > 0)
- {
- // 读取一个字符
- int inChar = Serial.read();
- // Alita 2016-10-15 负数符号判定
- if(inChar == 45 and inString.length() == 0)
- {
- // 负号条件必须出现在字符串的开头(当前先这样处理)
- inString += (char)inChar;
- }
- // 判定是不是数值字符(0~9)
- // [注意]该判定方法组会导致只提取字符串中的所有数字并将其构成一个数字字符序列
- if (isDigit(inChar)) {
- // 添加到字符串中(byte转换为char类型)
- inString += (char)inChar;
- }
- // 换行符表示结束--也可以使用特殊字符但是需要小心处理
- if (inChar == '\n')
- {
- // 有效性判定
- if(inString.length() <=0)
- {
- // 无效数据
- return 0;
- }
- // 将字符转换为数值
- int intCMD = inString.toInt();
- if(intCMD == -10)
- {
- Serial.println("right");
- }
- Serial.println(intCMD);
- // 清空输入
- inString = "";
- // 反馈结果
- return intCMD;
- }
- }
- // 无效结果
- return 0;
- }
- //对串口接受到的数据进行有效性判定
- void Test_SerialPort_CMD1()
- {
- int intCMDValue = 0;
- intCMDValue = GetCMD();
- if(intCMDValue < -255 or intCMDValue > 255)
- {
- // 无效命令
- Serial.println("[Error]Err Speed CMD,Range exception ,not between[0,255]");
- return;
- }
- else if(intCMDValue == 0)
- {
- return;
- }
- else
- {
- analogWrite(13, intCMDValue);
- }
-
- }
复制代码
|