diff --git a/config.ini b/config.ini index da29dee..6503517 100644 --- a/config.ini +++ b/config.ini @@ -22,7 +22,8 @@ build_flags = -D STEPER_ACC=200 ;-D STEPER_PAS=755.906 ; = 65mm -D STEPER_PAS=58 ; = 5mm - -D STEPER_SPEED=1000 ; 12000 + -D STEPER_SPEED=2700 ;1000 ; 2500 + -D GRBL_UPDATE=165 ;update time in ms ;;;;;;;;;;;;;;;;;;;;;; ;;; App config ;;; ;;;;;;;;;;;;;;;;;;;;;; @@ -33,7 +34,10 @@ build_flags = ;;;;;;;;;;;;;;;;;;;;;; ;;; Servo config ;;; ;;;;;;;;;;;;;;;;;;;;;; - -D RIGHT_POS=18 - -D MIDDLE_POS=32 + -D RIGHT_POS=14 ;18 + -D MIDDLE_POS=30 ;32 -D LEFT_POS=52 - -D CONVOYER_LEN=150 ;mm + + + + -D CONVOYER_LEN=80 ;mm diff --git a/include/Program.h b/include/Program.h index 4d632c5..ce4f803 100644 --- a/include/Program.h +++ b/include/Program.h @@ -6,6 +6,7 @@ #include "ServoMotorComponent.h" #include "NfcReader.h" #include "GRBL.h" +#include "BigNfcReader.h" class Program { public: @@ -26,6 +27,8 @@ private: ServoMotorComponent *servo; NfcReader *nfcReader; GRBL *grbl; + BigNfcReader* outputReader; + int grblUpdateTime; }; #endif diff --git a/lib/NfcReader/include/BigNfcReader.h b/lib/NfcReader/include/BigNfcReader.h new file mode 100644 index 0000000..287ecee --- /dev/null +++ b/lib/NfcReader/include/BigNfcReader.h @@ -0,0 +1,67 @@ +#ifndef BIG_NFC_READER_H +#define BIG_NFC_READER_H + +#include +#include + +#include "TrameList.h" + +class BigNfcReader{ +public: + BigNfcReader(); + + /** + * @brief initialise le lecteur NFC + * + * @return true le lecteur NFC est initialisé + * @return false le lecteur NFC n'est pas initialisé (erreur) + */ + bool init(); + + /** + * @brief rafraichit les données du lecteur NFC + * + */ + void refresh(); + + /** + * @brief affiche la dernière trame lue + * + */ + void printTrame(); + + /** + * @brief retourne le nombre de tags lus + * + * @return int nombre de tags lus + */ + int getNbTags(); + +private: + + /** + * @brief convertit un nombre en hexadécimal (a 2 chiffres) + * + * @param number nombre à convertir + * @return String nombre converti + */ + String digitify(int number); + + /** + * @brief variable pair/impair pour le type de trame + * + */ + bool pair; + + /** + * @brief dernière trame lue + * + */ + std::vector* trame; + +}; + + + + +#endif diff --git a/lib/NfcReader/include/TrameList.h b/lib/NfcReader/include/TrameList.h new file mode 100644 index 0000000..9e412ae --- /dev/null +++ b/lib/NfcReader/include/TrameList.h @@ -0,0 +1,29 @@ +#ifndef TRAM_LIST_H +#define TRAM_LIST_H + +#include +#include + +const std::vector SEARCH_TRAM_0 = {0x05, 0x07, 0x01, 0x01, 0x01, 0x00, 0xEB, 0x5F}; + +const std::vector INIT_TRAM_0 = {0xFA, 0x05, 0x01, 0xC0, 0x5A, 0xDF}; +const std::vector INIT_TRAM_1 = {0xFA, 0x08, 0x01, 0x00, 0x01, 0x01, 0x01, 0xE1, 0x70}; +const std::vector INIT_TRAM_2 = {0xFA, 0x08, 0x01, 0x40, 0x01, 0x02, 0x01, 0x3E, 0x4C}; +const std::vector INIT_TRAM_3 = {0xFA, 0x08, 0x01, 0x00, 0x01, 0x03, 0x01, 0x51, 0x43}; +const std::vector INIT_TRAM_4 = {0xFA, 0x08, 0x01, 0x40, 0x01, 0x04, 0x01, 0xEE, 0x18}; +const std::vector INIT_TRAM_5 = {0xFA, 0x08, 0x01, 0x00, 0x01, 0x05, 0x01, 0x81, 0x17}; +const std::vector INIT_TRAM_6 = {0xFA, 0x08, 0x01, 0x40, 0x01, 0x06, 0x01, 0x5E, 0x2B}; +const std::vector INIT_TRAM_7 = {0xFA, 0x08, 0x01, 0x00, 0x01, 0x07, 0x01, 0x31, 0x24}; + +const std::vector REP_TRAM_0 = {0xFA, 0x05, 0x01, 0xE0, 0x58, 0xFE}; +const std::vector REP_TRAM_1 = {0xFA, 0x17, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x04, 0x00, 0x00, 0x03, 0x01, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x8A}; +const std::vector REP_TRAM_2 = {0xFA, 0x17, 0x01, 0x40, 0x01, 0x00, 0x00, 0x01, 0x00, 0x09, 0x00, 0xFF, 0x00, 0x10, 0x07, 0x13, 0x01, 0x0E, 0x08, 0x09, 0x0B, 0x00, 0x2D, 0x98}; +const std::vector REP_TRAM_3 = {0xFA, 0x17, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xE8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x43, 0x83, 0x00, 0x00, 0x00, 0x9A, 0xBF}; +const std::vector REP_TRAM_4 = {0xFA, 0x17, 0x01, 0x40, 0x01, 0x00, 0x00, 0x01, 0x04, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x15}; +const std::vector REP_TRAM_5 = {0xFA, 0x17, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0A, 0x03, 0x0A, 0x00, 0xF6, 0xCD}; +const std::vector REP_TRAM_6 = {0xFA, 0x17, 0x01, 0x40, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xD4, 0x03}; +const std::vector REP_TRAM_7 = {0xFA, 0x17, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xF6}; + +const std::vector READ_TRAM_0 = {0xFA, 0x24, 0x01, 0x00, 0x31, 0x02, 0x07, 0x0E, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0xFF, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x5D, 0x74}; +const std::vector READ_TRAM_1 = {0xFA, 0x24, 0x01, 0x40, 0x31, 0x02, 0x07, 0x0E, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0xFF, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x10, 0x45}; +#endif diff --git a/lib/NfcReader/src/BigNfcReader.cpp b/lib/NfcReader/src/BigNfcReader.cpp new file mode 100644 index 0000000..abbbf7c --- /dev/null +++ b/lib/NfcReader/src/BigNfcReader.cpp @@ -0,0 +1,75 @@ +#include "../include/BigNfcReader.h" + + +BigNfcReader::BigNfcReader(){ + Serial2.begin(115200, SERIAL_8N1, 16, 17);//TODO: mettre le port série en paramètre + this->pair = true; + this->trame = new std::vector(); +} + + +bool BigNfcReader::init(){ + const std::vector> INIT_TRAMES = {INIT_TRAM_0, INIT_TRAM_1, INIT_TRAM_2, INIT_TRAM_3, INIT_TRAM_4, INIT_TRAM_5, INIT_TRAM_6, INIT_TRAM_7}; + const std::vector> REP_TRAMES = {REP_TRAM_0, REP_TRAM_1, REP_TRAM_2, REP_TRAM_3, REP_TRAM_4, REP_TRAM_5, REP_TRAM_6, REP_TRAM_7}; + int repnb = 0; + for(std::vector i: INIT_TRAMES){ + for(byte j: i){ + Serial2.write(j); + } + while (Serial2.available() == 0); + while (Serial2.available() > 0){ + for(byte j: REP_TRAMES[repnb]){ + if(Serial2.read() != j){ + Serial.println("NFC reader init failed"); + return false; + } + } + } + repnb++; + } + return true; +} + +void BigNfcReader::refresh(){ + this->trame->clear(); + std::vector trame = READ_TRAM_0; + if (this->pair){ + trame = READ_TRAM_1; + } + this->pair = !this->pair; + + for(byte i: trame){ + Serial2.write(i); + } + while (Serial2.available() == 0); + while (Serial2.available() > 0){ + this->trame->push_back(Serial2.read()); + } +} + + +String BigNfcReader::digitify(int number){ + String sortie = ""; + + if(number <= 0xF){ + sortie += '0'; + sortie += String(number,HEX); + }else{ + sortie += String(number,HEX); + } + + return sortie; +} + + +void BigNfcReader::printTrame(){ + for(byte i: *this->trame){ + Serial.print(this->digitify(i)); + Serial.print(" "); + } + Serial.println(); +} + +int BigNfcReader::getNbTags(){ + return this->trame->at(8); +} diff --git a/src/Program.cpp b/src/Program.cpp index 531af4e..0067723 100644 --- a/src/Program.cpp +++ b/src/Program.cpp @@ -78,7 +78,11 @@ Program::Program() { lcdScreen->add_log("Initialize M5LCD component...."); this->nfcReader = new NfcReader(NFC_ADDR); this->servo = new ServoMotorComponent(2, 1, 1); + this->servo->setDesiredPosition(Position::MIDDLE); this->grbl = new GRBL(STEPMOTOR_I2C_ADDR); + this->outputReader = new BigNfcReader(); + this->outputReader->init(); + this->grblUpdateTime = 0; Wire.begin(21, 22); grbl->init(STEPER_SPEED, STEPER_PAS, STEPER_ACC); struct WifiConfig wifi_c = {WIFI_SSID, WIFI_PASSWORD}; @@ -96,6 +100,13 @@ void Program::loop() { derniereExecution = maintenant; } this->servo->refresh(); + this->outputReader->refresh(); + // Serial.println(this->outputReader->getNbTags()); + + if(this->outputReader->getNbTags() >= 2){ + lcdScreen->set_nfc_message("To mutch colis number detected"); + return; + } String nfcId = this->nfcReader->ReadNfc(); //si qqc @@ -152,8 +163,10 @@ void Program::loop() { } this->grbl->mouveForward(CONVOYER_LEN); } else { - if(this->grbl->isIddle()){ + if(this->grbl->isIddle() || (maintenant - this->grblUpdateTime >= GRBL_UPDATE)){ + this->grblUpdateTime = maintenant; this->grbl->mouveForward(5); + Serial.print("pouet"); } } -} \ No newline at end of file +}