Implement PCM One Shot feature. Fixes artf4731 (#539)

This commit is contained in:
sciencewhiz
2017-11-26 12:55:21 -08:00
committed by Peter Johnson
parent a338ee8be0
commit 7a250a1b93
11 changed files with 297 additions and 1 deletions

View File

@@ -180,6 +180,95 @@ public class PCMTest extends AbstractComsSetup {
solenoid.free();
}
/**
* Test if the correct solenoids turn on and off when they should.
*/
@Test
public void testOneShot() throws Exception {
reset();
Solenoid solenoid1 = new Solenoid(0);
Solenoid solenoid2 = new Solenoid(1);
solenoid1.set(false);
solenoid2.set(false);
Timer.delay(kSolenoidDelayTime);
assertTrue("Solenoid #1 did not turn off", fakeSolenoid1.get());
assertTrue("Solenoid #2 did not turn off", fakeSolenoid2.get());
assertFalse("Solenoid #1 did not report off", solenoid1.get());
assertFalse("Solenoid #2 did not report off", solenoid2.get());
// Pulse Solenoid #1 on, and turn Solenoid #2 off
solenoid1.setPulseDuration(2 * kSolenoidDelayTime);
solenoid1.startPulse();
solenoid2.set(false);
Timer.delay(kSolenoidDelayTime);
assertFalse("Solenoid #1 did not turn on", fakeSolenoid1.get());
assertTrue("Solenoid #2 did not turn off", fakeSolenoid2.get());
assertTrue("Solenoid #1 did not report on", solenoid1.get());
assertFalse("Solenoid #2 did not report off", solenoid2.get());
Timer.delay(2 * kSolenoidDelayTime);
assertTrue("Solenoid #1 did not turn off", fakeSolenoid1.get());
assertTrue("Solenoid #2 did not turn off", fakeSolenoid2.get());
assertFalse("Solenoid #1 did not report off", solenoid1.get());
assertFalse("Solenoid #2 did not report off", solenoid2.get());
// Turn Solenoid #1 off, and pulse Solenoid #2 on
solenoid1.set(false);
solenoid2.setPulseDuration(2 * kSolenoidDelayTime);
solenoid2.startPulse();
Timer.delay(kSolenoidDelayTime);
assertTrue("Solenoid #1 did not turn off", fakeSolenoid1.get());
assertFalse("Solenoid #2 did not turn on", fakeSolenoid2.get());
assertFalse("Solenoid #1 did not report off", solenoid1.get());
assertTrue("Solenoid #2 did not report on", solenoid2.get());
Timer.delay(2 * kSolenoidDelayTime);
assertTrue("Solenoid #1 did not turn off", fakeSolenoid1.get());
assertTrue("Solenoid #2 did not turn off", fakeSolenoid2.get());
assertFalse("Solenoid #1 did not report off", solenoid1.get());
assertFalse("Solenoid #2 did not report off", solenoid2.get());
// Pulse both Solenoids on
solenoid1.setPulseDuration(2 * kSolenoidDelayTime);
solenoid2.setPulseDuration(2 * kSolenoidDelayTime);
solenoid1.startPulse();
solenoid2.startPulse();
Timer.delay(kSolenoidDelayTime);
assertFalse("Solenoid #1 did not turn on", fakeSolenoid1.get());
assertFalse("Solenoid #2 did not turn on", fakeSolenoid2.get());
assertTrue("Solenoid #1 did not report on", solenoid1.get());
assertTrue("Solenoid #2 did not report on", solenoid2.get());
Timer.delay(2 * kSolenoidDelayTime);
assertTrue("Solenoid #1 did not turn off", fakeSolenoid1.get());
assertTrue("Solenoid #2 did not turn off", fakeSolenoid2.get());
assertFalse("Solenoid #1 did not report off", solenoid1.get());
assertFalse("Solenoid #2 did not report off", solenoid2.get());
// Pulse both Solenoids on with different durations
solenoid1.setPulseDuration(1.5 * kSolenoidDelayTime);
solenoid2.setPulseDuration(2.5 * kSolenoidDelayTime);
solenoid1.startPulse();
solenoid2.startPulse();
Timer.delay(kSolenoidDelayTime);
assertFalse("Solenoid #1 did not turn on", fakeSolenoid1.get());
assertFalse("Solenoid #2 did not turn on", fakeSolenoid2.get());
assertTrue("Solenoid #1 did not report on", solenoid1.get());
assertTrue("Solenoid #2 did not report on", solenoid2.get());
Timer.delay(kSolenoidDelayTime);
assertTrue("Solenoid #1 did not turn off", fakeSolenoid1.get());
assertFalse("Solenoid #2 did not turn on", fakeSolenoid2.get());
assertFalse("Solenoid #1 did not report off", solenoid1.get());
assertTrue("Solenoid #2 did not report on", solenoid2.get());
Timer.delay(kSolenoidDelayTime);
assertTrue("Solenoid #1 did not turn off", fakeSolenoid1.get());
assertTrue("Solenoid #2 did not turn off", fakeSolenoid2.get());
assertFalse("Solenoid #1 did not report off", solenoid1.get());
assertFalse("Solenoid #2 did not report off", solenoid2.get());
solenoid1.free();
solenoid2.free();
}
protected Logger getClassLogger() {
return logger;
}