First Commit
This commit is contained in:
77
AnalogInput.m
Normal file
77
AnalogInput.m
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
classdef AnalogInput < handle
|
||||||
|
properties
|
||||||
|
mux;
|
||||||
|
channel;
|
||||||
|
rawValue;
|
||||||
|
lastValue;
|
||||||
|
lastStored=0;
|
||||||
|
rawMax,rawMin,euMax,euMin;
|
||||||
|
history=zeros(1, 100, 'double');
|
||||||
|
badReads=0;
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
properties(Access=private)
|
||||||
|
m,b;
|
||||||
|
end
|
||||||
|
|
||||||
|
methods
|
||||||
|
function obj = AnalogInput(mux, channel, rawMin, rawMax, euMin, euMax)
|
||||||
|
obj.mux = mux;
|
||||||
|
obj.channel = channel;
|
||||||
|
obj.rawMin = double(rawMin);
|
||||||
|
obj.rawMax = double(rawMax);
|
||||||
|
obj.euMin = double(euMin);
|
||||||
|
obj.euMax = double(euMax);
|
||||||
|
|
||||||
|
obj.m = (obj.euMax - obj.euMin) / (obj.rawMax - obj.rawMin);
|
||||||
|
obj.b = obj.euMax - obj.m * (obj.rawMax);
|
||||||
|
end
|
||||||
|
|
||||||
|
function value = setValue(obj, inValue)
|
||||||
|
obj.rawValue = inValue;
|
||||||
|
value = obj.m * inValue + obj.b;
|
||||||
|
obj.lastValue = value;
|
||||||
|
obj.lastStored = now;
|
||||||
|
obj.history = [value, obj.history(1:end-1)];
|
||||||
|
end
|
||||||
|
|
||||||
|
function value = read(obj)
|
||||||
|
value = obj.lastValue;
|
||||||
|
rawIn = obj.mux.readAnalogSPI();
|
||||||
|
if (rawIn ~= -1)
|
||||||
|
obj.badReads = 0;
|
||||||
|
value = obj.setValue(double(rawIn));
|
||||||
|
else
|
||||||
|
obj.badReads = obj.badReads + 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (obj.badReads > 10)
|
||||||
|
pause(10);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function value = readSim(obj, simRaw)
|
||||||
|
value = obj.m * simRaw + obj.b;
|
||||||
|
obj.lastValue = pv;
|
||||||
|
obj.lastValue = value;
|
||||||
|
obj.lastStored = now;
|
||||||
|
obj.history = [value, obj.history(1:end-1)];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
methods(Static)
|
||||||
|
function test
|
||||||
|
pi = raspi('10.0.0.104', 'pi', 'raspberry');
|
||||||
|
mux = MuxSetup(pi);
|
||||||
|
anInput1 = AnalogInput(mux, 1, 0.0, 65535.0, 0.0, 100.0);
|
||||||
|
anInput2 = AnalogInput(mux, 2, 0.0, 65535.0, 0.0, 100.0);
|
||||||
|
|
||||||
|
anInput1.read()
|
||||||
|
anInput2.read()
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
243
Card.m
Normal file
243
Card.m
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
classdef Card < handle
|
||||||
|
properties
|
||||||
|
numPointsUsed = 0;
|
||||||
|
strokeNumber;
|
||||||
|
strokeStartTime;
|
||||||
|
|
||||||
|
surfacePosition={};
|
||||||
|
surfaceLoad={};
|
||||||
|
downholePosition={};
|
||||||
|
downholeLoad={};
|
||||||
|
|
||||||
|
surfacePositionMax=LPPair(0,0);
|
||||||
|
surfacePositionMin=LPPair(0,0);
|
||||||
|
surfaceLoadMax=LPPair(0,0);
|
||||||
|
surfaceLoadMin=LPPair(0,0);
|
||||||
|
|
||||||
|
downholePositionMax=LPPair(0,0);
|
||||||
|
downholePositionMin=LPPair(0,0);
|
||||||
|
downholeLoadMax=LPPair(0,0);
|
||||||
|
downholeLoadMin=LPPair(0,0);
|
||||||
|
|
||||||
|
topCorner=LPPair(0,0);
|
||||||
|
bottomCorner=LPPair(0,0);
|
||||||
|
|
||||||
|
surfaceStrokeLength;
|
||||||
|
downholeNetStrokeLength;
|
||||||
|
downholeGrossStrokeLength;
|
||||||
|
downholeAdjustedGrossStrokeLength;
|
||||||
|
downholeLoadSpan;
|
||||||
|
fluidLoad;
|
||||||
|
pumpIntakePressure;
|
||||||
|
fluidLevel;
|
||||||
|
fillageEstimated;
|
||||||
|
fillageCalculated;
|
||||||
|
tubingMovement;
|
||||||
|
strokeSpeed;
|
||||||
|
|
||||||
|
structuralLoading;
|
||||||
|
|
||||||
|
polishedRodHorsepower;
|
||||||
|
pumpHorsepower;
|
||||||
|
fluidBblMoved;
|
||||||
|
fluidBblMovedAdjusted;
|
||||||
|
waterBblMoved;
|
||||||
|
oilBblMoved;
|
||||||
|
gasMcfMoved;
|
||||||
|
end
|
||||||
|
|
||||||
|
methods
|
||||||
|
function obj=Card(strokeNumber)
|
||||||
|
% Initialization Function
|
||||||
|
obj.strokeNumber = strokeNumber;
|
||||||
|
obj.strokeStartTime = now;
|
||||||
|
end
|
||||||
|
|
||||||
|
function push(obj, s_pos, s_load, d_pos, d_load)
|
||||||
|
obj.surfacePosition = [obj.surfacePosition s_pos];
|
||||||
|
obj.surfaceLoad = [obj.surfaceLoad s_load];
|
||||||
|
obj.downholePosition = [obj.downholePosition d_pos];
|
||||||
|
obj.downholeLoad = [obj.downholeLoad d_load];
|
||||||
|
end
|
||||||
|
|
||||||
|
function calcStrokeData(obj, numSlices, fluidGradient, rodDepth, ...
|
||||||
|
anchorDepth, tubingCSA, pumpArea, frictionEstimate, ...
|
||||||
|
structuralRating, kFactor, waterBBLRatio, oilBBLRatio, ...
|
||||||
|
gasMCFRatio)
|
||||||
|
calculateSPM();
|
||||||
|
obj.surfacePositionMax = obj.positionMax(obj.surfacePosition, obj.surfaceLoad, obj.numPointsUsed);
|
||||||
|
obj.surfaceLoadMax = obj.loadMax(obj.surfacePosition, obj.surfaceLoad, obj.numPointsUsed);
|
||||||
|
obj.surfacePositionMin = obj.positionMin(obj.surfacePosition, obj.surfaceLoad, obj.numPointsUsed);
|
||||||
|
obj.surfaceLoadMin = obj.loadMin(obj.surfacePosition, obj.surfaceLoad, obj.numPointsUsed);
|
||||||
|
|
||||||
|
obj.downholePositionMax = obj.positionMax(obj.downholePosition, obj.downholeLoad, obj.numPointsUsed);
|
||||||
|
obj.downholeLoadMax = obj.loadMax(obj.downholePosition, obj.downholeLoad, obj.numPointsUsed);
|
||||||
|
obj.downholePositionMin = obj.positionMin(obj.downholePosition, obj.downholeLoad, obj.numPointsUsed);
|
||||||
|
obj.downholeLoadMin = obj.loadMin(obj.downholePosition, obj.downholeLoad, obj.numPointsUsed);
|
||||||
|
|
||||||
|
obj.surfaceStrokeLength = obj.surfacePositionMax.position - obj.surfacePositionMin.position;
|
||||||
|
obj.downholeGrossStrokeLength = obj.downholePositionMax.position - obj.downholePositionMin.position;
|
||||||
|
obj.downholeLoadSpan = obj.downholeLoadMax.load - obj.downholeLoadMin.load;
|
||||||
|
|
||||||
|
dxSurf = (obj.surfacePositionMax.position - obj.surfacePositionMin.position) / double(numSlices);
|
||||||
|
dxDown = (obj.downholePositionMax.position - obj.downholePositionMin.position) / double(numSlices);
|
||||||
|
|
||||||
|
obj.pumpHorsepower = 0.0;
|
||||||
|
obj.polishedRodHorsepower = 0.0;
|
||||||
|
dhDistanceTop = 0.0;
|
||||||
|
dhDistanceBottom = 0.0;
|
||||||
|
|
||||||
|
for i = 1:numSlices+1
|
||||||
|
suPosTarget = obj.surfacePositionMin.position + (double(i) * dxSurf);
|
||||||
|
dhPosTarget = obj.downholePositionMin.position + (double(i) * dxDown);
|
||||||
|
suLoadAtTargetTop = 0.0;
|
||||||
|
suLoadAtTargetBottom = 0.0;
|
||||||
|
dhLoadAtTargetTop = 0.0;
|
||||||
|
dhLoadAtTargetBottom = 0.0;
|
||||||
|
|
||||||
|
for j = 1:obj.numPointsUsed
|
||||||
|
if (obj.downholePosition(j) <= dhPosTarget && obj.downholePosition(j+1) > dhPosTarget)
|
||||||
|
dhLoadAtTargetTop = lineResolve(obj.downholePosition(j), obj.downholePosition(j+1), obj.downholeLoad(j), obj.downholeLoad(j+1), dhPosTarget);
|
||||||
|
end
|
||||||
|
|
||||||
|
if (obj.downholePosition(j) > dhPosTarget && obj.downholePosition(j+1) >= dhPosTarget)
|
||||||
|
dhLoadAtTargetBottom = lineResolve(obj.downholePosition(j), obj.downholePosition(j+1), obj.downholeLoad(j), obj.downholeLoad(j+1), dhPosTarget);
|
||||||
|
end
|
||||||
|
|
||||||
|
if (obj.surfacePosition(j) <= suPosTarget && obj.surfacePosition(j+1) > suPosTarget)
|
||||||
|
suLoadAtTargetTop = lineResolve(obj.surfacePosition(j), obj.surfacePosition(j+1), obj.surfaceLoad(j), obj.surfaceLoad(j+1), suPosTarget);
|
||||||
|
end
|
||||||
|
|
||||||
|
if (obj.surfacePosition(j) > suPosTarget && obj.surfacePosition(j+1) >= suPosTarget)
|
||||||
|
suLoadAtTargetBottom = lineResolve(obj.surfacePosition(j), obj.surfacePosition(j+1), obj.surfaceLoad(j), obj.surfaceLoad(j+1), suPosTarget);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
obj.polishedRodHorsepower = obj.polishedRodHorsepower + (dxSurf / 12.0) * (suLoadAtTargetTop - suLoadAtTargetBottom) * (obj.strokeSpeed / 33000.0);
|
||||||
|
obj.pumpHorsepower = obj.pumpHorsepower + (dxDown / 12.0) * (dhLoadAtTargetTop - dhLoadAtTargetBottom) * (obj.strokeSpeed / 33000.0);
|
||||||
|
|
||||||
|
tDistance = obj.distanceToLine(dhPosTarget, dhLoadAtTargetTop);
|
||||||
|
bDistance = obj.distanceToLine(dhPosTarget, dhLoadAtTargetBottom);
|
||||||
|
|
||||||
|
if (tDistance > dhDistanceTop)
|
||||||
|
dhDistanceTop = tDistance;
|
||||||
|
obj.topCorner = LPPair(dhPosTarget, dhLoadAtTargetTop);
|
||||||
|
end
|
||||||
|
|
||||||
|
if (bDistance > dhDistanceBottom)
|
||||||
|
dhDistanceBottom = bDistance;
|
||||||
|
obj.bottomCorner = LPPair(dhPosTarget, dhLoadAtTargetBottom);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
obj.downholeAdjustedGrossStrokeLength = obj.downholePositionMax.position - obj.topCorner.position;
|
||||||
|
obj.downholeNetStrokeLength = obj.bottomCorner.position - obj.downholePositionMin.position;
|
||||||
|
obj.fillageCalculated = (obj.downholeNetStrokeLength / obj.downholeAdjustedGrossStrokeLength) * 100.0;
|
||||||
|
obj.fillageEstimated =(obj.downholeNetStrokeLength / obj.downholeGrossStrokeLength) * 100.0;
|
||||||
|
obj.fluidBBLMoved = obj.downholeNetStrokeLength * pumpArea * 0.00010307;
|
||||||
|
obj.fluidBBLMovedAdjusted = obj.fluidBBLMoved * kFactor;
|
||||||
|
obj.oilBBLMoved = obj.fluidBBLMoved * oilBBLRatio;
|
||||||
|
obj.waterBBLMoved = obj.fluidBBLMoved * waterBBLRatio;
|
||||||
|
obj.gasMCFMoved = obj.fluidBBLMoved * gasMCFRatio;
|
||||||
|
|
||||||
|
|
||||||
|
if (obj.fillageEstimated > 100)
|
||||||
|
obj.fillageEstimated = 100.0;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (obj.fillageEstimated < 0.0)
|
||||||
|
obj.fillageEstimated = 0.0;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (obj.fillageCalculated > 100)
|
||||||
|
obj.fillageCalculated = 100.0;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (obj.fillageCalculated < 0.0)
|
||||||
|
obj.fillageCalculated = 0.0;
|
||||||
|
end
|
||||||
|
|
||||||
|
obj.fluidLoad = obj.downholeLoadSpan - frictionEstimate;
|
||||||
|
obj.pumpIntakePressure = fluidGradient * rodDepth - (obj.fluidLoad / pumpArea);
|
||||||
|
obj.fluidLevel = obj.pumpIntakePressure / fluidGradient;
|
||||||
|
obj.tubingMovement = 12 * (rodDepth - anchorDepth) * obj.fluidLoad / (30500000 * tubingCSA);
|
||||||
|
obj.structuralLoading = (obj.surfaceLoadMax.load / (structuralRating * 100)) * 100;
|
||||||
|
end
|
||||||
|
|
||||||
|
function calculateSPM(obj)
|
||||||
|
obj.strokeSpeed = 60000.0 / (now - obj.strokeStartTime);
|
||||||
|
end
|
||||||
|
|
||||||
|
function dist = distanceToLine(pos, load)
|
||||||
|
% Finds the distance between a point and a line between the
|
||||||
|
% Max Position at Max Load and Min Position at Min Load
|
||||||
|
x1 = obj.downholePositionMin.position;
|
||||||
|
x2 = obj.downholePositionMax.position;
|
||||||
|
y1 = obj.downholeLoadMin.load;
|
||||||
|
y2 = obj.downholeLoadMax.load;
|
||||||
|
|
||||||
|
dist = abs((y2-y1)* pos - (x2-x1)* load + x2*y1 - y2*x1) / sqrt(power(y2-y1, 2) + power(x2-x1,2));
|
||||||
|
end
|
||||||
|
|
||||||
|
function foundPoint = positionMax(positionArr, loadArr, arrSize)
|
||||||
|
maxPos = positionArr(1);
|
||||||
|
loadAtMaxP = -inf;
|
||||||
|
for i = 1:arrSize
|
||||||
|
maxPos = max(maxPos, positionArr(i));
|
||||||
|
if (maxPos == positionArr(i))
|
||||||
|
loadAtMaxP = loadArr(i);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
foundPoint = LPPair(maxPos, loadAtMaxP);
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function foundPoint = positionMin(positionArr, loadArr, arrSize)
|
||||||
|
minPosition = positionArr(1);
|
||||||
|
loadAtMinP = inf;
|
||||||
|
for i = 1:arrSize
|
||||||
|
minPosition = min(minPosition, positionArr(i));
|
||||||
|
if (minPosition == positionArr(i))
|
||||||
|
loadAtMinP = loadArr(i);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
foundPoint = LPPair(minPosition, loadAtMinP);
|
||||||
|
end
|
||||||
|
|
||||||
|
function foundPoint = loadMax(positionArr, loadArr, arrSize)
|
||||||
|
maxLoad = loadArr(1);
|
||||||
|
posAtMaxL = -inf;
|
||||||
|
for i = 1:arrSize
|
||||||
|
maxLoad = max(maxLoad, loadArr(i));
|
||||||
|
if (maxLoad == positionArr(i))
|
||||||
|
posAtMaxL = positionArr(i);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
foundPoint = LPPair(posAtMaxL, maxLoad);
|
||||||
|
end
|
||||||
|
|
||||||
|
function foundPoint = loadMin(positionArr, loadArr, arrSize)
|
||||||
|
minLoad = loadArr(1);
|
||||||
|
posAtMinL = inf;
|
||||||
|
for i = 1:arrSize
|
||||||
|
minLoad = min(minLoad, loadArr(i));
|
||||||
|
if (minLoad == positionArr(i))
|
||||||
|
posAtMinL = positionArr(i);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
foundPoint = LPPair(posAtMinL, minLoad);
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
methods(Static)
|
||||||
|
function yTest = lineResolve(x1, x2, y1, y2, xTest)
|
||||||
|
% Uses the standard line equation to find the y value given x
|
||||||
|
line_m = (y2 - y1) / (x2 - x1);
|
||||||
|
line_b = y1 - line_m * x1;
|
||||||
|
yTest = line_m * xTest + line_b;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
37
Database.m
Normal file
37
Database.m
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
classdef Database < handle
|
||||||
|
properties
|
||||||
|
hostname;
|
||||||
|
username;
|
||||||
|
password;
|
||||||
|
database='poc';
|
||||||
|
port=27017;
|
||||||
|
mongo;
|
||||||
|
end
|
||||||
|
|
||||||
|
methods
|
||||||
|
function obj = Database(hostname, username, password)
|
||||||
|
javaaddpath 'mongo-java-driver-3.4.2.jar';
|
||||||
|
import com.mongodb.*;
|
||||||
|
obj.hostname = hostname;
|
||||||
|
obj.username = username;
|
||||||
|
obj.password = password;
|
||||||
|
credential = MongoCredential.createCredential(obj.username, obj.database, obj.password);
|
||||||
|
obj.mongo = MongoClient(obj.hostname, obj.port);
|
||||||
|
% obj.mongodbconn = mongodatabase(hostname, obj.port, obj.database, 'UserName', username, 'Password', password); %#ok<*NOPTS>
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
methods(Static)
|
||||||
|
function test
|
||||||
|
db = Database('localhost', 'poc_java', 'HenryPump@1903');
|
||||||
|
database = db.mongo.getDatabase(db.database);
|
||||||
|
database.auth(db.username, db.password);
|
||||||
|
cards = database.getCollection('cards');
|
||||||
|
|
||||||
|
cards.count()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
45
DigitalInput.m
Normal file
45
DigitalInput.m
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
classdef DigitalInput < handle
|
||||||
|
properties
|
||||||
|
mux;
|
||||||
|
channel;
|
||||||
|
value;
|
||||||
|
end
|
||||||
|
|
||||||
|
methods
|
||||||
|
function obj = DigitalInput(mux, channel)
|
||||||
|
obj.channel = channel;
|
||||||
|
obj.mux = mux;
|
||||||
|
end
|
||||||
|
|
||||||
|
function val = read(obj)
|
||||||
|
obj.mux.set(obj.channel);
|
||||||
|
val = obj.mux.readDigital();
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
methods(Static)
|
||||||
|
function test
|
||||||
|
pi = raspi('10.0.0.104', 'pi', 'raspberry');
|
||||||
|
mux = MuxSetup(pi);
|
||||||
|
digIn1 = DigitalInput(mux, 1);
|
||||||
|
digIn2 = DigitalInput(mux, 2);
|
||||||
|
digIn3 = DigitalInput(mux, 3);
|
||||||
|
digIn4 = DigitalInput(mux, 4);
|
||||||
|
digIn5 = DigitalInput(mux, 5);
|
||||||
|
digIn6 = DigitalInput(mux, 6);
|
||||||
|
digIn7 = DigitalInput(mux, 7);
|
||||||
|
digIn8 = DigitalInput(mux, 8);
|
||||||
|
|
||||||
|
digIn1Val = digIn1.read()
|
||||||
|
digIn2Val = digIn2.read()
|
||||||
|
digIn3Val = digIn3.read()
|
||||||
|
digIn4Val = digIn4.read()
|
||||||
|
digIn5Val = digIn5.read()
|
||||||
|
digIn6Val = digIn6.read()
|
||||||
|
digIn7Val = digIn7.read()
|
||||||
|
digIn8Val = digIn8.read()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
76
DigitalOutput.m
Normal file
76
DigitalOutput.m
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
classdef DigitalOutput < handle
|
||||||
|
properties
|
||||||
|
channel;
|
||||||
|
dev;
|
||||||
|
end
|
||||||
|
methods
|
||||||
|
function writeOut(obj, value)
|
||||||
|
writeDigitalPin(obj.dev, obj.channel, value);
|
||||||
|
end
|
||||||
|
|
||||||
|
function obj = DigitalOutput(dev, chan)
|
||||||
|
channel = 0;
|
||||||
|
switch chan
|
||||||
|
case 1
|
||||||
|
channel = 21;
|
||||||
|
case 2
|
||||||
|
channel = 20;
|
||||||
|
case 3
|
||||||
|
channel = 16;
|
||||||
|
case 4
|
||||||
|
channel = 12;
|
||||||
|
case 5
|
||||||
|
channel = 25;
|
||||||
|
case 6
|
||||||
|
channel = 24;
|
||||||
|
case 7
|
||||||
|
channel = 23;
|
||||||
|
case 8
|
||||||
|
channel = 18;
|
||||||
|
end
|
||||||
|
configurePin(dev, channel, 'DigitalOutput');
|
||||||
|
obj.dev = dev;
|
||||||
|
obj.channel = channel;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
methods(Static)
|
||||||
|
function test
|
||||||
|
pi = raspi('10.0.0.104', 'pi', 'raspberry');
|
||||||
|
|
||||||
|
d1 = DigitalOutput(pi, 1);
|
||||||
|
d2 = DigitalOutput(pi, 2);
|
||||||
|
d3 = DigitalOutput(pi, 3);
|
||||||
|
d4 = DigitalOutput(pi, 4);
|
||||||
|
d5 = DigitalOutput(pi, 5);
|
||||||
|
d6 = DigitalOutput(pi, 6);
|
||||||
|
|
||||||
|
d1.writeOut(1);
|
||||||
|
pause(0.250);
|
||||||
|
d2.writeOut(1);
|
||||||
|
pause(0.250);
|
||||||
|
d3.writeOut(1);
|
||||||
|
pause(0.250);
|
||||||
|
d4.writeOut(1);
|
||||||
|
pause(0.250);
|
||||||
|
d5.writeOut(1);
|
||||||
|
pause(0.250);
|
||||||
|
d6.writeOut(1);
|
||||||
|
pause(0.250);
|
||||||
|
|
||||||
|
d1.writeOut(0);
|
||||||
|
pause(0.250);
|
||||||
|
d2.writeOut(0);
|
||||||
|
pause(0.250);
|
||||||
|
d3.writeOut(0);
|
||||||
|
pause(0.250);
|
||||||
|
d4.writeOut(0);
|
||||||
|
pause(0.250);
|
||||||
|
d5.writeOut(0);
|
||||||
|
pause(0.250);
|
||||||
|
d6.writeOut(0);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
17
LPPair.m
Normal file
17
LPPair.m
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
classdef LPPair < handle
|
||||||
|
% Load & Position Pair Class
|
||||||
|
properties
|
||||||
|
load;
|
||||||
|
position;
|
||||||
|
end
|
||||||
|
methods
|
||||||
|
function obj=LPPair(position, load)
|
||||||
|
obj.position = position;
|
||||||
|
obj.load = load;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
15
LPStatus.m
Normal file
15
LPStatus.m
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
classdef LPStatus < handle
|
||||||
|
% Load, Position, & Status Class
|
||||||
|
properties
|
||||||
|
load;
|
||||||
|
position;
|
||||||
|
status;
|
||||||
|
end
|
||||||
|
methods
|
||||||
|
function obj=LPPair(position, load, status)
|
||||||
|
obj.position = position;
|
||||||
|
obj.load = load;
|
||||||
|
obj.status = status;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
63
MuxSetup.m
Normal file
63
MuxSetup.m
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
classdef MuxSetup < handle
|
||||||
|
properties(Access=private)
|
||||||
|
mux1Pin=5;
|
||||||
|
mux2Pin=6;
|
||||||
|
mux3Pin=13;
|
||||||
|
digInPin=19;
|
||||||
|
anOutTriggerPin=23;
|
||||||
|
dev;
|
||||||
|
end
|
||||||
|
|
||||||
|
properties
|
||||||
|
setup=[0 0 0; 1 0 0; 0 1 0; 1 1 0; 0 0 1; 1 0 1; 0 1 1; 1 1 1];
|
||||||
|
spiDevice;
|
||||||
|
end
|
||||||
|
|
||||||
|
methods
|
||||||
|
function obj = MuxSetup(dev)
|
||||||
|
obj.dev = dev;
|
||||||
|
configurePin(dev, obj.mux1Pin, 'DigitalOutput');
|
||||||
|
configurePin(dev, obj.mux2Pin, 'DigitalOutput');
|
||||||
|
configurePin(dev, obj.mux3Pin, 'DigitalOutput');
|
||||||
|
configurePin(dev, obj.digInPin, 'DigitalInput');
|
||||||
|
configurePin(dev, obj.anOutTriggerPin, 'DigitalOutput');
|
||||||
|
obj.spiDevice = spidev(dev, 'CE0');
|
||||||
|
end
|
||||||
|
|
||||||
|
function set(obj, channel)
|
||||||
|
% Set the mux up for reading from a channel
|
||||||
|
if (channel > 0) && (channel <= 8)
|
||||||
|
writeDigitalPin(obj.dev, obj.mux1Pin, obj.setup(channel, 1));
|
||||||
|
writeDigitalPin(obj.dev, obj.mux2Pin, obj.setup(channel, 2));
|
||||||
|
writeDigitalPin(obj.dev, obj.mux3Pin, obj.setup(channel, 3));
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function digInVal = readDigital(obj)
|
||||||
|
% Read the value of a digital input after setting the Mux
|
||||||
|
digInVal = ~readDigitalPin(obj.dev, obj.digInPin);
|
||||||
|
end
|
||||||
|
|
||||||
|
function analogValue = readAnalogSPI(obj)
|
||||||
|
enableSPI(obj.dev);
|
||||||
|
analogValue = -1;
|
||||||
|
analogRaw = writeRead(obj.spiDevice,[hex2dec('00') hex2dec('00') hex2dec('00')]);
|
||||||
|
if (analogRaw(3) == 13)
|
||||||
|
x = uint16(analogRaw(1)) * 256;
|
||||||
|
analogValue = x + uint16(analogRaw(2));
|
||||||
|
end
|
||||||
|
% disableSPI(obj.dev);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
methods(Static)
|
||||||
|
function test
|
||||||
|
pi = raspi('10.0.0.104', 'pi', 'raspberry');
|
||||||
|
mux = MuxSetup(pi);
|
||||||
|
mux.set(1);
|
||||||
|
mux.readAnalogSPI()
|
||||||
|
mux.set(2);
|
||||||
|
mux.readAnalogSPI()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
BIN
mongo-java-driver-3.4.2.jar
Normal file
BIN
mongo-java-driver-3.4.2.jar
Normal file
Binary file not shown.
Reference in New Issue
Block a user