#include <IRSendRev.h>
// 红外接收
#define BIT_LEN 0
#define BIT_START_H 1
#define BIT_START_L 2
#define BIT_DATA_H 3
#define BIT_DATA_L 4
#define BIT_DATA_LEN 5
#define BIT_DATA 6
// 红外端口
const int pinRecv = 2; // ir receiver connect to D2
// 继电器开关 端口
const int pinRelay = 3;
// unity 自动读取串口
String comdata = ""; // 接收Unity 发送过来的消息
bool isMatched = false;
// 是否可以接收红外信号
bool CanRecv = false;
void setup()
{
Serial.begin(9600);
IR.Init(pinRecv);
pinMode(pinRelay, OUTPUT);
digitalWrite(pinRelay, LOW);
}
unsigned char dta[20];
void loop()
{
serialEvent();
if (!isMatched) {
// 发送消息给Untiy 前面最好加个空格
Serial.println("A");
}
// // 跟Unity 已经配对
if (isMatched)
{
}
// 是否可以接收红外信号 默认不可以
if (CanRecv) {
if (IR.IsDta()) // get IR data
{
IR.Recv(dta); // receive data to dta
//Serial.print(dta[9]);
if (dta[9] == 93) {
// 告诉Unity 可以开始游戏了
Serial.println("StartGame");
CanRecv = false;
}
}
}
}
// uniyt 自动匹配
void serialEvent()
{
while (Serial.available()) //检测数据,如果没有数据返回0://arduino.cc/en/Serial/Available
{
char inChar = (char)Serial.read();
comdata += inChar;
delay(50);
}
if (comdata.length() > 0) {
//Serial.println(comdata);
// 接收到 unity 发送过来的1,说明游戏结束,玩家可以重新开始游戏了
if (comdata == "U")
{
// 出货成功之后重置参数下一次继续
isMatched = true;
Serial.println("M");
}
// 接收到 unity 发送过来的 告诉单片机可以接收信号了
if (comdata == "start")
{
CanRecv = true;
}
// 接收 Untiy 开始转动电机指令
if (comdata == "Rotate")
{
digitalWrite(pinRelay, HIGH);
}
// 接收 Untiy 停止转动电机指令
if (comdata == "Stop")
{
digitalWrite(pinRelay, LOW);
}
}
comdata = "";
}
// 红外接收信号的详细信息
void IRData() {
Serial.println("+------------------------------------------------------+");
Serial.print("LEN = ");
Serial.println(dta[BIT_LEN]);
Serial.print("START_H: ");
Serial.print(dta[BIT_START_H]);
Serial.print("\tSTART_L: ");
Serial.println(dta[BIT_START_L]);
Serial.print("DATA_H: ");
Serial.print(dta[BIT_DATA_H]);
Serial.print("\tDATA_L: ");
Serial.println(dta[BIT_DATA_L]);
Serial.print("\r\nDATA_LEN = ");
Serial.println(dta[BIT_DATA_LEN]);
Serial.print("DATA: ");
for (int i = 0; i < dta[BIT_DATA_LEN]; i++)
{
Serial.print("0x");
Serial.print(dta[i + BIT_DATA], HEX);
Serial.print("\t");
}
Serial.println();
Serial.print("DATA: ");
for (int i = 0; i < dta[BIT_DATA_LEN]; i++)
{
Serial.print(dta[i + BIT_DATA], DEC);
Serial.print("\t");
}
Serial.println();
Serial.println("+------------------------------------------------------+\r\n\r\n");
}