1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2024-11-23 08:06:13 +01:00

Capture progress

This commit is contained in:
peteGSX 2023-09-03 18:54:56 +10:00
parent 004d10ee58
commit 1e48c59cd8
3 changed files with 12 additions and 8 deletions

View File

@ -71,14 +71,11 @@ void EXTurntable::_loop(unsigned long currentMicros) {
uint8_t readBuffer[1]; uint8_t readBuffer[1];
I2CManager.read(_I2CAddress, readBuffer, 1); I2CManager.read(_I2CAddress, readBuffer, 1);
_stepperStatus = readBuffer[0]; _stepperStatus = readBuffer[0];
if (_stepperStatus < 2) { if (_stepperStatus != _previousStatus && _stepperStatus == 0) { // Broadcast when a rotation finishes
if (_stepperStatus != _previousStatus) { _broadcastStatus(_firstVpin, _stepperStatus);
_broadcastStatus(_firstVpin, _stepperStatus); _previousStatus = _stepperStatus;
_previousStatus = _stepperStatus;
}
} }
// DIAG(F("Turntable-EX returned status: %d"), _stepperStatus); delayUntil(currentMicros + 100000); // Wait 100ms before checking again
delayUntil(currentMicros + 500000); // Wait 500ms before checking again, turntables turn slowly
} }
// Read returns status as obtained in our loop. // Read returns status as obtained in our loop.
@ -128,6 +125,7 @@ void EXTurntable::_writeAnalogue(VPIN vpin, int value, uint8_t activity, uint16_
_I2CAddress.toString(), stepsMSB, stepsLSB, activity); _I2CAddress.toString(), stepsMSB, stepsLSB, activity);
#endif #endif
_stepperStatus = 1; // Tell the device driver Turntable-EX is busy _stepperStatus = 1; // Tell the device driver Turntable-EX is busy
_broadcastStatus(vpin, _stepperStatus); // Broadcast when the rotation starts
I2CManager.write(_I2CAddress, 3, stepsMSB, stepsLSB, activity); I2CManager.write(_I2CAddress, 3, stepsMSB, stepsLSB, activity);
} }

View File

@ -122,7 +122,9 @@ bool Turntable::setPositionStateOnly(uint16_t id, uint8_t position, bool moving)
// Only need to broadcast from here if it's a DCC type, device driver broadcasts EXTT // Only need to broadcast from here if it's a DCC type, device driver broadcasts EXTT
if (!tto->isEXTT()) { CommandDistributor::broadcastTurntable(id, position, moving); } if (!tto->isEXTT()) { CommandDistributor::broadcastTurntable(id, position, moving); }
#if defined(EXRAIL_ACTIVE) #if defined(EXRAIL_ACTIVE)
// RMFT2::turntableEvent(id, position); bool rotated = false;
if (position != tto->_previousPosition) rotated = true;
if (!tto->isEXTT()) { RMFT2::rotateEvent(id, rotated); }
#endif #endif
return true; return true;
} }
@ -138,6 +140,7 @@ bool Turntable::setPosition(uint16_t id, uint8_t position, uint8_t activity) {
if (ok) { if (ok) {
// Broadcast a position change only if non zero has been set, or home/calibration sent // Broadcast a position change only if non zero has been set, or home/calibration sent
tto->_previousPosition = tto->getPosition();
if (position > 0 || (position == 0 && (activity == 2 || activity == 3))) { if (position > 0 || (position == 0 && (activity == 2 || activity == 3))) {
tto->_turntableData.position = position; tto->_turntableData.position = position;
if (tto->isEXTT()) { if (tto->isEXTT()) {

View File

@ -105,6 +105,9 @@ protected:
// Linked list for positions // Linked list for positions
TurntablePositionList _turntablePositions; TurntablePositionList _turntablePositions;
// Store the previous position to allow checking for changes
uint8_t _previousPosition = 0;
/* /*
* Constructor * Constructor