手机点亮LED灯-Arduino中文社区 - Powered by Discuz! Archiver

jia14080015 发表于 2016-10-19 16:18

手机点亮LED灯

本帖最后由 jia14080015 于 2016-10-19 16:39 编辑

从网上购买了一个智能车,只是让组装好,载入他的程序!
发现里面的资料太乱,根本学不到什么知识。所以决定自己从头开始探索,并记录下来整个的过程!
会在每篇帖子的下面,罗列出遇到的问题,大家一起讨论,共同进步!

1 当前阶段目标
   对软串口接收到的数据处理,对来自android手机命令进行判定,给出对应操作。
   测试手机通过WIFI模块与开发板间信息的传递
2 设备
   arduino uno开发板
    ESP8266 WIFI模块
    LED灯两个
3连接
    ESP8266的连接在上篇帖子中
    LED灯的阳极(长)分别接在数字3、13上
    LED灯的阴极接地
4   arduino 程序
   借鉴帖子http://www.arduino.cn/thread-6436-1-1.html
      在上一张的帖子中,已经完成了ESP8266参数的设定,这里只用设定好IP通信需要的参数就好   
   #include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
int flag=-1;
int val;
#define MAXCHAR 81
char aa;
int j=0;
int g_timeout=0;
char AT_CIPMUX[]="AT+CIPMUX=1";
char AT_CIPSERVER[]="AT+CIPSERVER=1,8888";
char AT_CIPSTO[]="AT+CIPSTO=2800";

//从串口中读出出字符串,存入在resule[]中
int readSerial(char result[])
{
    int i=0;
    while(mySerial.available()>0)
    {
          char inChar=mySerial.read();
          if(inChar=='\n')
          {
                result='\0';
                mySerial.flush();
                return 0;
            }
            if(inChar!='\r')
            {
            result=inChar;
            i++;
            }
      }
}

//数据处理,比较aa[]中是否含有s[]
//从串口中读出数据存入了aa[]中
//s[]是aa[]子串时,返加1,否则返回0
int Hand(char *s)
{
    delay(200);
    clearBuff();
    delay(300);
    readSerial(aa);
    if(strstr(aa,s)!=NULL)
    {
      g_timeout=0;
      clearBuff();
      return 1;
    }
    if(g_timeout>50)
    {
      g_timeout=0;
      return 0;
    }
    g_timeout++;
    return 0;
}

//清除aa[]
void clearBuff(void)
{
    for(j=0;j<MAXCHAR;j++)
    {
          aa=0x00;
      }
      j=0;
}

//设定ESP8266为AP模式,并指定端口
void setESP(void)
{
    clearBuff();
    mySerial.println(AT_CIPMUX);
    delay(500);
    while(Hand("OK")==0);

    clearBuff();
    mySerial.println(AT_CIPSERVER);
    delay(500);
    while(Hand("OK")==0);

    clearBuff();
    mySerial.println(AT_CIPSTO);
    delay(500);
    while(Hand("OK")==0);
   
}

int singal_processing(void)
{
    clearBuff();
    delay(500);
    if(Hand("LEFT"))
      return 1;
    if(Hand("RIGH"))
      return 2;
    if(Hand("STOP"))
      return 3;
}
void setup() {
// put your setup code here, to run once:
    mySerial.begin(115200);
    pinMode(13, OUTPUT);
    pinMode(3, OUTPUT);
   
    setESP();
   
}

void loop() {
// put your main code here, to run repeatedly:
    flag=singal_processing();
    switch (flag)
    {
      case 1:digitalWrite(13, HIGH); break;
      case 2:digitalWrite(3, HIGH); break;
      case 3:digitalWrite(3, LOW);
               digitalWrite(13, LOW); break;
    }
   
   
}


jackten 发表于 2016-10-19 17:57

如果是用蓝牙串口模块的话就比较简单方便,直接发送字符或者16进制数,Arduino接收到之后直接执行处理函数就可以了

jia14080015 发表于 2016-10-19 18:25

jackten 发表于 2016-10-19 17:57
如果是用蓝牙串口模块的话就比较简单方便,直接发送字符或者16进制数,Arduino接收到之后直接执行处理函数 ...

是的。主要是想试试WIFI模块,这个通信更实用。以后可能会再做出IOS的手机程序。

jackten 发表于 2016-10-19 18:55

jia14080015 发表于 2016-10-19 18:25
是的。主要是想试试WIFI模块,这个通信更实用。以后可能会再做出IOS的手机程序。 ...

你是想用wifi串口吗?使用一样

cwjzsyz 发表于 2016-10-20 16:23

jackten 发表于 2016-10-19 17:57
如果是用蓝牙串口模块的话就比较简单方便,直接发送字符或者16进制数,Arduino接收到之后直接执行处理函数 ...

请教您,我是小菜鸟。你说的“蓝牙串口模块的话就比较简单方便,直接发送字符或者16进制数,Arduino接收到之后直接执行处理函数就可以了”,有没有这方面的例程给我学习一下,谢谢!

吹口琴的钢铁侠 发表于 2016-10-21 18:27

可以尝试一下Esp8266的Arduino IDE开发方式哦

15596403638 发表于 2016-10-24 20:35

有没有库函数文件 发一下 谢谢

特斯拉附体 发表于 2016-10-24 21:47

wifi这么难啊

许你一世繁华 发表于 2016-10-25 12:08

新手, 程序看着都有点小难
页: [1]
查看完整版本: 手机点亮LED灯