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.
EixoMonitoring.cpp@1:ef18c260ce02, 2017-09-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |