|
|
pl:miw:miw08_mindstormscontrolj:nxt_icommand.pl [2008/04/14 10:25] miw utworzono |
pl:miw:miw08_mindstormscontrolj:nxt_icommand.pl [2008/05/20 12:25] gjn |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
% % | |
% Author: Pawel Gutowski pawel.gutowski@gmail.com % | |
% University of Science and Technology AGH in Cracow % | |
% 2008 % | |
% % | |
% % | |
% PortName = 'S1' or % | |
% 'S2' or % | |
% 'S3' or % | |
% 'S4' % | |
% % | |
% MotorName = 'A' or % | |
% 'B' or % | |
% 'C' % | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
:- module(nxt_iCmd,[ | |
nxt_iCmd_open/0, | |
nxt_iCmd_close/0, | |
nxt_iCmd_distance/2, | |
nxt_iCmd_pressed/2, | |
nxt_iCmd_lightPercentage/2, | |
nxt_iCmd_LED/2, | |
nxt_iCmd_loudness/2, | |
nxt_iCmd_batteryMilliVolt/1, | |
nxt_iCmd_playSoundFile/2, | |
nxt_iCmd_stopPlayingSound/0, | |
nxt_iCmd_playTone/2, | |
% motors | |
nxt_iCmd_stopMotor/1, | |
nxt_iCmd_setMotorSpeed/2, | |
nxt_iCmd_getMotorSpeed/2, | |
nxt_iCmd_rotateMotorToAngle/3, | |
nxt_iCmd_getMotorAngle/2, | |
nxt_iCmd_resetMotorAngle/1 | |
]). | |
| |
nxt_iCmd_open:- | |
writeln('Opening connection...'), | |
jpl_call( 'icommand.nxt.comm.NXTCommand' , 'open', [], _), | |
writeln('Configuring connection...'), | |
jpl_call( 'icommand.nxt.comm.NXTCommand' , 'setVerify', [@(true)], _), | |
writeln('Connection established!'). | |
| |
nxt_iCmd_close:- | |
writeln('Closing connection...'), | |
jpl_call( 'icommand.nxt.comm.NXTCommand' , 'close', [], _), | |
writeln('Connection is closed.'). | |
| |
| |
nxt_iCmd_distance(PortName, Dist):- | |
writeln('Getting port handle...'), | |
jpl_get('icommand.nxt.SensorPort', PortName, PortHandle), | |
writeln('Creating ultrasonic sensor object...'), | |
jpl_new('icommand.nxt.UltrasonicSensor', [PortHandle], UltraSonic), | |
writeln('Reading distance from ultrasonic sensor...'), | |
jpl_call( UltraSonic, 'getDistance', [], Dist), | |
writeln('Reading finished.'). | |
| |
nxt_iCmd_pressed(PortName, Pressed):- | |
writeln('Getting port handle...'), | |
jpl_get('icommand.nxt.SensorPort', PortName, PortHandle), | |
writeln('Creating touch sensor object...'), | |
jpl_new('icommand.nxt.TouchSensor', [PortHandle], TouchSensor), | |
writeln('Reading touch sensor state...'), | |
jpl_call( TouchSensor, 'isPressed', [], Pressed), | |
writeln('Reading finished.'). | |
| |
nxt_iCmd_lightPercentage(PortName, LightPercentage):- | |
writeln('Getting port handle...'), | |
jpl_get('icommand.nxt.SensorPort', PortName, PortHandle), | |
writeln('Creating light sensor object...'), | |
jpl_new('icommand.nxt.LightSensor', [PortHandle], LightSensor), | |
writeln('Reading light percentage...'), | |
jpl_call( LightSensor, 'getLightPercent', [], LightPercentage), | |
writeln('Reading finished.'). | |
| |
nxt_iCmd_LED(PortName, IsON):- | |
writeln('Getting port handle...'), | |
jpl_get('icommand.nxt.SensorPort', PortName, PortHandle), | |
writeln('Creating light sensor object...'), | |
jpl_new('icommand.nxt.LightSensor', [PortHandle], LightSensor), | |
writeln('Setting LED state...'), | |
nxt_iCmdHelper_setLEDState(LightSensor, IsON), | |
writeln('Setting finished.'). | |
| |
nxt_iCmd_loudness(PortName, Loudness):- | |
writeln('Getting port handle...'), | |
jpl_get('icommand.nxt.SensorPort', PortName, PortHandle), | |
writeln('Creating Sound sensor object...'), | |
jpl_new('icommand.nxt.SoundSensor', [PortHandle], SoundSensor), | |
writeln('Reading loudness...'), | |
jpl_call( SoundSensor, 'getdBA', [], Loudness), | |
writeln('Reading finished.'). | |
| |
% | |
% Funkcje "dodatkowe" | |
% | |
% | |
nxt_iCmd_batteryMilliVolt(MilliVolt):- | |
writeln('Checking battery millivoltage...'), | |
jpl_call( 'icommand.nxt.Battery' , 'getVoltageMilliVolt', [], MilliVolt). | |
| |
| |
% | |
% Np: iCmd_playSoundFile('Good Job.rso', @(true)). | |
% | |
| |
nxt_iCmd_playSoundFile(SoundName, Repeat):- | |
writeln('Starting sound playing...'), | |
jpl_call( 'icommand.nxt.Sound' , 'playSoundFile', [SoundName, Repeat], _). | |
| |
nxt_iCmd_stopPlayingSound:- | |
writeln('Stopping sound playing...'), | |
jpl_call( 'icommand.nxt.Sound' , 'stopSoundPlayback', [], _). | |
| |
% | |
% Frequency [Hz] | |
% Duration [ms] | |
% | |
| |
nxt_iCmd_playTone(Frequency, Duration):- | |
writeln('Starting tone playing...'), | |
jpl_call( 'icommand.nxt.Sound' , 'playTone', [Frequency, Duration], _). | |
| |
| |
| |
% | |
% Funkcja "stop()" działa - z kodu źródłowego iCommand wynika, że jest to nic innego | |
% jak ustawienie prędkości (mocy?) silnika na 0. | |
% Czy nie istenieje ryzyko spalenia silnika? | |
% | |
| |
nxt_iCmd_stopMotor(MotorName):- | |
jpl_get('icommand.nxt.Motor', MotorName, MotorHandle), | |
jpl_call(MotorHandle, 'stop', [], _). | |
| |
% | |
% Speed [degrees/sec]. | |
% Kierunek obrotu okresla znak +/- predkosci. | |
% | |
| |
nxt_iCmd_setMotorSpeed(MotorName, Speed):- | |
writeln('Setting motor speed...'), | |
Speed >= 0, | |
writeln('Setting forward motor speed...'), | |
jpl_get('icommand.nxt.Motor', MotorName, MotorHandle), | |
jpl_call( MotorHandle, 'setSpeed', [Speed], _), | |
jpl_call( MotorHandle, 'forward', [], _), | |
writeln('Motor is now moving.'). | |
| |
nxt_iCmd_setMotorSpeed(MotorName, Speed):- | |
writeln('Setting motor speed...'), | |
Speed < 0, | |
writeln('Setting backward motor speed...'), | |
jpl_get('icommand.nxt.Motor', MotorName, MotorHandle), | |
writeln('Counting module of Speed...'), | |
NewSpeed is -Speed, | |
write('Module of speed is: '), | |
writeln(NewSpeed), | |
writeln('Setting motor speed...'), | |
jpl_call( MotorHandle, 'setSpeed', [NewSpeed], _), | |
writeln('Starting the backward movement of motor...'), | |
jpl_call( MotorHandle, 'backward', [], _), | |
writeln('Motor is now moving.'). | |
| |
% | |
% UWAGA: | |
% Przy odczycie nie bedzie znany kierunek, lecz tylko predkosc silnika! | |
% iCommand nie daje możlwiości odczytania kierunku obrotu | |
% | |
| |
nxt_iCmd_getMotorSpeed(MotorName, Speed):- | |
writeln('Reading actual motor speed...'), | |
jpl_get('icommand.nxt.Motor', MotorName, MotorHandle), | |
jpl_call(MotorHandle, 'isMoving', [], IsMoving), | |
IsMoving == @(true), | |
jpl_call(MotorHandle, 'getSpeed', [], Speed). | |
| |
nxt_iCmd_getMotorSpeed(MotorName, Speed):- | |
jpl_get('icommand.nxt.Motor', MotorName, MotorHandle), | |
jpl_call(MotorHandle, 'isMoving', [], IsMoving), | |
IsMoving == @(false), | |
Speed = 0. | |
| |
nxt_iCmd_rotateMotorToAngle(MotorName, Angle, Speed):- | |
writeln('Rotating motor to...'), | |
jpl_get('icommand.nxt.Motor', MotorName, MotorHandle), | |
jpl_call( MotorHandle, 'setSpeed', [Speed], _), | |
jpl_call( MotorHandle, 'rotateTo', [Angle, @(true)], _), | |
writeln('Motor is now moving.'). | |
| |
nxt_iCmd_getMotorAngle(MotorName, Angle):- | |
writeln('Reading actual tacho count...'), | |
jpl_get('icommand.nxt.Motor', MotorName, MotorHandle), | |
jpl_call(MotorHandle, 'getTachoCount', [], Angle). | |
| |
nxt_iCmd_resetMotorAngle(MotorName):- | |
writeln('Resetting tacho count...'), | |
jpl_get('icommand.nxt.Motor', MotorName, MotorHandle), | |
jpl_call(MotorHandle, 'resetTachoCount', [], _). | |
| |
| |
% | |
% HELPERS | |
% | |
| |
nxt_iCmdHelper_setLEDState(LightSensor, IsON):- | |
writeln('Checking if LED should be turned ON...'), | |
IsON == @(true), | |
writeln('Yes, LED should be turned ON - turning ON...'), | |
jpl_call( LightSensor, 'activate', [], _), | |
writeln('LED has been turned ON.'). | |
| |
nxt_iCmdHelper_setLEDState(LightSensor, IsON):- | |
writeln('Checking if LED should be turned ON...'), | |
IsON == @(false), | |
writeln('No, LED should be turned OFF - turning OFF...'), | |
jpl_call( LightSensor, 'passivate', [], _), | |
writeln('LED has been turned OFF.'). | |
| |