This is a remote control tester, it uses a CNC, Ethernet Communication with a JAVAFX interface and a PLC in order to control some valves.

Dependencies:   EthernetInterface mbed-rtos mbed

Fork of CNC_CONTROLLER by Lahis Almeida

Files at this revision

API Documentation at this revision

Comitter:
kevencastro7
Date:
Fri Dec 15 19:40:41 2017 +0000
Parent:
1:ef18c260ce02
Commit message:
This is a remote control tester, it uses a CNC, Ethernet Communication with a JAVAFX interface and a PLC in order to control some valves.

Changed in this revision

Clp.cpp Show annotated file Show diff for this revision Revisions of this file
Clp.h Show annotated file Show diff for this revision Revisions of this file
Cnc.cpp Show annotated file Show diff for this revision Revisions of this file
Cnc.h Show annotated file Show diff for this revision Revisions of this file
EixoController.cpp Show annotated file Show diff for this revision Revisions of this file
EixoController.h Show annotated file Show diff for this revision Revisions of this file
EixoMonitoring.cpp Show annotated file Show diff for this revision Revisions of this file
EixoMonitoring.h Show annotated file Show diff for this revision Revisions of this file
EthernetInterface.lib Show annotated file Show diff for this revision Revisions of this file
PCF8574.cpp Show annotated file Show diff for this revision Revisions of this file
PCF8574.h Show annotated file Show diff for this revision Revisions of this file
Stepp.cpp Show annotated file Show diff for this revision Revisions of this file
Stepp.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Clp.cpp	Fri Dec 15 19:40:41 2017 +0000
@@ -0,0 +1,39 @@
+#include "Clp.h"
+
+#define HIGH 1
+#define LOW 0
+#define DELAY 0.5
+
+
+Clp::Clp(PinName _receiverCnc,PinName _transmitterCnc,PinName _receiverElevator,PinName _transmitterElevatorEnable,PinName _transmitterElevatorSign){
+    receiverCnc = new DigitalIn(_receiverCnc);
+    transmitterCnc = new DigitalOut(_transmitterCnc);
+    receiverElevator = new DigitalIn(_receiverElevator);
+    transmitterElevatorEnable = new DigitalOut(_transmitterElevatorEnable);
+    transmitterElevatorSign = new DigitalOut(_transmitterElevatorSign);
+    
+}
+
+int Clp::ReceiveCnc(){
+	return receiverCnc->read();
+}
+
+void Clp::TransmitCnc(){
+	transmitterCnc->write(HIGH);
+	wait(DELAY);
+	transmitterCnc->write(LOW);
+}
+
+int Clp::ReceiveElevator(){
+	return receiverElevator->read();
+}
+
+void Clp::TransmitElevator(int signal){
+	transmitterElevatorSign->write(signal);
+	wait(DELAY);
+	transmitterElevatorEnable->write(HIGH);
+	wait(DELAY);
+	transmitterElevatorEnable->write(LOW);
+	transmitterElevatorSign->write(LOW);
+	
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Clp.h	Fri Dec 15 19:40:41 2017 +0000
@@ -0,0 +1,21 @@
+#ifndef CLP_H
+#define CLP_H
+#include "mbed.h"
+
+
+class Clp{
+    public:
+            Clp(PinName,PinName,PinName,PinName,PinName);
+			int ReceiveCnc();
+			void TransmitCnc();
+			int ReceiveElevator();
+			void TransmitElevator(int);
+		private:
+         DigitalIn *receiverCnc;
+         DigitalOut *transmitterCnc;
+         DigitalIn *receiverElevator;
+         DigitalOut *transmitterElevatorEnable;
+         DigitalOut *transmitterElevatorSign;
+
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cnc.cpp	Fri Dec 15 19:40:41 2017 +0000
@@ -0,0 +1,25 @@
+#include "Cnc.h"
+#define DELAY 0.075
+
+Cnc::Cnc(EixoController* eixoX, EixoController* eixoY, PinName pinValve, PCF8574* pcf, int sensorUp, int sensorDown) : eixoZ(pinValve) {
+    this->eixoX = eixoX;
+    this->eixoY = eixoY;
+    this->pcf = pcf;
+    this->sensorUp = sensorUp;
+    this->sensorDown = sensorDown;
+    debug = new Debug();      
+}
+
+void Cnc::goToPosition(float posX, int dirX, float posY, int dirY, bool enable){
+    eixoX->goToPosition(posX, dirX);
+    eixoY->goToPosition(posY, dirY);
+    /*if (enable){
+        while(!pcf->read(sensorDown))eixoZ = 1;
+        eixoZ = 0;
+    }*/
+        if (enable){
+        eixoZ = 1;
+        wait(DELAY);
+        eixoZ = 0;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Cnc.h	Fri Dec 15 19:40:41 2017 +0000
@@ -0,0 +1,27 @@
+#ifndef CNC_H
+#define CNC_H
+
+#include "mbed.h"
+#include "Debug.h"
+#include "Stepp.h"
+#include "EixoController.h"
+#include "EixoMonitoring.h" 
+#include "PCF8574.h"
+
+class Cnc{
+
+    public:
+                Cnc(EixoController*, EixoController*, PinName,PCF8574*,int,int );
+                void goToPosition(float, int, float, int , bool);   
+                
+    private:    
+                PCF8574* pcf;
+                int sensorUp;
+                int sensorDown;
+                EixoController* eixoX;
+                EixoController* eixoY;
+                DigitalOut eixoZ;
+                Debug*       debug;
+};
+
+#endif
--- a/EixoController.cpp	Mon Sep 18 13:05:47 2017 +0000
+++ b/EixoController.cpp	Fri Dec 15 19:40:41 2017 +0000
@@ -1,22 +1,23 @@
 #include "EixoController.h"
 
 
-EixoController::EixoController(float totalPathPulse, float totalPathCm, Stepp *motor, PinName pinOrigin, PinName pinEnd): swOrigin(pinOrigin), swEnd(pinEnd)  {
-     
+EixoController::EixoController(float totalPathPulse, float totalPathCm, Stepp *motor,PCF8574 *pcf, int swOrigin, int swEnd){
+     this->pcf = pcf;
      this->totalPathPulse = totalPathPulse;
      this->totalPathCm = totalPathCm;
      this->motor = motor;
-         
-         debug = new Debug();       
+     this->swOrigin = swOrigin;
+     this->swEnd = swEnd;
+     debug = new Debug();       
 }
 
 
-bool EixoController:: goToOrigem(DigitalIn swOrigem, int dirOrigem){   
-    if(swOrigem == 1){ // já está na origem ?   
+bool EixoController:: goToOrigem(int dirOrigem){   
+    if(this->pcf->read(this->swOrigin) == 1){ // já está na origem ?   
         return true;
     }
     else{ // vá para a origem
-        return motor->findLimits(30000, dirOrigem, swOrigem); 
+        return motor->findLimits(30000, dirOrigem, this->pcf,this->swOrigin); 
         
     }           
 }
--- a/EixoController.h	Mon Sep 18 13:05:47 2017 +0000
+++ b/EixoController.h	Fri Dec 15 19:40:41 2017 +0000
@@ -4,13 +4,15 @@
 #include "Debug.h"
 #include "Stepp.h"
 #include "mbed.h"
+#include "PCF8574.h"
+
 
 
 class EixoController{
 
     public:
-        EixoController(float, float, Stepp*, PinName, PinName );
-                bool goToOrigem(DigitalIn, int);
+        EixoController(float, float, Stepp*,PCF8574*, int, int );
+                bool goToOrigem(int);
                 void calibragem(int);
                 int conversao(int);
                 void goToPosition(int, int );   
@@ -19,8 +21,9 @@
                 int totalPathPulse;
                 int totalPathCm;    
                 
-                DigitalIn swOrigin;
-                DigitalIn swEnd;
+                PCF8574* pcf;
+                int swOrigin;
+                int swEnd;
                 Stepp*       motor ;
                 Debug*       debug;
 };
--- a/EixoMonitoring.cpp	Mon Sep 18 13:05:47 2017 +0000
+++ b/EixoMonitoring.cpp	Fri Dec 15 19:40:41 2017 +0000
@@ -4,17 +4,15 @@
 bool EixoMonitoring::isCalibrated   = false;
 
 
-EixoMonitoring::EixoMonitoring(PinName pinOrigin, PinName pinEnd) { 
-        
+EixoMonitoring::EixoMonitoring(PCF8574* pcf,int sensor_Origin, int sensor_End ) { 
+        this->pcf = pcf;
         this->stopMoviment   = false;
         this->stopMonitoring = false;
         this->delayTimer     = 700;
-        PinName pin_End      = pinEnd;
-        PinName pin_Origin = pinOrigin;
+        this->sensor_Origin = sensor_Origin;
+        this->sensor_End = sensor_End;
         
-        sensor_End          = new DigitalIn(pin_End);
         sensorInput_End = 0;
-        sensor_Origin       = new DigitalIn(pin_Origin);
         sensorInput_Origin = 0;
         
         debug = new Debug();        
@@ -36,7 +34,7 @@
 void EixoMonitoring::readSensor_End(){  
     while(stopMonitoring == false){
         stdioMutex.lock();
-        sensorInput_End = sensor_End->read();           
+        sensorInput_End = pcf->read(sensor_End);           
         stdioMutex.unlock();        
         Thread::wait(50);
     }
@@ -46,7 +44,7 @@
 void EixoMonitoring::readSensor_Origin(){   
     while(stopMonitoring == false){
         stdioMutex.lock();
-        sensorInput_Origin = sensor_Origin->read();                    
+        sensorInput_Origin = pcf->read(sensor_Origin);                    
         stdioMutex.unlock();        
         Thread::wait(50);
     }
--- a/EixoMonitoring.h	Mon Sep 18 13:05:47 2017 +0000
+++ b/EixoMonitoring.h	Fri Dec 15 19:40:41 2017 +0000
@@ -4,6 +4,8 @@
 #include "mbed.h" 
 #include "rtos.h"
 #include "Debug.h"
+#include "PCF8574.h"
+
 
 
 //#define DELAY_TIMER 500
@@ -14,6 +16,9 @@
        int    delayTimer; 
        int    hitSensor;
        Debug* debug;  
+       PCF8574* pcf;
+       int sensor_Origin;
+       int sensor_End;
              
     
        // Variáveis e Controle do Movimento do Eixo
@@ -24,10 +29,7 @@
     
        // Switches e seu vetor de leitura
              int sensorInput_End;  
-             DigitalIn*  sensor_End;
-             int sensorInput_Origin;  
-             DigitalIn*  sensor_Origin;
-            
+             int sensorInput_Origin;              
             
              // Threads
          Mutex stdioMutex;                   // controle de Acesso Mútuo
@@ -36,7 +38,7 @@
              Thread sensorThread_Origin;             // threads de leitura dos sensores
              Thread handleSensorThread_Origin;       // threads para lidar com a leitur
         
-             EixoMonitoring(PinName, PinName);
+             EixoMonitoring(PCF8574*,int,int);
              void startThreads();
          void stopThreads();
              void readSensor_End();       
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EthernetInterface.lib	Fri Dec 15 19:40:41 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/EthernetInterface/#183490eb1b4a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PCF8574.cpp	Fri Dec 15 19:40:41 2017 +0000
@@ -0,0 +1,28 @@
+#include "PCF8574.h"
+#include "mbed.h"
+
+PCF8574::PCF8574(PinName sda, PinName scl, int address)
+        : _i2c(sda, scl) {
+    _address = address;
+}
+
+int PCF8574::read(int port) {
+    char foo[1];
+    int num,r,i=0;
+    int bin[8];
+    _i2c.read(_address, foo, 1);
+    num = foo[0];
+     while(num!=0){
+        r = num%2;
+        bin[i++] = r;
+        num /= 2;
+    }
+    return(bin[port]);
+}
+
+void PCF8574::write(int data) {
+    char foo[1];
+    foo[0] = data;
+    _i2c.write(_address, foo, 1);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PCF8574.h	Fri Dec 15 19:40:41 2017 +0000
@@ -0,0 +1,16 @@
+#include "mbed.h"
+
+#ifndef MBED_PCF8574_H
+#define MBED_PCF8574_H
+
+class PCF8574 {
+public:
+    PCF8574(PinName sda, PinName scl, int address);
+    int read(int);
+    void write(int data);
+private:
+    I2C _i2c;
+    int _address;
+};
+
+#endif
--- a/Stepp.cpp	Mon Sep 18 13:05:47 2017 +0000
+++ b/Stepp.cpp	Fri Dec 15 19:40:41 2017 +0000
@@ -36,7 +36,7 @@
     return 1;
 }
  
-bool Stepp::findLimits(int n_steps, bool direction, DigitalIn sensor) {
+bool Stepp::findLimits(int n_steps, bool direction, PCF8574* sensor,int port) {
        
     int accelspeed = 0;
     if(this->acell) accelspeed = START_STOP_SPEED;
@@ -46,7 +46,7 @@
     _en   = 0; // habilita move   
     _dir  = direction;
     
-      while(sensor.read() == 0 && EixoMonitoring::stopAll == false){ // n chegou na origem   
+      while(sensor->read(port) == 0 && EixoMonitoring::stopAll == false){ // n chegou na origem   
         
              if(this->acell){ //linear acceleration
                if(i < START_STOP_SPEED) if (--accelspeed == this->speed) accelspeed ++; 
@@ -64,7 +64,7 @@
         _en = 1; 
         
         
-        if(sensor.read() == 0){
+        if(sensor->read(port) == 0){
            return 0;
         }
         else{
--- a/Stepp.h	Mon Sep 18 13:05:47 2017 +0000
+++ b/Stepp.h	Fri Dec 15 19:40:41 2017 +0000
@@ -3,7 +3,9 @@
 
 #include "mbed.h"
 #include "Debug.h"
-#include "EixoMonitoring.h" 
+#include "EixoMonitoring.h"
+#include "PCF8574.h"
+
 
 #define START_STOP_SPEED 300  // define the Stepper Motor save start/stop speed 
 #define VERSION 0.3                     // define Library version number
@@ -12,7 +14,7 @@
     public:
             Stepp(PinName clk, PinName dir, PinName en);
             int step(int n_steps, bool direction);  
-            bool findLimits(int n_steps, bool direction, DigitalIn sensor);  
+            bool findLimits(int n_steps, bool direction, PCF8574* sensor,int port);  
             float version(void);   
         
     private:  
--- a/main.cpp	Mon Sep 18 13:05:47 2017 +0000
+++ b/main.cpp	Fri Dec 15 19:40:41 2017 +0000
@@ -3,62 +3,235 @@
 #include "Stepp.h"
 #include "EixoController.h"
 #include "EixoMonitoring.h" 
-
-#define LEFT  1
-#define RIGHT 0
-#define FRONT 1
-#define BACK  0
+#include "Cnc.h"
+#include "EthernetInterface.h"
+#include "Clp.h"
+#include "PCF8574.h"
 
-// =============== Pinos Driver ===============
-PinName clkPinX = p20;
-PinName dirPinX = p19;
-PinName enPinX  = p18;
+ //=============ETHERNET==================
+#define MBED_DEV_IP       "169.254.127.251"
+#define MBED_DEV_MASK     "255.255.0.0"
+#define MBED_DEV_GW       "0.0.0.0"
+#define ECHO_SERVER_PORT   5000
+//========================================
+ //=============PINOS PCF=================
+#define ADRESS 0x41
+#define swOrignX  0//X0 --> origem
+#define swEndX    1//Xf --> fim
+#define swOrignY  2//X0 --> origem
+#define swEndY    3//Xf --> fim
+#define swOrignE  4//X0 --> origem
+#define swEndE    5//Xf --> fim
+#define sensorUp  6
+#define sensorDown 7
+//========================================
+ //===========DISTANCIAS CNC==============
+#define RIGHT  1
+#define LEFT 0
+#define DOWN 1
+#define UP 0
+#define dHor1 1.3591
+#define dVer1 0.906
+#define dCirc 1.0948
+#define dVer2 0.9439
+#define dNetflix 0.4908
+#define dVer3 0.9816
+#define dSmartv 0.4153
+#define dVer4 1.2836
+#define dMute 0.132
+#define dHor2 3.058
+#define dVer5 0.9816
+#define dHor3 1.0948
+#define dVer6 0.8018
+#define dVoltaX 3.0202
+#define dVoltaY 15.2145
+#define noMove 0.0
+//========================================
 
-PinName swOrignX = p11;
-PinName swEndX   = p6;
+// =============== Pinos CLP ===============
+PinName receiverCnc = p28;
+PinName transmitterCnc = p27;
+PinName receiverElevator = p8;
+//PinName transmitterElevatorEnable = p9;
+//PinName transmitterElevatorSign = p10;
+PinName transmitterElevatorEnable = LED2;
+PinName transmitterElevatorSign = LED4;
+// ============================================
+// =============== Pinos PCF ===============
+PinName sda = p9;
+PinName scl = p10;
+// ============================================
+// =============== Pinos Driver X ===============
+PinName clkPinX = p21;
+PinName dirPinX = p22;
+PinName enPinX  = p14;
+
+// ============================================
+// =============== Pinos Driver Y ===============
+PinName clkPinY = p23;
+PinName dirPinY = p24;
+PinName enPinY  = p13;
+
+// ===========================================
+// =============== Pinos Driver E ===============
+PinName clkPinE = p25;
+PinName dirPinE = p26;
+PinName enPinE  = p12;
+
+// ===========================================
+//PinName valve = p11;
+PinName valve = LED3;
+DigitalOut eixoZ(valve);
 
 
-//PinName clkPinZ = p17;
-//PinName dirPinZ = p16;
-//PinName enPinZ = p15;
-
-//PinName swOrignZ = p7;
-//PinName swEndZ   = p8;
-// ============================================
-
-// =============== Pinos Swtches ===============
-DigitalIn swLeft(p11); //X0 --> origem
-DigitalIn swRight(p6); //Xf --> fim
-//DigitalIn swBack(p7); //Z0 --> origem
-//DigitalIn swFront(p8); //Zf --> fim
-// ============================================
-
 Debug *debug  = new Debug();
+PCF8574* pcf = new PCF8574(sda,scl,ADRESS);
 
 Stepp* motorX = new Stepp(clkPinX, dirPinX, enPinX);
-EixoController* eixoX = new EixoController( 55000, 14, motorX, swOrignX, swEndX);
-EixoMonitoring* eixoMonitoring = new EixoMonitoring( swOrignX, swEndX) ;
+EixoController* eixoX = new EixoController( 44500, 17, motorX, pcf,swOrignX, swEndX);
+EixoMonitoring* eixoMonitoringX = new EixoMonitoring( pcf,swOrignX, swEndX) ;
+Stepp* motorY = new Stepp(clkPinY, dirPinY, enPinY);
+EixoController* eixoY = new EixoController( 10000, 30, motorY,pcf, swOrignY, swEndY); //9483
+EixoMonitoring* eixoMonitoringY = new EixoMonitoring( pcf,swOrignY, swEndY) ;
+Stepp* motorE = new Stepp(clkPinE, dirPinE, enPinE);
+EixoController* eixoE = new EixoController( 10000, 30, motorE, pcf,swOrignE, swEndE);
+EixoMonitoring* eixoMonitoringE = new EixoMonitoring( pcf,swOrignE, swEndE) ;
+Cnc* cnc = new Cnc(eixoX, eixoY, valve,pcf,sensorUp,sensorDown);
+Clp* clp = new Clp(receiverCnc,transmitterCnc,receiverElevator,transmitterElevatorEnable,transmitterElevatorSign);
 
-// 0 - esquerda        1 - direita ---> Eixo X
-// 1 - frente          0 - trás    ---> Eixo Z
-// 1 - pressionado     0 - solto   ---> Switches
+Thread thread;
+Thread thread_2;
+Thread thread_3;
+bool control[6];
+Serial pc(USBTX,USBRX);
 
-int main() { 
+void convert(int num,bool* bin){
+    int i=0,r;
+    while(num!=0){
+        r = num%2;
+        bin[i++] = r;
+        num /= 2;
+    }
+}
 
-    
-    bool teste = false;
-    teste = eixoX->goToOrigem(swLeft , LEFT);
-    
-    /*EixoMonitoring::isCalibrated = false;           
-    eixoMonitoring->startThreads();
-          
-    if(teste == 1){// se está na origem    
-         eixoX->calibragem(RIGHT);           
-         EixoMonitoring::isCalibrated = true;
-         eixoMonitoring->hitSensor = 0;
-         eixoMonitoring->stopAll = false;
-         eixoX->goToPosition(5,RIGHT);   
+void cnc_thread() {
+    while(1){
+    debug->debugPin(1,0);
+    cnc->goToPosition(noMove,RIGHT,noMove,DOWN,1);//aoc1
+    cnc->goToPosition(2*dHor1,RIGHT,noMove,DOWN,1);//aoc2
+    cnc->goToPosition(noMove,LEFT,dVer1,DOWN,1);//aoc3
+    cnc->goToPosition(dHor1,LEFT,noMove,DOWN,1);//aoc4
+    cnc->goToPosition(dHor1,LEFT,noMove,DOWN,1);//aoc5
+    cnc->goToPosition(noMove,LEFT,dVer1,DOWN,1);//aoc6
+    cnc->goToPosition(dHor1,RIGHT,noMove,DOWN,1);//aoc7
+    cnc->goToPosition(dHor1,RIGHT,noMove,DOWN,1);//aoc8
+    cnc->goToPosition(noMove,LEFT,dVer1,DOWN,1);//aoc9
+    cnc->goToPosition(dHor1,LEFT,noMove,DOWN,1);//aoc10
+    cnc->goToPosition(dHor1,LEFT,noMove,DOWN,1);//aoc11
+    cnc->goToPosition(noMove,LEFT,dVer1,DOWN,1);//aoc12
+    cnc->goToPosition(dHor1,RIGHT,noMove,DOWN,1);//aoc13
+    cnc->goToPosition(dHor1,RIGHT,noMove,DOWN,1);//aoc14
+    cnc->goToPosition(noMove,LEFT,dVer1,DOWN,1);//aoc15
+    cnc->goToPosition(dHor1,LEFT,noMove,DOWN,1);//aoc16
+    cnc->goToPosition(dHor1,LEFT,noMove,DOWN,1);//aoc17
+    cnc->goToPosition(noMove,LEFT,dVer1,DOWN,1);//aoc18
+    cnc->goToPosition(2*dHor1,RIGHT,noMove,DOWN,1);//aoc19
+    cnc->goToPosition(dHor1,LEFT,dVer1,DOWN,1); //aoc20 
+    cnc->goToPosition(dCirc,LEFT,dCirc,DOWN,1); //aoc21
+    cnc->goToPosition(dCirc,RIGHT,noMove,DOWN,1); //aoc22
+    cnc->goToPosition(dCirc,RIGHT,noMove,DOWN,1); //aoc23
+    cnc->goToPosition(dCirc,LEFT,dCirc,DOWN,1); //aoc24
+    cnc->goToPosition(dHor1,LEFT,dVer2,DOWN,1); //aoc25
+    cnc->goToPosition(dHor1,RIGHT,dNetflix,DOWN,1); //aoc26
+    cnc->goToPosition(dHor1,RIGHT,dNetflix,UP,1); //aoc27
+    cnc->goToPosition(noMove,LEFT,dVer3,DOWN,1); //aoc28
+    cnc->goToPosition(dHor1,LEFT,dSmartv,DOWN,1); //aoc29
+    cnc->goToPosition(dHor1,LEFT,dSmartv,UP,1); //aoc30
+    cnc->goToPosition(noMove,LEFT,dVer4,DOWN,1); //aoc31
+    cnc->goToPosition(dHor1,RIGHT,dMute,DOWN,1); //aoc32
+    cnc->goToPosition(dHor1,RIGHT,dMute,UP,1); //aoc33
+    cnc->goToPosition(dHor2-2*dHor1,RIGHT,dVer5,DOWN,1); //aoc34
+    cnc->goToPosition(dHor3,LEFT,noMove,DOWN,1);//aoc35
+    cnc->goToPosition(dHor3,LEFT,noMove,DOWN,1);//aoc36
+    cnc->goToPosition(dHor3,LEFT,noMove,DOWN,1);//aoc37
+    cnc->goToPosition(noMove,LEFT,dVer6,DOWN,1);//aoc38
+    cnc->goToPosition(dHor3,RIGHT,noMove,DOWN,1);//aoc39
+    cnc->goToPosition(dHor3,RIGHT,noMove,DOWN,1);//aoc40
+    cnc->goToPosition(dHor3,RIGHT,noMove,DOWN,1);//aoc41
+    cnc->goToPosition(noMove,LEFT,dVer6,DOWN,1);//aoc42
+    cnc->goToPosition(dHor3,LEFT,noMove,DOWN,1);//aoc43
+    cnc->goToPosition(dHor3,LEFT,noMove,DOWN,1);//aoc44
+    cnc->goToPosition(dHor3,LEFT,noMove,DOWN,1);//aoc45
+    cnc->goToPosition(noMove,LEFT,dVer6,DOWN,1);//aoc46
+    cnc->goToPosition(dHor3,RIGHT,noMove,DOWN,1);//aoc47
+    cnc->goToPosition(dHor3,RIGHT,noMove,DOWN,1);//aoc48
+    cnc->goToPosition(dHor3,RIGHT,noMove,DOWN,1);//aoc49
+
+    cnc->goToPosition(dVoltaX,LEFT,dVoltaY,UP,1);//RETORNAR
+    debug->debugPin(1,1);
+    wait(2);
     }
-                
-     eixoMonitoring->stopThreads();                */
+}
+
+void ethernet_thread(){
+    EthernetInterface eth;
+    eth.init(MBED_DEV_IP, MBED_DEV_MASK, MBED_DEV_GW); //Assign a device ip, mask and gateway
+    eth.connect();
+    pc.printf("IP Address is %s\n", eth.getIPAddress());
+    TCPSocketServer server;
+    server.bind(ECHO_SERVER_PORT);
+    server.listen();
+    TCPSocketConnection client;
+
+    while (true) {
+        pc.printf("\nWait for new connection...\n");
+        server.accept(client);
+        client.set_blocking(false, 1500); // Timeout after (1.5)s
+        pc.printf("Connection from: %s\n", client.get_address());
+        int num;
+        char buffer[2];
+        while (client.is_connected()) {
+            int n = client.receive_all(buffer, sizeof(buffer));
+            num = buffer[0]*10+buffer[1]-528;
+            convert(num,control);
+            control[5] = num>31&&num<64;
+            num = 0;
+            buffer[0] = 0;
+            buffer[1] = 0;
+            //client.send("keven\n",5);
+        }
+        client.close();
+    }
+}
+
+void elevator_thread(){
+    while(1){
+        if(control[5]){
+             //eixoE->goToOrigem(swOrignE,LEFT);
+             clp->TransmitElevator(1);
+             pc.printf("primeiro controle: %d\n",control[4]);
+             eixoE->goToPosition(20,RIGHT);
+             clp->TransmitElevator(control[4]);
+             pc.printf("segundo controle: %d\n",control[3]);
+             eixoE->goToPosition(20,RIGHT);
+             clp->TransmitElevator(control[3]);
+             pc.printf("terceiro controle: %d\n",control[2]);
+             eixoE->goToPosition(20,RIGHT);
+             clp->TransmitElevator(control[2]);
+             pc.printf("quarto controle: %d\n",control[1]);
+             eixoE->goToPosition(20,RIGHT);
+             clp->TransmitElevator(control[1]);
+             pc.printf("quinto controle: %d\n",control[0]);
+             eixoE->goToPosition(20,RIGHT);
+             clp->TransmitElevator(control[0]);
+             control[5] = 0;
+        }
+    }
+}
+
+
+int main() {
+    thread.start(cnc_thread);
+    thread_2.start(ethernet_thread);
+    thread_3.start(elevator_thread);
 }
\ No newline at end of file