Danes smo se prebili skozi 3. dan. Smo kar precej napredna skupina, torej se urnik precej prilagaja oz. je tempo izvajanja programa precej hitrejši kot je bilo predvideno. Danes smo poslušali uvod v programski jezik Python ter kako ga nato uporabiti za upravljanje robotov preko vmesnika bluetooth. Zaradi česar je celotna zadeva postala precej boljši izziv in pa predvsem precej bolj zanimiva. Slik na žalost nimam, ker smo pozabili fotoaparat. Se bom pa zato malo posvetil kodi. Morda pa bo komu zanimiv vpogled v programiranje robotka NXT
Koda, ki se izjava na samem kraju zločina – robotku – je spisana v jeziku RobotC. Gre za okleščeno različico jezika C. Koda kaj preveč komplicirana ne postane, saj skrbi le za sprejemanje sporočil in osnovno izvajanje ukazov, ki jih preko sporočil pridobi. Vendar pa koda, s katero sva z Marekom na tekmovanju sledenja črti osvojila tretje mesto, še ni tako napredna in pridobiva samo informacije s senzorjev, ter nato ustrezno poganja motorje. Primer kode RobotC (koda za 3. mesto – seveda ni vse v kodi, je tudi v konstrukciji robotka):
void hitrost(string whichMotor, int hitrost)
{
if(whichMotor == “A”) motor[motorA] = hitrost;
else if(whichMotor == “B”) motor[motorB] = hitrost;
else if(whichMotor == “C”) motor[motorC] = hitrost;
}task main
{SetSensorType(S4, sensorLightActive);
SetSensorType(S1, sensorLightActive);
SetSensorType(S3, sensorSONAR);bFloatDuringInactiveMotorPWM = false;
while(true)
{
if(SensorValue[S1] < 40)
{
hitrost(“B”, 0);
hitrost(“C”, 0);
wait1Msec(20);while(SensorValue[S1] < 40)
{
hitrost(“B”, -50);
hitrost(“C”, 90);
wait1Msec(110);if(SensorValue[S1] > 40) break;
}hitrost(“B”, 80);
}
else if(SensorValue[S4] < 40)
{
hitrost(“B”, 0);
hitrost(“C”, 0);
wait1Msec(20);while(SensorValue[S4] < 40)
{
hitrost(“C”, -50);
hitrost(“B”, 90);
wait1Msec(110);if(SensorValue[S4] > 40) break;
}hitrost(“C”, 80);
}
else
{
hitrost(“B”, 80);
hitrost(“C”, 80);
}
}
}
Več primerov najdete spodaj med povezavami.
Torej z jezikom RobotC smo se spoznali in ukvarjali predvsem 1. ter 2. dan. Danes pa je prišel na vrsto Python, s katerim smo razširili naše zmožnosti. Najboljši bonbonček je seveda upravljanje robotka na daljavo preko bluetooth vmesnika. Zadeva gre približno takole. Na robotku neprestano teče prevedena skripta v RobotC, ki sprejema sporočila skripte spisane v Python jeziku, ki teče na računalniku in pošilja signale glede na naše vnose preko bluetootha robotku. Primer najine kode za upravljanje na daljavo:
Python:
from time import sleep
from msvcrt import *
import nxt.locatorsock = nxt.locator.find_one_brick(host=’00:16:53:03:8A:28′)
brick = sock.connect()
brick.start_program(‘day3PythonPlusC.rtm’)while True:
input=getch()if input == “H”:
word = chr(80) + chr(0) + chr(80) + chr(0) + chr(0)
brick.message_write(0, word)
if input == “P”:
word = chr(80) + chr(0) + chr(80) + chr(0) + chr(1)
brick.message_write(0, word)
if input == “M”:
word = chr(0) + chr(0) + chr(80) + chr(0) + chr(0)
brick.message_write(0, word)
if input == “K”:
word = chr(80) + chr(0) + chr(0) + chr(0) + chr(0)
brick.message_write(0, word)
if input == “q”:
breakbrick.stop_program()
brick = sock.close()
RobotC:
#pragma config(Sensor, S2, touch, sensorTouch)
#pragma fileExtension(“rtm”)
#pragma platform(“NXT”)void izpis(int lWheel, int rWheel)
{
motor[motorB] = rWheel;
motor[motorC] = lWheel;
}
task main()
{
nxtDisplayTextLine(1, “Ready”);
while (true)
{
while (bQueuedMsgAvailable())
{
if (messageParm[2]==1)
{
motor[motorB] = 0;
motor[motorC] = 0;wait1Msec(50);
motor[motorB] = -messageParm[0];
motor[motorC] = -messageParm[1];
}
else if(messageParm[2] == 0)
{
motor[motorB] = messageParm[0];
motor[motorC] = messageParm[1];
}ClearMessage();
}if (message == 0)
{
wait1Msec(5);
continue;
}
}
return;
}
Tako nama je uspešno uspelo prosto premikati robotka preko tipkovnice in bluetooth vmesnika. Jutri nas čaka priprava robotka na žogobrc oz. preprosto igranje nogometa. Morda pridejo tudi kakšne fotke robotka in action
Še vsa koda po datotekah in malo več primerov:

















