智慧超市分捡系统


写卡 M2 & M5 & M6 demo_20190416

软件工具
下载链接:https://pan.baidu.com/s/1bS6nh4FZrDq24GkJfv6h3w
提取码:phy2
1、仓库区
ESP8266作为客户端加入手机创建的 tcpServer 中

/*
把8266作为TCPcleint,加入手机创建的tcpServer中
*/
#include<ESP8266WiFi.h>
//WIFI名字和密码
const char* ssid = "iCloud_TP";
const char* password = "icloud_TP";
const char *host = "192.168.1.190"; //修改为手机的的tcpServer服务端的IP地址,即手机在路由器上的ip
const int tcpPort = 8090;//sfq 修改为你建立的Server服务端的端口号
WiFiClient client;
//连接标识
int a = 0;
int infrared=0;
int i = 0;
void setup()
{
Serial.begin(9600);
ConnectWIFI();
pinMode(16, INPUT);// D0 板载指示灯
pinMode(5, INPUT);// D1
pinMode(4, INPUT);// D2
pinMode(0, INPUT);// D3
pinMode(2, OUTPUT);// D4 TXD1
pinMode(14, INPUT);// D5
pinMode(12, INPUT);// D6
pinMode(13, INPUT);// D7
pinMode(15, INPUT);// D8
digitalWrite(2, HIGH);
}
void loop()
{
if (a == 1) {
//串口数据发送到服务器
//Senddata();
} else {
//连接服务端
ConnectServer();
}
//连接服务端并用led灯表示连接状态
LEDstate();
//接收server数据发送到串口
//Readdata();
for(i=0;i<6;i++){
Readinfrared(i);
}
}
//连接WIFI
void ConnectWIFI() {
WiFi.begin(ssid, password);
//等待连接
uint8_t i = 0;
while (WiFi.status() != WL_CONNECTED && i++ < 200) {
delay(500);
// Serial.print(".");
}
//连接失败
if (i == 201) {
// Serial.println("\nCould not connect WIFI. ");
while (1) {
delay(500);
}
} else {
// Serial.println("connect WIFI ok");
}
}
//led灯连接时常亮,未连接时闪烁
void LEDstate() {
//连接情况 用led灯的状态显示
a = 0;
for (int i = 0; client.connected(); i++) {
a = 1;
break;
}
if (a == 0) {
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
} else {
digitalWrite(2, LOW);
}
}
//连接服务端
void ConnectServer() {
while (!client.connected())
{
if (!client.connect(host, tcpPort)) {
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
}
}
}
//串口数据发送到服务器
void Senddata() {
//串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
while (Serial.available())
{
size_t counti = Serial.available();
uint8_t sbuf[counti];
Serial.readBytes(sbuf, counti);
client.write(sbuf, counti);
// Serial.write(sbuf, counti);
// Serial.println("send over!");
}
// //直接发送
// client.println(String("222222"));
// delay(2000);
}
void Readdata() {
//读取从server返回到响应数据
String line = client.readStringUntil('\r');
Serial.println(line);
}
void Readinfrared(int ir){
//扫描端口
switch(ir){
case 0:
ir=16;break;
case 1:
ir=5;break;
case 2:
ir=4;break;
case 3:
ir=14;break;
case 4:
ir=12;break;
case 5:
ir=13;break;
}
//获取信号
infrared=digitalRead(ir);
switch(ir){
case 16:
if(infrared == 1){
client.println("m,"+String(infrared));}
delay(100);
break;
case 5:
if(infrared == 1){
client.println("n,"+String(infrared));}
delay(100);
break;
case 4:
if(infrared == 1){
client.println("o,"+String(infrared));}
delay(100);
break;
case 14:
if(infrared == 1){
client.println("r,"+String(infrared));}
delay(100);
break;
case 12:
if(infrared == 1){
client.println("q,"+String(infrared));}
delay(100);
break;
case 13:
if(infrared == 1){
client.println("p,"+String(infrared));}
delay(100);
break;
}
}
2、待捡区
未检测到货物时传送运行,货物到达推杆位置时停止传送,推至分捡传送,后退2S缓解储物处,正常运行。
#define motor_A 2 //推电机正转
#define motor_B 3 //推电机反转
#define motor_C 4 //传送电机正转
#define motor_D 5 //传送电机反转
#define limit_ONOFF 7 //限位开关
#define ITR 8 //光电开关
int limit_ONOFF_NUM = 0; //存放限位开关信号,将信号保存下来
int ITR_NUM = 0;//存放物体到位值
void setup()
{
Serial.begin(9600);//串口波特率9600
pinMode(motor_A,OUTPUT);
pinMode(motor_B,OUTPUT);
pinMode(motor_C,OUTPUT);
pinMode(motor_D,OUTPUT);
pinMode(7,INPUT_PULLUP);
pinMode(ITR,INPUT_PULLUP);
/*-----初始化输出引脚------*/
digitalWrite(motor_A,LOW);
digitalWrite(motor_B,LOW);
digitalWrite(motor_C,LOW);
digitalWrite(motor_D,LOW);
delay(100); //延时0.1s
}
void loop()
{
yunxing(); //开始运行工作
ITR_NUM = digitalRead(ITR); //读取
if(ITR_NUM == 0) //无物体靠近时为高电,有物体靠近时为低电平
{
delay(100);
ITR_NUM = digitalRead(ITR);
if (ITR_NUM == 0){
tingzhi();
delay(1000);
tuigan();
delay(1000);
shougan();
delay(1000);
daotui();
}
}
}
/*----------------推杆控制-------------------*/
void tuigan()//推杆
{
digitalWrite(motor_A, LOW); //初始化引脚为高电平
digitalWrite(motor_B, HIGH);
delay(500);
do {
limit_ONOFF_NUM = digitalRead(limit_ONOFF);
if (limit_ONOFF_NUM == 0)
{
delay(50);
limit_ONOFF_NUM = digitalRead(limit_ONOFF);
if (limit_ONOFF_NUM == 0)
{
digitalWrite(motor_A, LOW); //初始化引脚为高电平
digitalWrite(motor_B, LOW);
}
}
} while (limit_ONOFF_NUM);
}
void shougan()//推杆
{
digitalWrite(motor_B, LOW); //初始化引脚为高电平
digitalWrite(motor_A, HIGH);
delay(500);
do {
limit_ONOFF_NUM = digitalRead(limit_ONOFF);
if (limit_ONOFF_NUM == 0)
{
delay(50);
limit_ONOFF_NUM = digitalRead(limit_ONOFF);
if (limit_ONOFF_NUM == 0)
{
digitalWrite(motor_A, LOW); //初始化引脚为高电平
digitalWrite(motor_B, LOW);
}
}
} while (limit_ONOFF_NUM);
}
/*----------------传送控制-------------------*/
void tingzhi()//传送停止
{
digitalWrite(motor_C,LOW);
digitalWrite(motor_D,LOW);
}
void yunxing()//传送运行
{
digitalWrite(motor_C,HIGH);
digitalWrite(motor_D,LOW);
}
void daotui()//传送后退
{
digitalWrite(motor_D,HIGH);
digitalWrite(motor_C,LOW);
delay(1500);
digitalWrite(motor_C,LOW);
digitalWrite(motor_D,LOW);
delay(500);
}
3、分捡区
3.1 RFID寻卡
RFID简介:射频识别即RFID(Radio Frequency IDentification)技术,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。常用的有低频(125k~134.2K)、高频(13.56Mhz)、超高频,微波等技术。RFID读写器也分移动式的和固定式的,目前RFID技术应用很广,如:图书馆,门禁系统,食品安全溯源等。
Arduino Uno <—> RFID-RC522
10 <—> SDA
13 <—> SCK
11 <—> MOSI
12 <—> MISO
null <—> IRQ
GND <—> GND
9 <—> RST
3.3V <—> 3.3V


