#include <TimerOne.h>
#include <TimerThree.h>
// define arduino pin
#define RDATA1 22
#define RSCK 23
#define RDATA 24
#define RCS 25
#define Led1 26
#define Led2 27
#define Led3 28
#define RstMCP 29
bool flick;
bool ledState;
int m_iCount;
int m_icountSend;
int m_icountSendnumber;
bool m_bstartProtect;
String dataTemp;
String m_RFID;
String datarecive;
bool m_bInc;
bool b_enableSend;
unsigned long previousMillis = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(19200);
Serial2.begin(19200);// TO BOARD
Serial1.begin(38400);
Serial3.begin(38400);
InitIO();
// Inital timer for update infomation
//--- time 100ms to check and send data
Timer1.initialize(200000); //100ms
Timer1.attachInterrupt(UpdateValue);
//---time 3s to check protect action---
Timer3.initialize(3000000); //3s
Timer3.attachInterrupt(ProtectAction);
}
void loop() {
// put your main code here, to run repeatedly:
//--- read serial 0 and 1
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 100) {
previousMillis = currentMillis;
CountProtect(); // count pulse from software
}
Serial0Read(); // to AGV
Serial2Read(); // to AGV
Serial1Read(); // RFID reader
Serial3Read(); // RFID reader
}
void InitIO()
{
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
pinMode(RstMCP, OUTPUT);
pinMode(RDATA1, INPUT);
digitalWrite(RstMCP, true);
}
void UpdateValue()
{
LedState();
SendRFIDtoAGV();
}
void SendRFIDtoAGV()
{
if (!b_enableSend) return;
m_icountSend ++;
if (m_icountSend > 2) {
m_icountSend = 0;
m_icountSendnumber ++;
SerialSend(m_RFID);// SEND TO BOARD SERIAL 2
//Serial.println(m_RFID);
if(m_icountSendnumber >20){
b_enableSend = false;
m_RFID = "";
m_icountSend = 0;
m_icountSendnumber=0;
}
}
}
void Serial0Read() // Recieve Data from AGV
{
//Serial.println("hehe");
if (Serial.available()) {
byte inByte = Serial.read();
//Serial.write(inByte);
if (inByte == 0x02) {
//Serial.println("bat dau");
datarecive = "";
}
else if (inByte == 0x03) {
//Serial.println(dataTemp.length());
//Serial.println(datarecive);
if (datarecive = m_RFID) {
b_enableSend = false;
m_RFID = "";
m_icountSend = 0;
}
if (datarecive = "RST") {
b_enableSend = false;
m_RFID = "";
m_icountSend = 0;
}
}
else
datarecive += (char)inByte;
}
}
void Serial2Read() // Recieve Data from AGV
{
//Serial.println("hehe");
if (Serial2.available()) {
byte inByte = Serial2.read();
//Serial.write(inByte);
if (inByte == 0x02) {
//Serial.println("bat dau");
datarecive = "";
}
else if (inByte == 0x03) {
//Serial.println(dataTemp.length());
//Serial.println(datarecive);
if (datarecive = m_RFID) {
b_enableSend = false;
m_RFID = "";
m_icountSend = 0;
}
if (datarecive = "RST") {
b_enableSend = false;
m_RFID = "";
m_icountSend = 0;
}
}
else
datarecive += (char)inByte;
}
}
void LedState()
{
//------- flick lamp to show arduino work----
if (flick) {
flick = false;
digitalWrite(Led1, true);
digitalWrite(Led2, false);
ledState = true;
}
else {
flick = true;
digitalWrite(Led1, false);
digitalWrite(Led2, true);
ledState = false;
}
//------led protect flick when software on-------
// ----- led off when soft ware off-------------
if (m_bstartProtect) {
digitalWrite(Led3, ledState);
}
else
{
digitalWrite(Led3, true);
}
}
////////////////////////////////
////// Read from RFID
////////////////////////////////
void Serial1Read()
{
//Serial.println("hehe");
if (Serial1.available()) {
byte inByte = Serial1.read();
//Serial.write(inByte);
if (inByte == 0xAA) {
//Serial.println("bat dau");
dataTemp = "";
}
else if (inByte == 0xBB) {
//Serial.println(dataTemp.length());
if (dataTemp.length() == 4) {
if (dataTemp == m_RFID) {
return;
}
m_RFID = dataTemp;
b_enableSend = true;
m_icountSendnumber=0;
//Serial.println(m_RFID);
}
}
else
dataTemp += (char)inByte;
}
}
////////////////////////////////
////// Read RFID
////////////////////////////////
void Serial3Read()
{
//Serial.println("hehe");
if (Serial3.available()) {
byte inByte = Serial3.read();
//Serial.write(inByte);
if (inByte == 0xAA) {
//Serial.println("bat dau");
dataTemp = "";
}
else if (inByte == 0xBB) {
//Serial.println(dataTemp.length());
if (dataTemp.length() == 4) {
if (dataTemp == m_RFID) {
//Serial.println("trung roi");
return;
}
m_RFID = dataTemp;
b_enableSend = true;
m_icountSendnumber=0;
//Serial.println(m_RFID);
}
}
else
dataTemp += (char)inByte;
}
}
void SerialSend(String str)
{
Serial2.write(2);
Serial2.print(str);
Serial2.write(3);
}
void CountProtect()
{
if (digitalRead(RDATA1) && !m_bInc) {
m_bInc = true;
m_iCount ++;
}
if (!digitalRead(RDATA1)) {
m_bInc = false;
}
}
void ProtectAction()
{
// off mcp23017 during 3s and then turn on again----
if (!m_bstartProtect)
// on output when stop during 3s
digitalWrite(RstMCP, true);
//--- off all output when didn't recieve pulse-----
if (m_bstartProtect && m_iCount < 3 ) {
// off output all-----------------
m_bstartProtect = false;
digitalWrite(RstMCP, false);
}
if (!m_bstartProtect && m_iCount >= 3 ) {
//--- start protect---
//---- enable protect action---
m_bstartProtect = true;
}
m_iCount = 0;
}
"Hành trình vạn dặm bắt đầu từ những bước đi đầu tiên"
せんりのみちもいっぽからJan 6, 2020
Chương trinh bảo vệ
Kết nối bạn bè
Wikipedia
Search results
Thông tin Update
Tin tức
-
-
-
TAI LIEU THUC HANH CAM BIEN11 years ago
Video Nổi bật
Video tổng hợp
0 Post a Comment:
Post a Comment
Cảm ơn bạn đã chia sẻ ý kiến!
Chúc bạn có một ngày thật vui vẻ.