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

main.cpp

Committer:
kevencastro7
Date:
2017-12-15
Revision:
2:835c883d81b0
Parent:
1:ef18c260ce02

File content as of revision 2:835c883d81b0:

#include "mbed.h"
#include "Debug.h"
#include "Stepp.h"
#include "EixoController.h"
#include "EixoMonitoring.h" 
#include "Cnc.h"
#include "EthernetInterface.h"
#include "Clp.h"
#include "PCF8574.h"

 //=============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
//========================================

// =============== 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);


Debug *debug  = new Debug();
PCF8574* pcf = new PCF8574(sda,scl,ADRESS);

Stepp* motorX = new Stepp(clkPinX, dirPinX, enPinX);
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);

Thread thread;
Thread thread_2;
Thread thread_3;
bool control[6];
Serial pc(USBTX,USBRX);

void convert(int num,bool* bin){
    int i=0,r;
    while(num!=0){
        r = num%2;
        bin[i++] = r;
        num /= 2;
    }
}

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

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