查看: 674|回复: 3
打印 上一主题 下一主题

wifi小车制作问题

[复制链接] qrcode

25

主题

29

帖子

85

积分

注册会员

Rank: 2

积分
85
楼主
跳转到指定楼层
发表于 2016-3-28 09:59 AM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求实现利用手机发送指令来控制小车运动,用的无线模块是ESP8266,将模块作为服务器,然后在手机上安装了一个网络调试助手连接,并发送指令。但是发送的指令只有“前进”是正确的,发送其他都没有反应,而且手机的TCP连接也经常显示断开。自己这方面不太懂,也找不到相应的资料,不知道什么原因,现在把代码贴出来,希望各位大神能给点帮助,我先在这里谢过了。
完整代码如下:
#include

SoftwareSerial WIFISerial(10, 11);// RX, TX
int IN1 = 6;
int IN2 = 7;
int IN3 = 8;
int IN4 = 9;
int ENA = 3;
int ENB = 5;
int lkf;

void setup()
{
  int i;
  for (i=6;i<=9;i++)
  pinMode(i,OUTPUT);
  for (i=6;i<=9;i++) 
  digitalWrite(i,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);


  Serial.begin(9600);
  lkf=0;
  pinMode(13, OUTPUT);
  WIFISerial.begin(115200);
  WIFISerial.println("AT+RST");
  delay(2000);
  WIFISerial.println("AT+CWMODE=2"); //ap+sta mode
  delay(2000);
  WIFISerial.println("AT+RST");
  delay(2000);
  WIFISerial.println("AT+CWSAP="SLH","11111111",11,0");
  delay(3000);
  WIFISerial.println("AT+CIPMUX=1");
  delay(2000);
  WIFISerial.println("AT+CIPSERVER=1,8080");
  delay(2000);
  }

void loop()
{
  if (WIFISerial.available())
  { 
    lkf = WIFISerial.read();
     switch(lkf)
     {
   case \'A\':  //qianjin
     Move();
     lkf=0;  
     break;   
   case \'B\': //houtui
     Back();
     lkf=0;
     break;     
   case \'C\': //zuozhuan
     TurnLeft();
     lkf=0;
     break;
   case \'D\': //youzhuan
    TurnRight();
    lkf=0;
    break; 
   case \'E\':
    stopMotor(true);
    delay(1000); 
    stopMotor(false);
    lkf=0;
    break;  
     }
  }
  lkf=0;

}
void Move()
{
    digitalWrite(IN1,LOW);
   digitalWrite(IN2,HIGH);
   digitalWrite(IN3,LOW);
   digitalWrite(IN4,HIGH);
}
void Back()
{
   digitalWrite(IN1,HIGH);
   digitalWrite(IN2,LOW);
   digitalWrite(IN3,HIGH);
   digitalWrite(IN4,LOW); 
}
void TurnLeft()//左转
{
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);  
}
void TurnRight()//右转
{
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,HIGH);
}
void stopMotor(boolean r)//电机停转
{
  if (r)
  {
    analogWrite(ENA,0);
    analogWrite(ENB,0);
  }
  else
  {
    analogWrite(ENA,255); 
    analogWrite(ENB,255);
  }


回复

使用道具 举报

0

主题

95

帖子

22

积分

新手上路

Rank: 1

积分
22
沙发
发表于 2016-3-28 09:59 AM | 只看该作者
要求实现利用手机发送指令来控制小车运动,用的无线模块是ESP8266,将模块作为服务器,然后在手机上安装了一个网络调试助手连接,并发送指令。但是发送的指令只有“前进”是正确的,发送其他都没有反应,而且手机的TCP连接也经常显示断开。自己这方面不太懂,也找不到相应的资料,不知道什么原因,现在把代码贴出来,希望各位大神能给点帮助,我先在这里谢过了。
完整代码如下:
#include

SoftwareSerial WIFISerial(10, 11);// RX, TX
int IN1 = 6;
int IN2 = 7;
int IN3 = 8;
int IN4 = 9;
int ENA = 3;
int ENB = 5;
int lkf;

void setup()
{
  int i;
  for (i=6;i<=9;i++)
  pinMode(i,OUTPUT);
  for (i=6;i<=9;i++) 
  digitalWrite(i,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(5,OUTPUT);


  Serial.begin(9600);
  lkf=0;
  pinMode(13, OUTPUT);
  WIFISerial.begin(115200);
  WIFISerial.println("AT+RST");
  delay(2000);
  WIFISerial.println("AT+CWMODE=2"); //ap+sta mode
  delay(2000);
  WIFISerial.println("AT+RST");
  delay(2000);
  WIFISerial.println("AT+CWSAP="SLH","11111111",11,0");
  delay(3000);
  WIFISerial.println("AT+CIPMUX=1");
  delay(2000);
  WIFISerial.println("AT+CIPSERVER=1,8080");
  delay(2000);
  }

void loop()
{
  if (WIFISerial.available())
  { 
    lkf = WIFISerial.read();
     switch(lkf)
     {
   case \'A\':  //qianjin
     Move();
     lkf=0;  
     break;   
   case \'B\': //houtui
     Back();
     lkf=0;
     break;     
   case \'C\': //zuozhuan
     TurnLeft();
     lkf=0;
     break;
   case \'D\': //youzhuan
    TurnRight();
    lkf=0;
    break; 
   case \'E\':
    stopMotor(true);
    delay(1000); 
    stopMotor(false);
    lkf=0;
    break;  
     }
  }
  lkf=0;

}
void Move()
{
    digitalWrite(IN1,LOW);
   digitalWrite(IN2,HIGH);
   digitalWrite(IN3,LOW);
   digitalWrite(IN4,HIGH);
}
void Back()
{
   digitalWrite(IN1,HIGH);
   digitalWrite(IN2,LOW);
   digitalWrite(IN3,HIGH);
   digitalWrite(IN4,LOW); 
}
void TurnLeft()//左转
{
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);  
}
void TurnRight()//右转
{
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,HIGH);
}
void stopMotor(boolean r)//电机停转
{
  if (r)
  {
    analogWrite(ENA,0);
    analogWrite(ENB,0);
  }
  else
  {
    analogWrite(ENA,255); 
    analogWrite(ENB,255);
  }


回复 支持 反对

使用道具 举报

3

主题

103

帖子

55

积分

注册会员

Rank: 2

积分
55
板凳
发表于 2016-3-28 11:35 AM | 只看该作者
建议改变电机状态的时候先停止电机,更改完再启用电机,因为真值输出的时候延时太大了,有可能不同步。网络断的问题,你用的什么供电?网络断开是否出现在电机工作的状态下?
回复 支持 反对

使用道具 举报

12

主题

86

帖子

40

积分

新手上路

Rank: 1

积分
40
地板
发表于 2016-3-28 11:55 AM | 只看该作者

只有“前进”是正确的,发送其他都没有反应

可能是你的协议有问题,“前进”正确是只有一次可以,还是每次“前进”都是可以的?

有可能执行一次后,wifi断了,或其他的指令没有被赋值。

以下参考:

http://blog.sina.com.cn/s/blog_6b8b295b01019aa6.html

http://www.geekfans.com/article-4102-1.html

http://blog.csdn.net/hnmsky/article/details/8517867

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表