diff --git a/source/EV3.m b/source/EV3.m index 0d970ec3d56090fefd05ef2e954c84fbf7c518d9..e371dd66ab9b8d7cec88b2365f0b4fa55dd4a744 100644 --- a/source/EV3.m +++ b/source/EV3.m @@ -245,154 +245,42 @@ classdef EV3 < handle % % Example % b = EV3(); - % b.connect('ioType', 'bt', 'serPort', '/dev/rfcomm0'); + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % % do stuff % b.disconnect(); % -% if ~ev3.isConnected -% error('EV3::connect: No brick connected.'); -% end - - % Disconnect motors - % -> set references to brick object to 0 + % Disconnect motors and sensors + % -> set references to comm handle to 0 ev3.motorA.disconnect(); ev3.motorB.disconnect(); ev3.motorC.disconnect(); ev3.motorD.disconnect(); - % Disconnect sensors - % -> set references to brick object to 0 ev3.sensor1.disconnect(); ev3.sensor2.disconnect(); ev3.sensor3.disconnect(); ev3.sensor4.disconnect(); - % Delete handle to brick object - if isBrickValid(ev3.brick) && ev3.brick ~= 0 - ev3.brick.delete(); + % Delete handle to comm-interface + if isCommInterfaceValid(ev3.commInterface) && ev3.commInterface ~= 0 + ev3.commInterface.delete(); end - ev3.brick = 0; + ev3.commInterface = 0; - ev3.isConnected = 0; + ev3.isConnected = false; end - function update(ev3) - %update Updates all Motors and Sensors to current status of their corresponding ports. - % - % Example - % b = EV3(); - % b.connect('ioType', 'bt', 'serPort', '/dev/rfcomm0'); - % % Connect some new motors and sensors, disconnect some others (in 'real life') - % b.update(); - % % Now, virtual brick knows about all new devices and commands can be sent to - % % them - % + %% Device functions + function stopAllMotors(ev3) + %stopAllMotors Sends a stop-command to all motor-ports if ~ev3.isConnected - error('EV3::update: No brick connected.'); - end - - ev3.motorA.update(); - ev3.motorB.update(); - ev3.motorC.update(); - ev3.motorD.update(); - - ev3.sensor1.update(); - ev3.sensor2.update(); - ev3.sensor3.update(); - ev3.sensor4.update(); - end - - %% System functions - function syncMotor = coupleMotors(ev3, varargin) - %coupleMotors Creates and connects a SyncMotor-object using two chosen Motor-objects. - % - % Notes - % * Right now only possible if connection to Brick has been established. - % - % Arguments - % * port ('AB','BA', ...): Motors to 'couple' - % * 'useMotorParams', 0/1/'on'/'off'/'true'/'false': Use first motor's or set own params - % * varargin: other Properties for Motor/SyncMotor (see - % (Sync-)Motor::setProperties(motor, varargin)) - % - % Example - % b = EV3(); b.connect('ioType', 'bt', 'serPort', '/dev/rfcomm0'); - % sync = b.coupleMotors('AB'); % Couple motors A and B using parameters of - % % Motor-object motorA. - % sync2 = b.coupleMotors('CD', 'useMotorParams', 0, 'power', 50, 'debug', 'on'); - % % Couple motors C and D with new object being - % % initialized with default resp. given parameters. - % - - if ~ev3.isConnected - error('EV3::update: No brick connected.'); - end - - % Check input arguments - p = inputParser(); - p.KeepUnmatched = 1; - p.addRequired('port', @(x) isPortValid('SyncMotor', x)); - p.addOptional('useMotorParams', 1, @(x) isBool(x)); - p.parse(varargin{:}); - - useMotorParams = str2bool(p.Results.useMotorParams); - if strcmpi(p.Results.port, 'AB') - motor1 = ev3.motorA; - motor2 = ev3.motorB; - elseif strcmpi(p.Results.port, 'BA') - motor1 = ev3.motorB; - motor2 = ev3.motorA; - elseif strcmpi(p.Results.port, 'AC') - motor1 = ev3.motorA; - motor2 = ev3.motorC; - elseif strcmpi(p.Results.port, 'CA') - motor1 = ev3.motorC; - motor2 = ev3.motorA; - elseif strcmpi(p.Results.port, 'AD') - motor1 = ev3.motorA; - motor2 = ev3.motorD; - elseif strcmpi(p.Results.port, 'DA') - motor1 = ev3.motorD; - motor2 = ev3.motorA; - elseif strcmpi(p.Results.port, 'BC') - motor1 = ev3.motorB; - motor2 = ev3.motorC; - elseif strcmpi(p.Results.port, 'CB') - motor1 = ev3.motorC; - motor2 = ev3.motorB; - elseif strcmpi(p.Results.port, 'BD') - motor1 = ev3.motorB; - motor2 = ev3.motorD; - elseif strcmpi(p.Results.port, 'DB') - motor1 = ev3.motorD; - motor2 = ev3.motorB; - elseif strcmpi(p.Results.port, 'CD') - motor1 = ev3.motorC; - motor2 = ev3.motorD; - elseif strcmpi(p.Results.port, 'DC') - motor1 = ev3.motorD; - motor2 = ev3.motorC; - end - - % Create SyncMotor-object with parameters of motor1 and given parameters - if useMotorParams - syncMotor = SyncMotor(motor1, motor2, p.Results.port, ... - 'Power', motor1.power, ... - 'SpeedRegulation', motor1.speedRegulation, ... - 'BrakeMode', motor1.brakeMode, ... - 'LimitMode', motor1.limitMode, ... - 'LimitValue', motor1.limitValue, ... - 'SmoothStart', motor1.smoothStart, ... - 'SmoothStop', motor1.smoothStop, ... - 'Debug', motor1.debug); - else - syncMotor = SyncMotor(motor1, motor2, p.Results.port, varargin{4:end}); + stopAllMotors(['EV3::beep: Brick-Object not connected physical brick. ',... + 'You have to call ev3.connect(...) first!']); end - % Connect SyncMotor-object to brick handle. - syncMotor.connect(ev3.brick); + ev3.commInterface.outputStopAll(); end %% Sound functions