You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

288 lines
7.0 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
}
}