网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月01日漏签0天
arduino吧 关注:75,538贴子:230,632
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 7回复贴,共1页
<<返回arduino吧
>0< 加载中...

【arduino】小白求助!!!

  • 只看楼主
  • 收藏

  • 回复
  • 雨林008
  • 小有美名
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
请问这个错误什么意思

int Front_Distance = 0;//
int Left_Distance = 0;
int Right_Distance = 0;
//舵机
#include <Servo.h>
Servo myservo;
int pos = 90;
int myangle;//定义角度变量
int pulsewidth;//定义脉宽变量
int val;
//驱动
int rightgo=6,leftgo=10;
int rightback=9,leftback=11;
//超声波
const int TrigPin=2;
const int EchoPin=3;
float distance;
void setup() {
//舵机引脚
myservo.attach(12);
//驱动
pinMode(rightgo,OUTPUT);
pinMode(leftgo,OUTPUT);
pinMode(rightback,OUTPUT);
pinMode(leftback,OUTPUT);
//超声
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
Serial.begin(9600);
}
void stop(int time) { //小车停止
digitalWrite(rightgo, LOW);
digitalWrite(rightback, LOW);
digitalWrite(leftgo, LOW);
digitalWrite(leftback, LOW);
Serial.println("stop!");
delay(time * 100);//执行时间,可以调整
}
void go(int time)
{
digitalWrite(rightgo,HIGH);
digitalWrite(rightback, LOW);
digitalWrite(leftgo,HIGH);
digitalWrite(leftback, LOW);
Serial.println("go!");
delay(time * 100);//执行时间,可以调整
}
void back(int time)
{
digitalWrite(rightback,HIGH);
digitalWrite(leftback,HIGH);
digitalWrite(rightgo,LOW);
digitalWrite(leftgo,LOW);
Serial.println("back!");
delay(time * 100);//执行时间,可以调整
}
void right(int time)
{
digitalWrite(leftgo,HIGH);
digitalWrite(leftback,LOW);
digitalWrite(rightback,HIGH);
digitalWrite(rightgo,LOW);
Serial.println("right!");
delay(time * 100);//执行时间,可以调整
}
void left(int time)
{
digitalWrite(leftback,HIGH);
digitalWrite(leftgo,LOW);
digitalWrite(rightgo,HIGH);
digitalWrite(rightback,LOW);
Serial.println("left!");
delay(time * 100);//执行时间,可以调整
}
void spin_left(int time) //左转(左轮后退,右轮前进)
{
digitalWrite(rightgo,HIGH); // 右电机前进
digitalWrite(rightback,LOW);
analogWrite(rightgo,200);
analogWrite(rightback,0);//PWM比例0~255调速
digitalWrite(leftgo,HIGH); //左轮后退
digitalWrite(leftback,LOW);
analogWrite(leftgo,200);
analogWrite(leftback,0);//PWM比例0~255调速
delay(time * 100); //执行时间,可以调整
}
int dis()
{
digitalWrite(TrigPin, LOW); // 给触发脚低电平2μs
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH); // 给触发脚高电平10μs,这里至少是10μs
delayMicroseconds(10);
digitalWrite(TrigPin, LOW); // 持续给触发脚低电
float distance = pulseIn(EchoPin, HIGH); // 读取高电平时间(单位:微秒)
distance= distance/58; //为什么除以58等于厘米, Y米=(X秒*344)/2
// X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
//Serial.print("Distance:"); //输出距离(单位:厘米)
//Serial.println(distance); //显示距离
//Distance = distance;
return distance;
}
void front_detection()
{
//此处循环次数减少,为了增加小车遇到障碍物的反应速度
for(int i=0;i<=5;i++) //产生PWM个数,等效延时以保证能转到响应角度
{
servopulse(myservo,90); //模拟产生PWM
}
Front_Distance = dis();
//Serial.print("Front_Distance:"); //输出距离(单位:厘米)
// Serial.println(Front_Distance); //显示距离
//Distance_display(Front_Distance);
}
void servopulse(int myserve,int myangle)/*定义一个脉冲函数,用来模拟方式产生PWM值舵机的范围是0.5MS到2.5MS 1.5MS 占空比是居中周期是20MS*/
{
pulsewidth=(myangle*11)+500;//将角度转化为500-2480 的脉宽值 这里的myangle就是0-180度 所以180*11+50=2480 11是为了换成90度的时候基本就是1.5MS
digitalWrite(myservo,HIGH);//将舵机接口电平置高 90*11+50=1490uS 就是1.5ms
delayMicroseconds(pulsewidth);//延时脉宽值的微秒数 这里调用的是微秒延时函数
digitalWrite(myservo,LOW);//将舵机接口电平置低
delay(20-(pulsewidth*0.001));//延时周期内剩余时间 这里调用的是ms延时函数
}
void left_detection()
{
for(int i=0;i<=15;i++) //产生PWM个数,等效延时以保证能转到响应角度
{
servopulse(myservo,175);//模拟产生PWM
}
Left_Distance = dis();
//Serial.print("Left_Distance:"); //输出距离(单位:厘米)
//Serial.println(Left_Distance); //显示距离
}
void right_detection()
{
for(int i=0;i<=15;i++) //产生PWM个数,等效延时以保证能转到响应角度
{
servopulse(myservo,5);//模拟产生PWM
}
Right_Distance = dis();
//Serial.print("Right_Distance:"); //输出距离(单位:厘米)
//Serial.println(Right_Distance); //显示距离
}
void autom()
{
while(1)
{
front_detection();//测量前方距离
if(Front_Distance < 30)//当遇到障碍物时
{
stop(2);//先刹车
back(2);//后退减速
stop(2);//停下来做测距
left_detection();//测量左边距障碍物距离
right_detection();//测量右边距障碍物距离
if((Left_Distance < 30 ) &&( Right_Distance < 30 ))//当左右两侧均有障碍物靠得比较近
spin_left(0.7);//旋转掉头
else if(Left_Distance > Right_Distance){left(3);stop(1);}
else{right(3);stop(1);}
}
else go(); //无障碍物,直行
}
}
void loop()
{
while(Serial.available())
{
char c=Serial.read();
if(c=='G') go(1);
else if(c=='B') back(1);
else if(c=='R') right(1);
else if(c=='L') left(1);
else if(c=='S') stop(1);
else if(c=='A') autom();
}
}


  • 铁沐真
  • 富有名气
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
此程序是用PWM控制舵机,而不是servo库。楼主把不同程序混在一起了,又没混合对。要么去掉PWM,要么去掉库,以免冲突。


2025-12-01 02:54:54
广告
不感兴趣
开通SVIP免广告
  • elf-32
  • 大名鼎鼎
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Servo库和PWM不要放一起用


  • EthanC
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
刚开始接触arduino 想问一下 这个 for(int i=0;i<=15;i++) //产生PWM个数,等效延时以保证能转到响应角度
{
servopulse(myservo,5);//模拟产生PWM
是什么意思 没太看懂
谢谢


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回arduino吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示