|
|
#include "Handler.h"
|
|
|
|
|
|
void Handler::ZigBeeRx_Handler(uint8_t* mar)
|
|
|
{
|
|
|
CommandDecoder decoder(mar);
|
|
|
switch (decoder.GetDevice())
|
|
|
{
|
|
|
case CommandData::Devices::MainCar: //主车
|
|
|
MainCarRx_Handler(mar); //主车命令相应函数
|
|
|
break;
|
|
|
case CommandData::Devices::Barrier: //道闸标志物
|
|
|
DataTool::PrintDataArray(mar, 8);
|
|
|
break;
|
|
|
case CommandData::Devices::LED_Display: //LED显示标志物(暂无返回)
|
|
|
break;
|
|
|
case CommandData::Devices::Garage_B: //立体车库标志物B
|
|
|
{
|
|
|
GarageCommand cmd;
|
|
|
if (cmd.IsPositionData(mar))
|
|
|
{
|
|
|
Serial.print("Garage at: ");
|
|
|
Serial.println(cmd.CurrentPos(mar));
|
|
|
}
|
|
|
if (cmd.IsIRData(mar))
|
|
|
{
|
|
|
Serial.print("Front IR: ");
|
|
|
Serial.println(cmd.FrontIRTiggered(mar) ? "Triggered" : "Not Triggered");
|
|
|
Serial.print("Back IR: ");
|
|
|
Serial.println(cmd.BackIRTiggered(mar) ? "Triggered" : "Not Triggered");
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
case CommandData::Devices::VoiceReport: //语音播报标志物
|
|
|
{
|
|
|
VoiceReportCommand cmd;
|
|
|
uint16_t y;
|
|
|
byte m, d, h, mm, s;
|
|
|
if (cmd.ReadRTCDate(mar, y, m, d))
|
|
|
{
|
|
|
Serial.print(y);
|
|
|
Serial.print("-");
|
|
|
Serial.print(m);
|
|
|
Serial.print("-");
|
|
|
Serial.println(d);
|
|
|
}
|
|
|
else
|
|
|
Serial.println("Invalidate Date");
|
|
|
if (cmd.ReadRTCTime(mar, h, mm, s))
|
|
|
{
|
|
|
Serial.print(h);
|
|
|
Serial.print(":");
|
|
|
Serial.print(mm);
|
|
|
Serial.print(":");
|
|
|
Serial.println(s);
|
|
|
}
|
|
|
else
|
|
|
Serial.println("Invalidate Time");
|
|
|
break;
|
|
|
}
|
|
|
case CommandData::Devices::AlarmTower: //红外报警标志物
|
|
|
{
|
|
|
AlarmTowerCommand cmd;
|
|
|
if (cmd.IsAlarmTowerCommand(mar))
|
|
|
{
|
|
|
Serial.print("Rescue Position: ");
|
|
|
Serial.println(cmd.ReadRescuePosition(mar), HEX);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
case CommandData::Devices::TFT_B: //TFT显示标志物B
|
|
|
break;
|
|
|
case CommandData::Devices::WirelessCharger: //磁悬浮无线充电标志物
|
|
|
break;
|
|
|
case CommandData::Devices::TFT_A: //TFT显示标志物A
|
|
|
break;
|
|
|
case CommandData::Devices::ETC: //ETC系统标志物
|
|
|
break;
|
|
|
case CommandData::Devices::Garage_A: //立体车库标志物A
|
|
|
break;
|
|
|
case CommandData::Devices::TrafficLight_A: //交通灯标注物A
|
|
|
{
|
|
|
TrafficLightCommand cmd;
|
|
|
if (cmd.ModeChangeSuccess(mar))
|
|
|
Serial.println("Enter Identify Mode");
|
|
|
else
|
|
|
Serial.println("Mode Change Failure");
|
|
|
break;
|
|
|
}
|
|
|
case CommandData::Devices::TrafficLight_B: //交通灯标志物B
|
|
|
break;
|
|
|
case CommandData::Devices::SpecTerrain:
|
|
|
{
|
|
|
SpecTerrainCommand cmd;
|
|
|
if(cmd.IsSpecTerrainCommand(mar))
|
|
|
{
|
|
|
switch (cmd.ReadStatus(mar))
|
|
|
{
|
|
|
case SpecTerrainCommand::Status::Passed_AtoB:
|
|
|
case SpecTerrainCommand::Status::Passed_BtoA:
|
|
|
Serial.println("Passed");
|
|
|
break;
|
|
|
case SpecTerrainCommand::Status::NotPass:
|
|
|
Serial.println("Not Pass");
|
|
|
break;
|
|
|
default:
|
|
|
Serial.println("Data Invalidate");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
Serial.println("Command Invalidate");
|
|
|
break;
|
|
|
}
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void Handler::OpenMVRx_Handler(uint8_t* mac)
|
|
|
{
|
|
|
switch (mac[2])
|
|
|
{
|
|
|
case 0x91: //保留
|
|
|
|
|
|
break;
|
|
|
case 0x92: //二维码识别
|
|
|
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void Handler::MainCarRx_Handler(uint8_t* com)
|
|
|
{
|
|
|
switch (com[2])
|
|
|
{
|
|
|
case 0x01: //停止
|
|
|
//DCMotor.Stop();
|
|
|
AccurateMotor.ForceStop();
|
|
|
break;
|
|
|
case 0x02: //前进
|
|
|
//DCMotor.Go(com[3], (com[4] + (com[5] << 8)));
|
|
|
AccurateMotor.RunForward((com[4] + (com[5] << 8)));
|
|
|
ZigBee_back[2] = 0x03;
|
|
|
break;
|
|
|
case 0x03: //后退
|
|
|
//DCMotor.Back(com[3], (com[4] + (com[5] << 8)));
|
|
|
AccurateMotor.RunBackward((com[4] + (com[5] << 8)));
|
|
|
ZigBee_back[2] = 0x03;
|
|
|
break;
|
|
|
case 0x04: //左转
|
|
|
//DCMotor.TurnLeft(com[3]);
|
|
|
AccurateMotor.TurnLeft(com[3]);
|
|
|
ZigBee_back[2] = 0x02;
|
|
|
break;
|
|
|
case 0x05: //右转
|
|
|
//DCMotor.TurnRight(com[3]);
|
|
|
AccurateMotor.TurnRight(com[3]);
|
|
|
ZigBee_back[2] = 0x02;
|
|
|
break;
|
|
|
case 0x06: //循迹
|
|
|
//DCMotor.CarTrack(com[3]);
|
|
|
ZigBee_back[2] = 0x00;
|
|
|
break;
|
|
|
case 0x07: //码盘清零
|
|
|
Command.Judgment(Command.command01); //计算校验和
|
|
|
ExtSRAMInterface.ExMem_Write_Bytes(Command.command01, 8); //码盘清零
|
|
|
break;
|
|
|
case 0x10: //保存红外数据
|
|
|
infrare_com[0] = com[3];
|
|
|
infrare_com[1] = com[4];
|
|
|
infrare_com[2] = com[5];
|
|
|
break;
|
|
|
case 0x11: //保存红外数据
|
|
|
infrare_com[3] = com[3];
|
|
|
infrare_com[4] = com[4];
|
|
|
infrare_com[5] = com[5];
|
|
|
break;
|
|
|
case 0x12: //发送红外数据
|
|
|
Infrare.Transmition(infrare_com, 6);
|
|
|
break;
|
|
|
case 0x20: //左右转向灯
|
|
|
if (com[3] == 0x01)
|
|
|
LED.LeftTurnOn();
|
|
|
else
|
|
|
LED.LeftTurnOff();
|
|
|
if (com[4] == 0x01)
|
|
|
LED.RightTurnOn();
|
|
|
else
|
|
|
LED.RightTurnOff();
|
|
|
break;
|
|
|
case 0x30: //蜂鸣器
|
|
|
if (com[3] == 0x01)
|
|
|
BEEP.TurnOn();
|
|
|
else
|
|
|
BEEP.TurnOff();
|
|
|
break;
|
|
|
case 0x40: //保留
|
|
|
break;
|
|
|
case 0x50: //LCD图片上翻页
|
|
|
Command.Judgment(Command.command13);
|
|
|
ExtSRAMInterface.ExMem_Write_Bytes(Command.command13, 8);
|
|
|
break;
|
|
|
case 0x51: //LCD图片下翻页
|
|
|
Command.Judgment(Command.command14);
|
|
|
ExtSRAMInterface.ExMem_Write_Bytes(Command.command14, 8);
|
|
|
break;
|
|
|
case 0x61: //光源加一档
|
|
|
Infrare.Transmition(Command.HW_Dimming1, 4);
|
|
|
break;
|
|
|
case 0x62: //光源加二挡
|
|
|
Infrare.Transmition(Command.HW_Dimming2, 4);
|
|
|
break;
|
|
|
case 0x63: //光源加三挡
|
|
|
Infrare.Transmition(Command.HW_Dimming3, 4);
|
|
|
break;
|
|
|
case 0x80: //从车返回数据切换
|
|
|
if (com[3] == 0x01)
|
|
|
{
|
|
|
sendflag = 0x01; //上传从车数据
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
sendflag = 0x00; //关闭上从车数据
|
|
|
}
|
|
|
case 0x91:
|
|
|
if (com[3] == 0x03) //舵机控制
|
|
|
{
|
|
|
//Servoangle_control(com[4]);
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void Handler::Key_0()
|
|
|
{
|
|
|
OpenMVOpt::Servo_Control(-60);
|
|
|
OpenMVOpt::OpenMV_Track(1);
|
|
|
}
|
|
|
|
|
|
void Handler::Key_1()
|
|
|
{
|
|
|
_3DDisplayCommand cmd;
|
|
|
Infrare.Transmition(cmd.CMD_IR_DisplayAlarmSign(_3DDisplayCommand::AlarmSign::NoDrinkDrive), 6);
|
|
|
}
|
|
|
|
|
|
void Handler::Key_2()
|
|
|
{
|
|
|
_3DDisplayCommand cmd;
|
|
|
Infrare.Transmition(cmd.CMD_IR_SetTextColor(0x00, 0xFF, 0x00), 6);
|
|
|
}
|
|
|
|
|
|
void Handler::Key_3()
|
|
|
{
|
|
|
_3DDisplayCommand cmd;
|
|
|
TextEncoder encoder("主车不动安如山,从车乱飞墙撞翻。");
|
|
|
while(encoder.HasNextChar())
|
|
|
{
|
|
|
byte b1, b2;
|
|
|
encoder.GetNextChar(b1, b2);
|
|
|
ZigBeeOperator.SendCommand(cmd.CMD_ZIGBEE_CustomTextAdd(b1, b2, encoder.IsLastChar()));
|
|
|
delay(200);
|
|
|
}
|
|
|
/*OpenMVOpt::Servo_Control(-60);
|
|
|
OpenMVOpt::OpenMV_Track(1);*/
|
|
|
}
|
|
|
|
|
|
void Handler::KEY_Handler(uint8_t k_value)
|
|
|
{
|
|
|
switch (k_value)
|
|
|
{
|
|
|
case 1:
|
|
|
Key_0();
|
|
|
break;
|
|
|
case 2:
|
|
|
Key_1();
|
|
|
break;
|
|
|
case 3:
|
|
|
Key_2();
|
|
|
break;
|
|
|
case 4:
|
|
|
Key_3();
|
|
|
break;
|
|
|
}
|
|
|
}
|