示例
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // 配置针脚
#define SS_PIN 10
#define motor_A 2 //推电机
#define motor_B 3 //推电机
#define limit_ONOFF 5 //限位开关
MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建新的RFID实例
MFRC522::MIFARE_Key key;
int limit_ONOFF_NUM = 0; //存放限位开关信号,将信号保存下来
char inByte = 0; //存放串口数据
void setup() {
Serial.begin(9600); // 设置串口波特率为9600
pinMode(motor_A,OUTPUT);
pinMode(motor_B,OUTPUT);
pinMode(5,INPUT_PULLUP);
digitalWrite(motor_A,LOW);
digitalWrite(motor_B,LOW);
while (!Serial); // 如果串口没有打开,则死循环下去不进行下面的操作
SPI.begin(); // SPI开始
mfrc522.PCD_Init(); // Init MFRC522 card
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
//Serial.println(F("扫描卡开始进行读或者写"));
//Serial.print(F("使用A和B作为键"));
//dump_byte_array(key.keyByte, MFRC522::MF_KEY_SIZE);
//Serial.println();
Serial.println(F("开始读卡"));
}
void loop() {
// 寻找新卡
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// 选择一张卡
if ( ! mfrc522.PICC_ReadCardSerial())
return;
// 显示卡片的详细信息
// Serial.print(F("卡片 UID:"));
// dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
// Serial.println();
// Serial.print(F("卡片类型: "));
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
// Serial.println(mfrc522.PICC_GetTypeName(piccType));
// 检查兼容性
if ( piccType != MFRC522::PICC_TYPE_MIFARE_MINI
&& piccType != MFRC522::PICC_TYPE_MIFARE_1K
&& piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("仅仅适合Mifare Classic卡的读写"));
return;
}
// 我们只使用第二个扇区
// IC卡中的扇区4
byte sector = 1;
byte blockAddr = 4;
byte dataBlock[] = {
0x42, 0xBB, 0xF5, 0xCE, // 41 BB F5 CE
0xEF, 0x00, 0x08, 0x02, // EF 00 08 02
0x00, 0x00, 0x00, 0x00, // 00 00 00 00
0x6C, 0x04, 0x01, 0x00 // 6C 04 01 00
};//定义数据IC卡 作为数据对比使用
byte trailerBlock = 7;
MFRC522::StatusCode status;
byte buffer[18];
byte size = sizeof(buffer);
// 原来的数据
//Serial.println(F("显示原本的数据..."));
status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(F("身份验证失败?或者是卡链接失败"));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
// 显示整个扇区
// Serial.println(F("显示所有扇区的数据"));
// mfrc522.PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), &key, sector);// 显示整个扇区函数
// Serial.println();
// 从块儿读取数据
//Serial.print(F("读取块儿的数据在:")); Serial.print(blockAddr);
//Serial.println(F("块 ..."));
status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("读卡失败,没有连接上 "));
Serial.println(mfrc522.GetStatusCodeName(status));
}
//Serial.print(F("数据内容在第 ")); Serial.print(blockAddr); Serial.println(F(" 块:"));
// dump_byte_array(buffer, 16); // 块儿读取数据值并打印端口
// Serial.println();
// Serial.println();
// 停止 PICC 使放置在读卡区的IC卡进入休眠状态,不再重复读卡
mfrc522.PICC_HaltA();
//停止加密PCD 停止读卡模块编码
mfrc522.PCD_StopCrypto1();
// 验证数据,保证前后数据是相等
// 通过计算块中的字节数量
//Serial.println(F("等待验证结果..."));
byte count = 0;
for (byte i = 0; i < 16; i++) {
// 比较一下缓存中的数据(我们读出来的数据) = (我们写的数据)
if (buffer[i] == dataBlock[i])
//Serial.println(F("验证成功 :"));
count++;
}
//Serial.print(F("匹配的字节数量 = ")); Serial.println(count);
if (count == 16) {
Serial.println(F("B"));//数据验证成功,数据匹配
delay(1000);
tuigan();
} else {
Serial.println(F("Z"));//数据验证失败,数据不匹配
}
}
/*========================================================*/
/**
* 将字节数组转储为串行的十六进制值
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
void tuigan()//推杆分拣
{
digitalWrite(motor_A, LOW); //初始化引脚为高电平
digitalWrite(motor_B, HIGH);
delay(2000);
do {
limit_ONOFF_NUM = digitalRead(limit_ONOFF);
if (limit_ONOFF_NUM == 0)
{
delay(50);
limit_ONOFF_NUM = digitalRead(limit_ONOFF);
if (limit_ONOFF_NUM == 0)
{
digitalWrite(motor_A, LOW); //初始化引脚为高电平
digitalWrite(motor_B, LOW);
delay(500);
Serial.println(F("X"));//分捡完成 上传完成信息
}
}
} while (limit_ONOFF_NUM);
}
3.2 ESP8266
扫卡通过发送扫卡信息到传送收到信息停止,分捡完成继续运行传送。
3.2.1ESP8266_tcpclient
将arduino信息上传至8266服务端
示例
/*
把8266作为TCPcleint,加入手机创建的tcpServer中
*/
#include<ESP8266WiFi.h>
//WIFI名字和密码
const char* ssid = "iCloud_TP";
const char* password = "icloud_TP";
const char *host = "192.168.1.181"; //修改为手机的的tcpServer服务端的IP地址,即手机在路由器上的ip
const int tcpPort = 8088;//sfq 修改为你建立的Server服务端的端口号
WiFiClient client;
//连接标识
int a = 0;
void setup()
{
Serial.begin(9600);
ConnectWIFI();
pinMode(16, INPUT);// D0
pinMode(5, INPUT);// D1
pinMode(4, INPUT);// D2
pinMode(0, INPUT);// D3
pinMode(2, OUTPUT);// D4
pinMode(14, OUTPUT);// D5
pinMode(12, OUTPUT);// D6
pinMode(13, OUTPUT);// D7
pinMode(15, OUTPUT);// D8
digitalWrite(2, HIGH);
digitalWrite(14, HIGH);
}
void loop()
{
if (a == 1) {
//串口数据发送到服务器
Senddata();
} else {
//连接服务端
ConnectServer();
}
//连接服务端并用led灯表示连接状态
LEDstate();
// //接收server数据发送到串口
Readdata();
}
//连接WIFI
void ConnectWIFI() {
WiFi.begin(ssid, password);
//等待连接
uint8_t i = 0;
while (WiFi.status() != WL_CONNECTED && i++ < 200) {
delay(500);
// Serial.print(".");
}
//连接失败
if (i == 201) {
// Serial.println("\nCould not connect WIFI. ");
while (1) {
delay(500);
}
} else {
// Serial.println("connect WIFI ok");
}
}
//led灯连接时常亮,未连接时闪烁
void LEDstate() {
//连接情况 用led灯的状态显示
a = 0;
for (int i = 0; client.connected(); i++) {
a = 1;
break;
}
if (a == 0) {
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
} else {
digitalWrite(2, LOW);
}
}
//连接服务端
void ConnectServer() {
while (!client.connected())
{
if (!client.connect(host, tcpPort)) {
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
}
}
}
//串口数据发送到服务器
void Senddata() {
//串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
while (Serial.available())
{
size_t counti = Serial.available();
uint8_t sbuf[counti];
Serial.readBytes(sbuf, counti);
client.write(sbuf, counti);
// Serial.write(sbuf, counti);
// Serial.println("send over!");
}
// //直接发送
// client.println(String("222222"));
// delay(2000);
}
void Readdata() {
//读取从server返回到响应数据
String line = client.readStringUntil('\r');
Serial.println(line);
}
3.2.2 ESP8266_tcpServer
传送带接收,8266作为服务端接收并处理客户端发来传送信息。
/**
功能:
1.将客户端发来的数据转发到串口;
2.串口数据转发给所有客户端
3.可连接4个客户端
4.可设置静态IP地址
5.指示灯闪烁表示无客户端连接,灯亮代表有客户端连接
*/
#include <ESP8266WiFi.h>
//定义最多多少个client可以连接本server
#define MAX_SRV_CLIENTS 5
//路由器WIFI和密码
const char* ssid = "iCloud_TP";
const char* password = "icloud_TP";
//静态地址、网关、子网掩码
IPAddress local_IP(192, 168, 1, 181);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
//创建server
WiFiServer server(8088);//端口号,随意修改,范围0-65535
//管理clients
WiFiClient serverClients[MAX_SRV_CLIENTS];
int a = 0; //连接状态标识
int i = 0;//用于for循环
void setup() {
//波特率
Serial.begin(9600);
//连接WIFI
MyconnectWIFI();
//启动server
server.begin();
server.setNoDelay(true); //加上后才正常些
//定义输入引脚
pinMode(16, OUTPUT);// D0
pinMode(5, INPUT);// D1
pinMode(4, INPUT);// D2
pinMode(0, INPUT);// D3
//定义输出引脚
pinMode(2, OUTPUT);// D4
pinMode(14, OUTPUT);// D5
pinMode(12, OUTPUT);// D6
pinMode(13, OUTPUT);// D7
pinMode(15, OUTPUT);// D8
digitalWrite(2, HIGH);//输出低电平
digitalWrite(12, LOW);
digitalWrite(14, HIGH);//输出高电平
digitalWrite(16, LOW);
}
void loop() {
//检测新的Client
NewClient();
//LED指示灯
LEDstate();
//把收到的客户端数据发送到串口
ReceiveData();
//串口数据发送到客户端
//SendData();
}
//连接WIFI
void MyconnectWIFI() {
WiFi.config(local_IP, gateway, subnet);//设置静态IP
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);//路由器的WiFi名称和密码
// Serial.print("\nConnecting to ");
// Serial.println(ssid);
//等待连接
while (WiFi.status() != WL_CONNECTED && i++ < 200) {
delay(500);
Serial.print(".");
}
if (i == 201) {
// Serial.print("\nCould not connect to ");
// Serial.println(ssid);
while (1) {
}
} else {
// Serial.print("\nReady! Use 'telnet ");
// Serial.print(WiFi.localIP());
// Serial.println(" 8088' to connect");
}
}
//有客户端连接时常亮,无连接时闪烁
void LEDstate() {
//连接情况 用led灯的状态显示
a = 0;
for (int i = 0; serverClients[i].connected(); i++) {
a = 1;
}
if (a == 0) {
digitalWrite(16, HIGH);
delay(500);
digitalWrite(16, LOW);
delay(500);
// Serial.println("no");
} else {
digitalWrite(16, LOW);
}
}
//检测新的client
void NewClient() {
//检测是否有新的client请求进来
if (server.hasClient()) {
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
//释放旧无效或者断开的client
if (!serverClients[i] || !serverClients[i].connected()) {
if (serverClients[i]) {
serverClients[i].stop();
}
//分配最新的client
serverClients[i] = server.available();
//Serial.print("New client: ");
//Serial.print(i);
break;
}
}
//当达到最大连接数 无法释放无效的client,需要拒绝连接
if (i == MAX_SRV_CLIENTS) {
WiFiClient serverClient = server.available();
serverClient.stop();
digitalWrite(2, LOW);
// Serial.println("Connection rejected ");
}else{
digitalWrite(2, HIGH);
}
}
}
//把收到的客户端数据发送到串口
void ReceiveData() {
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
if (serverClients[i] && serverClients[i].connected()) {
while (serverClients[i].available())
{
char data = serverClients[i].read();
Serial.println(data);
switch (data) {
case 'A':
digitalWrite(14, LOW);//输出低电平
break;
case 'B':
digitalWrite(14, LOW);//输出低电平
break;
case 'C':
digitalWrite(14, LOW);//输出低电平
break;
case 'D':
digitalWrite(14, LOW);//输出低电平
break;
case 'X':
digitalWrite(14, HIGH);//输出高电平
break;
}
}
}
}
}
//把串口数据发送到客户端
//void SendData() {
// if (Serial.available()) { //串口读取到的转发到wifi,因为串口是一位一位的发送所以在这里缓存完再发送
// size_t counti = Serial.available();
// uint8_t sbuf[counti];
// Serial.readBytes(sbuf, counti);
// //Serial.write(sbuf, counti);
// //将数据发送给客户端
// for (i = 0; i < MAX_SRV_CLIENTS; i++) {
// if (serverClients[i] && serverClients[i].connected()) {
// serverClients[i].write(sbuf, counti);
// delay(200);
// }
// }
// } else {
// for (i = 0; i < MAX_SRV_CLIENTS; i++) {
// //释放旧无效或者断开的client
// if (serverClients[i].connected()) {
// //serverClients[i].println("not data");
// delay(500);
// }
// }
// }
//}
分拣计数
#include <ESP8266WiFi.h>
#define MAX_SRV_CLIENTS 5 //最大同时联接数,即你想要接入的设备数量,8266tcpserver只能接入五个,哎
const char *ssid = "iCloud_TP"; ////这里是我的wifi,你使用时修改为你要连接的wifi ssid
const char *password = "icloud_TP"; //你要连接的wifi密码
IPAddress local_IP(192, 168, 1, 192);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
int infrared=0;
int a;
int i = 0;
WiFiServer server(8092);//你要的端口号,随意修改,范围0-65535
WiFiClient serverClients[MAX_SRV_CLIENTS];
void setup()
{
Serial.begin(9600);
delay(10);
pinMode(16, OUTPUT);
pinMode(5, INPUT_PULLUP);// D1
pinMode(4, INPUT_PULLUP);// D2
pinMode(0, INPUT);// D3
pinMode(2, INPUT);// D4
pinMode(14, INPUT_PULLUP);// D5
pinMode(12, INPUT_PULLUP);// D6
pinMode(13, INPUT_PULLUP);// D7
pinMode(15, INPUT_PULLUP);// D8
digitalWrite(16, 0);
WiFi.config(local_IP, gateway, subnet);//192.168.0.200
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
server.begin();
server.setNoDelay(true); //加上后才正常些
}
void loop()
{
blink();
uint8_t i;
if (server.hasClient())
{
for (i = 0; i < MAX_SRV_CLIENTS; i++)
{
if (!serverClients[i] || !serverClients[i].connected())
{
if (serverClients[i]) serverClients[i].stop();//未联接,就释放
serverClients[i] = server.available();//分配新的
continue;
}
}
WiFiClient serverClient = server.available();
serverClient.stop();
}
for (i = 0; i < MAX_SRV_CLIENTS; i++)
{
if (serverClients[i] && serverClients[i].connected())
{
digitalWrite(16, 0);//有链接存在,就一直长亮
if (serverClients[i].available())
{
while (serverClients[i].available())
Serial.write(serverClients[i].read());
}
}
}
if (Serial.available())
{
size_t len = Serial.available();
uint8_t sbuf[len];
Serial.readBytes(sbuf, len);
//push UART data to all connected telnet clients
for (i = 0; i < MAX_SRV_CLIENTS; i++)
{
if (serverClients[i] && serverClients[i].connected())
{
serverClients[i].write(sbuf, len); //向所有客户端发送数据
delay(1);
}
}
}
for(i=0;i<4;i++){
Readinfrared(i);
}
}
void blink()
{
static long previousMillis = 0;
static int currstate = 0;
if (millis() - previousMillis > 200) //200ms
{
previousMillis = millis();
currstate = 1 - currstate;
digitalWrite(16, currstate);
}
}
void Readinfrared(int ir){
switch(ir){
case 0:
ir=14;break;
case 1:
ir=12;break;
case 2:
ir=13;break;
case 3:
ir=4;break;
}
//获取信号
infrared=digitalRead(ir);
// Serial.println(infrared);
for (i = 0; i < MAX_SRV_CLIENTS; i++) {
if (serverClients[i] && serverClients[i].connected()) {
switch(ir){
case 14:
if(infrared == 0){
serverClients[i].println("a,"+String(infrared));
}
delay(300);
break;
case 12:
if(infrared == 0){
serverClients[i].println("b,"+String(infrared));
}
delay(300);
break;
case 13:
if(infrared == 0){
serverClients[i].println("c,"+String(infrared));
}
delay(300);
break;
case 4:
if(infrared == 0){
serverClients[i].println("d,"+String(infrared));
}
delay(300);
break;
}
}
}
}

浙公网安备 33010602011771号