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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6233|回复: 8

手机点亮LED灯

[复制链接]
发表于 2016-10-19 16:18 | 显示全部楼层 |阅读模式
本帖最后由 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通信需要的参数就好   
     [mw_shl_code=c,true]#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
int flag=-1;
int val;
#define MAXCHAR 81
char aa[MAXCHAR];
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[j]=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;
    }
   
   
}[/mw_shl_code]


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

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

你是想用wifi串口吗?使用一样
发表于 2016-10-20 16:23 | 显示全部楼层
jackten 发表于 2016-10-19 17:57
如果是用蓝牙串口模块的话就比较简单方便,直接发送字符或者16进制数,Arduino接收到之后直接执行处理函数 ...

请教您,我是小菜鸟。你说的“蓝牙串口模块的话就比较简单方便,直接发送字符或者16进制数,Arduino接收到之后直接执行处理函数就可以了”,有没有这方面的例程给我学习一下,谢谢!
发表于 2016-10-21 18:27 | 显示全部楼层
可以尝试一下Esp8266的Arduino IDE开发方式哦
发表于 2016-10-24 20:35 | 显示全部楼层
有没有库函数文件 发一下 谢谢
发表于 2016-10-24 21:47 | 显示全部楼层
wifi这么难啊
发表于 2016-10-25 12:08 | 显示全部楼层
新手, 程序看着都有点小难
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:26 , Processed in 0.116965 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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