czsyxzl 发表于 2014-12-29 10:54:09

ARDUINO 电位器控制舵机显示问题

我有一个140HZ舵机,输入脉宽为5%到95%的140HZ信号,舵机机就可以旋转0-90度,我编制了一个程序:不需要库文件的,如下:
#include <Wire.h> //申明库文件
#include <LiquidCrystal_I2C.h>
int readPin = 0;   //用来连接电位器
int servopin = 9;    //定义舵机接口数字接口9
LiquidCrystal_I2C lcd(0x27,16,2);
void servopulse(int angle)//定义一个脉冲函数
{
int pulsewidth=(angle*6)+500;//将角度转化为500-6638的脉宽值
digitalWrite(servopin,HIGH);    //将舵机接口电平至高
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
digitalWrite(servopin,LOW);   //将舵机接口电平至低
delayMicroseconds(7142-pulsewidth);
}

void setup()
{
lcd.init();//1602液晶初始化
delay(20);//延时
lcd.init();//需要两次初始化
delay(20);
lcd.backlight();//点亮背光灯
lcd.setCursor(0,0);//把光标定位在第0行,第0列
lcd.print("DUTY ="); //显示“Voltage =”
lcd.setCursor(15,0);//把光标定位在第0行,第15列
lcd.print("%");   
   pinMode(servopin,OUTPUT);//设定舵机接口为输出接口

}

void loop()
{
float sensorValue = analogRead(readPin);
//把数值范围为0~1023的数字量正比转换为实测电压值
float vol=map(sensorValue,1023,0,95,5);
lcd.setCursor(10,0);
lcd.print(vol);


    int readValue = analogRead(readPin);
int angle = readValue;
    servopulse(angle);

}

舵机没有反应,而删除:
lcd.setCursor(10,0);
lcd.print(vol);
的显示内容后,舵机就可以正常运行了。请各位高手看一下如何是好?

czsyxzl 发表于 2014-12-29 11:20:16

这个是简化的程序:运行正常。

int readPin = 0;   //用来连接电位器
int servopin = 9;
void servopulse(int angle)//定义一个脉冲函数
{
int pulsewidth=(angle*6)+500;//将角度转化为500-6638的脉宽值
digitalWrite(servopin,HIGH);    //将舵机接口电平至高
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数
digitalWrite(servopin,LOW);   //将舵机接口电平至低
delayMicroseconds(7142-pulsewidth);
}
void setup()
{
   pinMode(servopin,OUTPUT);//设定舵机接口为输出接口
}
void loop()
{
    int angle = analogRead(readPin);
   servopulse(angle);
   }

suoma 发表于 2014-12-29 19:32:24

显示内容跟舵机就可以正常运行没有关系

czsyxzl 发表于 2015-1-14 21:40:34

那么请教大侠怎么处理呢?我只是想显示占空比而已
页: [1]
查看完整版本: ARDUINO 电位器控制舵机显示问题