当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > arduino花式点灯续

arduino花式点灯续 时间:2018-09-26      来源:未知

之前我们使用Arduino 实现了点灯,闪烁灯,串口点灯以及与上位机结合的点灯。这一次我们将实现一个UDP服务器接受命令实现点灯,以及使用Intel Edison开发板实现点灯。

一、UDP实现点灯

UDP服务器是一种网络通信采取的正常方式。使用udp协议实现快速的网络通信。在服务器端只需要 三个函数便可部署。

udp_socket = socket(AF_INET, SOCK_DGRAM, 0);

这个函数第一个参数是代表ipv4的作用域的宏,第二个参数是数据报的类型,udp使用的用户数据报格式。函数返回值是指文件描述符,使用它作进一步操作。

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

bind函数是将套接字与本地地址信息进行绑定。

struct sockaddr_in seraddr;

seraddr.sin_family=AF_INET;

seraddr.sin_port=htons(50000);

seraddr.sin_addr.s_addr=inet_addr("0.0.0.0");

Seraddr这个结构体需要填入ipv4的作用域,以及本机地址和本地端口。

再使用recfrom函数便可接受信息

recvfrom(fd,buf,sizeof(buf),0,NULL,NULL);

结合之前的串口函数,可以实现接受数据报打开串口给下位机Arduino发送信息:

代码:

#include #include

/* See NOTES */#include

#include

#include

#include //#include //#include

#include

#include

#include

#include

#include

#include

int serialfd;int uart_device_open(){

struct termios options;

if((serialfd=open("/dev/ttyUSB0",O_RDWR|O_NOCTTY|O_NDELAY))<0)

{

perror("open failed");

return -1;

}

tcgetattr(serialfd, &options);

options.c_cflag |= (CLOCAL | CREAD);

options.c_cflag &= ~CSIZE;

options.c_cflag &= ~CRTSCTS;

options.c_cflag |= CS8;

options.c_cflag &= ~CSTOPB;

options.c_iflag |= IGNPAR;

options.c_iflag &= ~(BRKINT | INPCK | ISTRIP | ICRNL | IXON);

options.c_cc[VMIN] = 12;

options.c_oflag = 0;

options.c_lflag = 0;

cfsetispeed(&options, B9600);

cfsetospeed(&options, B9600);

tcsetattr(serialfd,TCSANOW,&options);

printf("zigbee serial ok!\n");

return 0;

}

int main(int argc, const char *argv[]){

int fd;

fd=socket(AF_INET,SOCK_DGRAM,0);

if(fd<0)

{

printf("fd error\n");

return -1;

}

//socket

struct sockaddr_in seraddr;

seraddr.sin_family=AF_INET;

seraddr.sin_port=htons(50000);

seraddr.sin_addr.s_addr=inet_addr("0.0.0.0");

// host to network small htons

//bind 2 sockaddr <-- sockaddr_in

int ret_bind;

ret_bind=bind(fd,(struct sockaddr*)&seraddr,sizeof(seraddr));

if(ret_bind<0)

{

printf("fail to bind\n");

return -1;

}

//recvfrom

char buf[128];

uart_device_open();

while(1)

{

bzero(buf,sizeof(buf));

recvfrom(fd,buf,sizeof(buf),0,NULL,NULL);

printf("Buf:%s\n",buf);

if(buf[0]=='1'||buf[0]=='b'||buf[0]=='0')

{

write(serialfd, buf, 1);

printf("success to send %c\n",buf[0]);

}

}

close(fd);

return 0;

}

二、Intel Edison实现点灯

 

 

Edison是Intel推出的一款智能开发平台,兼容Arduino,同时也是一款高性能的x86低功耗开发板。

首先我们先配置一下Intel Edison:

一旦成功连接,Edison正常启动,在windows中会出现一个盘符。

 

 

陆续安装完Arduino的几个开发包。

 

 

使用之前的Arduino代码烧录到开发板中,方法参照Arduino的使用;

 

 

如此便实现了Intel Edison的Arduino点灯程序。

上一篇:C语言预处理命令解析

下一篇:scanf函数简单问题讨论

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部