package edu.wpi.first.wpilibj; import com.iismathwizard.jrio.exceptions.ModuleDoesNotExistException; import com.iismathwizard.jrio.jRIO; import edu.wpi.first.wpilibj.communication.ModulePresence; import edu.wpi.first.wpilibj.livewindow.LiveWindowSendable; /** * User: IisMathwizard * Date: 10/9/13 * Time: 11:32 AM */ public class PWM extends SensorBase implements LiveWindowSendable { protected int channel, moduleNumber = 1; //channel is 0 -> (channel_max - 1) // settings private final int MAX = 255; private final int MIN = 0; private int max = 255; private int deadbandMax = 128; private int center = 128; private int deadbandMin = 128; private int min = 1; private int value = center; //default to center private boolean deadbandEnabled = false; //end settings protected static final int kDefaultMinPwmHigh = 102; protected static final int kDefaultPwmPeriod = 774; public static final int kPwmDisabled = 0; PWM(int channel) { channel --; try { if(jRIO.hasModule(ModulePresence.ModuleType.kDigital, 1) && jRIO.getModule(ModulePresence.ModuleType.kDigital, 1) instanceof DigitalModule) { DigitalModule dMod = (DigitalModule) jRIO.getModule(ModulePresence.ModuleType.kDigital, 1); if(dMod.pwms[channel] == null) { dMod.pwms[channel] = this; } } } catch (ModuleDoesNotExistException e) { System.out.println("Default digital module couldn't be found."); e.printStackTrace(); } this.channel = channel; this.moduleNumber = 1; } PWM(int moduleNumber, int channel) { channel --; try { if(jRIO.hasModule(ModulePresence.ModuleType.kDigital, moduleNumber) && jRIO.getModule(ModulePresence.ModuleType.kDigital, moduleNumber) instanceof DigitalModule) { DigitalModule dMod = (DigitalModule) jRIO.getModule(ModulePresence.ModuleType.kDigital, moduleNumber); if(dMod.pwms[channel] == null) { dMod.pwms[channel] = this; } } } catch (ModuleDoesNotExistException e) { System.out.println("The Digital module couldn't be found."); e.printStackTrace(); } this.channel = channel; this.moduleNumber = moduleNumber; } PWM(){}; public void free() { try { if(jRIO.hasModule(ModulePresence.ModuleType.kDigital, moduleNumber) && jRIO.getModule(ModulePresence.ModuleType.kDigital, moduleNumber) instanceof DigitalModule) { DigitalModule dMod = (DigitalModule) jRIO.getModule(ModulePresence.ModuleType.kDigital, moduleNumber); dMod.pwms[channel] = null; } } catch (ModuleDoesNotExistException e) { System.out.println("The Digital module couldn't be found."); System.out.println("The PWM couldn't be freed."); e.printStackTrace(); } } public void enableDeadbandElimination(boolean eliminateDeadband) { this.deadbandEnabled = eliminateDeadband; } public void setBounds(int max, int deadbandMax, int center, int deadbandMin, int min) { this.max = max; this.deadbandMax = deadbandMax; this.center = center; this.deadbandMin = deadbandMin; this.min = min; } public int getModuleNumber() { return moduleNumber; } public int getChannel() { return channel; } public void setPosition(double pos) { setRaw((int)Math.round(255 * pos)); } public double getPosition() { int temp = getRaw(); return ((double)temp / MAX); } public double getSpeed() { return (((2.0 * getRaw()) / MAX) - 1); } public void setRaw(int value) { if(value > MAX) { value = MAX; } if(value < MIN) { value = MIN; } this.value = value; } public int getRaw() { int temp = value; if(temp > max) { temp = max; } if(temp < min) { temp = min; } if(temp == kPwmDisabled) { return temp; //short circuit when we are disabled } if(temp < deadbandMax && temp > deadbandMin && deadbandEnabled) { temp = center; } if(temp > MAX) { temp = MAX; } if(temp < MIN) { temp = MIN; } return temp; } }