This Project has codes that may cnc controller possible. My cnc has 2 mechanical axis. I am monitoring through switches the axis limits. For this i use the library rtos. Enjoy.

Dependencies:   mbed-rtos mbed

Committer:
waspSalander
Date:
Mon Sep 18 13:05:47 2017 +0000
Revision:
1:ef18c260ce02
Parent:
0:7cedfb720712
Step controller

Who changed what in which revision?

UserRevisionLine numberNew contents of line
waspSalander 0:7cedfb720712 1 #include "EixoMonitoring.h"
waspSalander 0:7cedfb720712 2
waspSalander 1:ef18c260ce02 3 bool EixoMonitoring::stopAll = false;
waspSalander 0:7cedfb720712 4 bool EixoMonitoring::isCalibrated = false;
waspSalander 0:7cedfb720712 5
waspSalander 0:7cedfb720712 6
waspSalander 0:7cedfb720712 7 EixoMonitoring::EixoMonitoring(PinName pinOrigin, PinName pinEnd) {
waspSalander 0:7cedfb720712 8
waspSalander 0:7cedfb720712 9 this->stopMoviment = false;
waspSalander 0:7cedfb720712 10 this->stopMonitoring = false;
waspSalander 1:ef18c260ce02 11 this->delayTimer = 700;
waspSalander 0:7cedfb720712 12 PinName pin_End = pinEnd;
waspSalander 0:7cedfb720712 13 PinName pin_Origin = pinOrigin;
waspSalander 0:7cedfb720712 14
waspSalander 0:7cedfb720712 15 sensor_End = new DigitalIn(pin_End);
waspSalander 0:7cedfb720712 16 sensorInput_End = 0;
waspSalander 0:7cedfb720712 17 sensor_Origin = new DigitalIn(pin_Origin);
waspSalander 0:7cedfb720712 18 sensorInput_Origin = 0;
waspSalander 0:7cedfb720712 19
waspSalander 0:7cedfb720712 20 debug = new Debug();
waspSalander 0:7cedfb720712 21 }
waspSalander 0:7cedfb720712 22
waspSalander 0:7cedfb720712 23
waspSalander 0:7cedfb720712 24 void EixoMonitoring::startThreads(){
waspSalander 0:7cedfb720712 25 hitSensor = 0;
waspSalander 0:7cedfb720712 26 this->stopMoviment = false;
waspSalander 0:7cedfb720712 27 this->stopMonitoring = false;
waspSalander 0:7cedfb720712 28
waspSalander 0:7cedfb720712 29 sensorThread_End.start( callback(this, &EixoMonitoring::readSensor_End) );
waspSalander 0:7cedfb720712 30 handleSensorThread_End.start( callback(this, &EixoMonitoring::handleReadSensor_End) );
waspSalander 0:7cedfb720712 31
waspSalander 0:7cedfb720712 32 sensorThread_Origin.start( callback(this, &EixoMonitoring::readSensor_Origin) );
waspSalander 0:7cedfb720712 33 handleSensorThread_Origin.start( callback(this, &EixoMonitoring::handleReadSensor_Origin) );
waspSalander 0:7cedfb720712 34 }
waspSalander 0:7cedfb720712 35
waspSalander 0:7cedfb720712 36 void EixoMonitoring::readSensor_End(){
waspSalander 0:7cedfb720712 37 while(stopMonitoring == false){
waspSalander 0:7cedfb720712 38 stdioMutex.lock();
waspSalander 0:7cedfb720712 39 sensorInput_End = sensor_End->read();
waspSalander 0:7cedfb720712 40 stdioMutex.unlock();
waspSalander 0:7cedfb720712 41 Thread::wait(50);
waspSalander 0:7cedfb720712 42 }
waspSalander 0:7cedfb720712 43 }
waspSalander 0:7cedfb720712 44
waspSalander 0:7cedfb720712 45
waspSalander 0:7cedfb720712 46 void EixoMonitoring::readSensor_Origin(){
waspSalander 0:7cedfb720712 47 while(stopMonitoring == false){
waspSalander 0:7cedfb720712 48 stdioMutex.lock();
waspSalander 0:7cedfb720712 49 sensorInput_Origin = sensor_Origin->read();
waspSalander 0:7cedfb720712 50 stdioMutex.unlock();
waspSalander 0:7cedfb720712 51 Thread::wait(50);
waspSalander 0:7cedfb720712 52 }
waspSalander 0:7cedfb720712 53 }
waspSalander 0:7cedfb720712 54
waspSalander 0:7cedfb720712 55 void EixoMonitoring::handleReadSensor_End(){
waspSalander 0:7cedfb720712 56 Timer* timerLeitura = new Timer();
waspSalander 0:7cedfb720712 57 timerLeitura->start();
waspSalander 0:7cedfb720712 58
waspSalander 0:7cedfb720712 59 while(stopMonitoring == false){
waspSalander 0:7cedfb720712 60 if (stopMoviment == false){
waspSalander 0:7cedfb720712 61 stdioMutex.lock();
waspSalander 0:7cedfb720712 62 if(sensorInput_End == 1 && timerLeitura->read_ms()> this->delayTimer ){ // sensor pressionado ? e passou meio segundo
waspSalander 0:7cedfb720712 63 hitSensor++;
waspSalander 0:7cedfb720712 64 timerLeitura->reset();
waspSalander 0:7cedfb720712 65 }
waspSalander 0:7cedfb720712 66 stdioMutex.unlock();
waspSalander 0:7cedfb720712 67 }
waspSalander 0:7cedfb720712 68
waspSalander 0:7cedfb720712 69
waspSalander 0:7cedfb720712 70 // SEGURANÇA DA CNC:
waspSalander 0:7cedfb720712 71 if (isCalibrated == false){
waspSalander 0:7cedfb720712 72
waspSalander 0:7cedfb720712 73 if(hitSensor > 1){ // Na fase de calibragem, se bateu + de 2 vezes(achou origem e na contagem de passos): -> true
waspSalander 0:7cedfb720712 74 stopMoviment = true;
waspSalander 0:7cedfb720712 75 stopAll = true;
waspSalander 0:7cedfb720712 76 timerLeitura->stop();
waspSalander 0:7cedfb720712 77 }
waspSalander 0:7cedfb720712 78 }
waspSalander 0:7cedfb720712 79 else{
waspSalander 0:7cedfb720712 80 if(hitSensor > 0){ // Na fase de teste, se bateu + de 1 vez: -> true
waspSalander 0:7cedfb720712 81 stopMoviment = true;
waspSalander 0:7cedfb720712 82 stopAll = true;
waspSalander 0:7cedfb720712 83 timerLeitura->stop();
waspSalander 0:7cedfb720712 84 }
waspSalander 0:7cedfb720712 85 }
waspSalander 0:7cedfb720712 86
waspSalander 0:7cedfb720712 87 Thread::wait(50);
waspSalander 0:7cedfb720712 88 }
waspSalander 0:7cedfb720712 89 timerLeitura->stop();
waspSalander 0:7cedfb720712 90 }
waspSalander 0:7cedfb720712 91
waspSalander 0:7cedfb720712 92 void EixoMonitoring::handleReadSensor_Origin(){
waspSalander 0:7cedfb720712 93
waspSalander 0:7cedfb720712 94 Timer* timerLeitura = new Timer();
waspSalander 0:7cedfb720712 95 timerLeitura->start();
waspSalander 0:7cedfb720712 96
waspSalander 0:7cedfb720712 97 while(stopMonitoring == false){
waspSalander 0:7cedfb720712 98
waspSalander 0:7cedfb720712 99 if (stopMoviment == false){
waspSalander 0:7cedfb720712 100 stdioMutex.lock();
waspSalander 0:7cedfb720712 101 if(sensorInput_Origin == 1 && timerLeitura->read_ms()> this->delayTimer){ // sensor pressionado ?
waspSalander 0:7cedfb720712 102 hitSensor++;
waspSalander 0:7cedfb720712 103 timerLeitura->reset();
waspSalander 0:7cedfb720712 104 }
waspSalander 0:7cedfb720712 105 stdioMutex.unlock();
waspSalander 0:7cedfb720712 106 }
waspSalander 0:7cedfb720712 107
waspSalander 0:7cedfb720712 108
waspSalander 0:7cedfb720712 109 // SEGURANÇA DA CNC:
waspSalander 0:7cedfb720712 110 if (isCalibrated == false){
waspSalander 0:7cedfb720712 111 if(hitSensor > 1){ // Na fase de calibragem, se bateu + de 2 vezes(achou origem e na contagem de passos): -> true
waspSalander 0:7cedfb720712 112 stopMoviment = true;
waspSalander 0:7cedfb720712 113 stopAll = true;
waspSalander 0:7cedfb720712 114 timerLeitura->stop();
waspSalander 0:7cedfb720712 115 }
waspSalander 0:7cedfb720712 116 }
waspSalander 0:7cedfb720712 117 else{
waspSalander 0:7cedfb720712 118 if(hitSensor > 0){ // Na fase de teste, se bateu + de 1 vez: -> true
waspSalander 0:7cedfb720712 119 stopMoviment = true;
waspSalander 0:7cedfb720712 120 stopAll = true;
waspSalander 0:7cedfb720712 121 timerLeitura->stop();
waspSalander 0:7cedfb720712 122 }
waspSalander 0:7cedfb720712 123 }
waspSalander 0:7cedfb720712 124
waspSalander 0:7cedfb720712 125 Thread::wait(50);
waspSalander 0:7cedfb720712 126 }
waspSalander 0:7cedfb720712 127 timerLeitura->stop();
waspSalander 0:7cedfb720712 128 }
waspSalander 0:7cedfb720712 129
waspSalander 0:7cedfb720712 130 void EixoMonitoring::stopThreads(){
waspSalander 0:7cedfb720712 131
waspSalander 0:7cedfb720712 132 this->stopMoviment = true;
waspSalander 0:7cedfb720712 133 this->stopMonitoring = true;
waspSalander 0:7cedfb720712 134
waspSalander 0:7cedfb720712 135 sensorThread_End.join();
waspSalander 0:7cedfb720712 136 handleSensorThread_End.join();
waspSalander 0:7cedfb720712 137 sensorThread_Origin.join();
waspSalander 0:7cedfb720712 138 handleSensorThread_Origin.join();
waspSalander 0:7cedfb720712 139
waspSalander 0:7cedfb720712 140 sensorThread_End.terminate();
waspSalander 0:7cedfb720712 141 handleSensorThread_End.terminate();
waspSalander 0:7cedfb720712 142 sensorThread_Origin.terminate();
waspSalander 0:7cedfb720712 143 handleSensorThread_Origin.terminate();
waspSalander 0:7cedfb720712 144
waspSalander 0:7cedfb720712 145 }