MTcore: Example 2
Event management for Uno, Nano, Mega
Minimum of MTMeasurement
Full program
// This program allows you to add objects in order to find the minimum // time base ensuring function for a given configuration #include <MTobjects.h> // V1.0.6 See http://arduino.dansetrad.fr/en/MTobjects // Creation of an object to do the measurement. This object changes the level // of A5 each period of mttimebase. With a signal analyzer we must ensure // that the signal does not have holes for correct function. We can thus have // the smallest period for a given configuration. // Creation of a square signal from the MTquickTime clock, with implementation // of scans for the various objects (the most unfavorable cases) class Measurement: public MTquickObject, public MTmediumObject, public MTslowObject { public: Measurement(void); protected: virtual void quickAction(void); // Visualization of the functioning of the MTimeBase clock }; Measurement::Measurement(void) { pinMode(A5,OUTPUT); // Pin for the signal analyzer } void Measurement::quickAction(void) { PINC = 0b00100000; // PC5 (= A5) level change } Measurement MyMeasurement; word timeBase = 8 micro_seconds; word mtSoftPWM; // MTsoftPWM number added word mtServo; // MTservo number added word mtUlnStepper; // MTulnStepper number added word mtStepStepper; // MTstepStepper number added boolean delaymillis = false; // If the system clock is disabled void setup() { MTstopDelayMillis(); // Disable system clock Serial.begin(115200); } void loop() { // Configuration Serial.print("MTtimeBase: "); Serial.print(timeBase); Serial.println("µs"); if (mtSoftPWM>0) { Serial.print(mtSoftPWM); Serial.println(" MTsoftPWM"); } if (mtServo>0) { Serial.print(mtServo); Serial.println(" MTServo"); } if (mtUlnStepper>0) { Serial.print(mtUlnStepper); Serial.println(" MTulnStepper"); } if (mtStepStepper>0) { Serial.print(mtStepStepper); Serial.println(" MTstepStepper"); } if (delaymillis>0) Serial.println("Arduino clock running"); Serial.println(); // Menu Serial.println("MTtimeBase: '*' => +20µs, '+' => +4µs, '-' => -4µs, '/' => -20µs"); Serial.println("A => Addition of an MTsoftPWM"); Serial.println("B => Addition of an MTservo"); Serial.println("C => Addition of an MTulnStepper"); Serial.println("D => Addition of an MTstepStepper"); Serial.println("E => Addition of Arduino clock"); Serial.println("Reset button => programm resetting"); Serial.println(); // Commands while (!Serial.available()); // Wait a command switch(char(Serial.read())) { case '*': timeBase += 20; break; case '+': timeBase += 4; break; case '-': timeBase -= 4; break; case '/': timeBase -= 20; break; case 'a': case 'A': new MTsoftPWM(2, inpulses_width 1 micro_second, periods_width 2 micro_seconds); mtSoftPWM++; break; case 'b': case 'B': new MTservo(2); mtServo++; break; case 'c': case 'C': { MTulnStepper *Stepper = new MTulnStepper(pin_A1 2, pin_B1 2, pin_A2 2, pin_B2 2, WHOLE_STEP, accelerations_of 0 step_or_micro_step, 1 micro_second_per_step); Stepper->move(CONTINUE); mtUlnStepper++; break; } case 'd': case 'D': { MTstepStepper *Stepper = new MTstepStepper(pin_Step 2, pin_Dir UNCONNECTED, pin_EN UNCONNECTED, accelerations_of 0 step_or_micro_step, 16 micro_pas, 1 micro_second_per_step); Stepper->move(CONTINUE); mtStepStepper++; break; } case 'e': case 'E': if (delaymillis) MTstopDelayMillis(); // Disable system clock else MTstartDelayMillis(); // Active the Arduino clock delaymillis = !delaymillis; } MTtimeBase(timeBase); // Minimum pour un seul pas à pas }