A Watching the Brick opció nagyon fasza, minden szenzor és encoder állapotát lehet látni realtime is. Ezenkivül a Tools menüben sok más hasznos cucc van.
Egyedüli "gond" amibe az elején belefutottunk, az a csatlakozás volt. Nem elég szimplán párositani bluetoothon a robotot (Windows vagy Bluesoleil), mert kellenek az NXT driverek is. Ebben különbözött a csatlakozás az MSRS-től. Megoldás: párositás törlése a Winből, driver felrak, restart, Bricxcc elindit, vár, majd a listában megjelennek BTH előtaggal és névvel az érzékelt robotok. Tehát nem COM portot kell választani! Utána megy is, a robot kéri a passkey-t és ennyi, kikapcsolás után is egyből csatlakozik.
A leforditott programok a robot flash-jébe kerülnek, és ott is maradnak, utólag is lehet őket futtatni kézzel, gépi beavatkozás nélkül. És a programok a roboton futnak! Meg lehet őket állitani a gépről is, ha szarul sül el valami, és a robotról is. VPL-ben ezzel szopás van, és szerintem ha a robot kimegy a bluetyúk hatókörből, akkor szinte biztos, hogy a VPL program is megbolondul, ez nem :D
Na akkor jöhetnek a programok:
Egyszerű előre-hátra mozgás
#include "NXCDefs.h"
task main(){
OnFwd(OUT_BC, 30);
Wait(2000);
OnRev(OUT_BC, 40);
Wait(2000);
Off(OUT_BC);
Szenzoros mozgás
Előre megy addig, amig a touch szenzor nem ér el vmit, vagy az ultrasonic 20 cm-nél közelibb távot érzékel, vagy a light szenzor 30-nál kisebb intenzitást érzékel(bekapcsolt fénnyel), vagyis ha nekimegy valami alsó tárgynak, amit az ultrasonic nem érzékel, vagy közel kerül vmihez, vagy vége az asztalnak :)
#include "NXCDefs.h"
#define THRESHOLD 30
#define NEAR 20
#define VOL 7
task music()
{
while (true)
{
PlayTone(784,73);
Wait(75);
PlayTone(740,73);
Wait(75);
PlayTone(659,73);
Wait(75);
PlayTone(587,73);
Wait(75);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(188);
PlayTone(784,73);
Wait(75);
PlayTone(740,73);
Wait(75);
PlayTone(659,73);
Wait(75);
PlayTone(587,73);
Wait(75);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(188);
PlayTone(587,16);
Wait(18);
PlayTone(659,17);
Wait(19);
PlayTone(659,17);
Wait(19);
PlayTone(587,17);
Wait(19);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(38);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(38);
PlayTone(587,16);
Wait(18);
PlayTone(659,17);
Wait(19);
PlayTone(659,17);
Wait(19);
PlayTone(587,17);
Wait(19);
PlayTone(659,35);
Wait(37);
PlayTone(659,17);
Wait(19);
PlayTone(587,17);
Wait(19);
PlayTone(659,16);
Wait(18);
PlayTone(659,36);
Wait(38);
PlayTone(659,17);
Wait(19);
PlayTone(880,35);
Wait(37);
PlayTone(784,36);
Wait(38);
PlayTone(784,16);
Wait(18);
PlayTone(587,17);
Wait(19);
PlayTone(659,36);
Wait(38);
PlayTone(587,16);
Wait(18);
PlayTone(659,36);
Wait(38);
PlayTone(587,17);
Wait(19);
PlayTone(659,35);
Wait(75);
PlayTone(659,35);
Wait(37);
PlayTone(659,36);
Wait(38);
PlayTone(659,35);
Wait(75);
PlayTone(587,16);
Wait(18);
PlayTone(587,17);
Wait(19);
PlayTone(587,36);
Wait(38);
PlayTone(587,16);
Wait(18);
PlayTone(587,17);
Wait(19);
PlayTone(494,36);
Wait(38);
PlayTone(440,16);
Wait(18);
PlayTone(392,17);
Wait(19);
PlayTone(330,36);
Wait(38);
PlayTone(330,35);
Wait(37);
}
}
task kar(){
while(true){
OnFwd(OUT_B, 10);
Wait(3000);
Off(OUT_B);
OnRev(OUT_B, 10);
Wait(3000);
Off(OUT_B);
Wait(100);
}
}
task kiir(){
while(true){
ClearScreen();
TextOut(10, 60, "distance:");
NumOut(10, 50, SensorUS(IN_4));
TextOut(10, 40, "light:");
NumOut(10, 30, Sensor(IN_3));
Wait(300);
}
}
task movement()
{
SetSensorLight(IN_3);
SetSensor(IN_1,SENSOR_TOUCH);
SetSensorLowspeed(IN_4);
OnFwd(OUT_AC, 100);
while (true)
{
if (Sensor(IN_3) < THRESHOLD)
{
OnRev(OUT_AC, 75);
Wait(500);
Off(OUT_AC);
OnRev(OUT_A, 75);
Wait(1000);
until(Sensor(IN_3) >= THRESHOLD);
OnFwd(OUT_AC, 100);
}
if ((SensorUS(IN_4) < NEAR) || (SENSOR_1 == 1)){
OnRev(OUT_AC, 75);
Wait(500);
Off(OUT_AC);
OnRev(OUT_A, 75);
Wait(1000);
until((SensorUS(IN_4) >= NEAR) || (SENSOR_1 == 0));
OnFwd(OUT_AC, 100);
}
}
}
task main(){
Precedes(kiir, music, movement, kar);
}
Nincsenek megjegyzések:
Megjegyzés küldése