烽火社区

标题: wifi小车制作问题 [打印本页]

作者: luke    时间: 2016-3-28 09:59 AM
标题: wifi小车制作问题
要求实现利用手机发送指令来控制小车运动,用的无线模块是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);
  }



作者: 梧桐芭蕉雨    时间: 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);
  }



作者: potatofly    时间: 2016-3-28 11:35 AM
建议改变电机状态的时候先停止电机,更改完再启用电机,因为真值输出的时候延时太大了,有可能不同步。网络断的问题,你用的什么供电?网络断开是否出现在电机工作的状态下?
作者: 可乐兑    时间: 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






欢迎光临 烽火社区 (http://bbs.cnecport.com/) Powered by Discuz! X3.2