NXC sensory

Z Systemy operacyjne i sieci komputerowe
Przejdź do nawigacji Przejdź do wyszukiwania

Czujnik dotyku (touch sensor)

Na początek prosty przykład wzięty wprost z dokumentacji.

task main()
{
SetSensor(IN_1,SENSOR_TOUCH);
OnFwd(OUT_AC, 75);
until (SENSOR_1 == 1);
Off(OUT_AC);
}

SetSensor(IN_1,SENSOR_TOUCH) Podajemy do którego portu podłączyliśmy sensor i jakiego jest typu. W naszym przypadku podpięliśmy czujnik dotyku do portu 1.

until (SENSOR_1 == 1)wcześniejsza instrukcja, czyli jazda robota, będzie się odbywała dopóki (until) nie zostanie wciśnięty przycisk na czujniku dotyku (1 oznacza wciśnięty przycisk, 0 nie wciśniety).

Robot będzie jechał do przodu tak długo, dopóki nie zostanie wciśnięty przycisk na czujniku.

task main()
{
SetSensor(IN_1,SENSOR_TOUCH);
while (true)
      {
      if (SENSOR_1 == 1)
      Off(OUT_AC);
        else
       OnFwd(OUT_AC, 75);
      }
}

Robot będzie jechał, jeśli przycisk nie jest wciśnięty, jeśli zostanie wciśnięty robot się zatrzyma. Jak widać jest to pętla, której warunek zawsze jest spełniony, więc jeśli przycisk zostanie zwolniony to robot będzie jechał dalej.

task main()
{
SetSensorTouch(IN_1);
OnFwd(OUT_AC, 75);
while (true)
{
if (SENSOR_1 == 1)
{
OnRev(OUT_AC, 75); Wait(300);
OnFwd(OUT_A, 75); Wait(300);
OnFwd(OUT_AC, 75);
}
}
}

SetSensorTouch(IN_1) Do uruchomiania czujnika dotyku użyliśmy innego nić wcześniej polecenia.

Robot będzie jechać do przodu. Jeśli przycisk zostanie wciśnięty, robot cofnie się OnRev(OUT_AC, 75), następnie skręci OnFwd(OUT_A, 75) i ruszy naprzód OnFwd(OUT_AC, 75). Jak widać zostało to wprowadzone w pętli, dlatego jeśli robot ruszy i będzie kolejna przeszkoda to będzie szukać wciąż wyjścia skręcając.

Czujnik ultradźwięków (Ultrasonic sensor)

task main(){
SetSensorLowspeed(IN_4);
while(true){
OnFwd(OUT_AC,75);
while(SensorUS(IN_4)>20);
Off(OUT_AC);
OnRev(OUT_C,100);
Wait(800);
}
}
task main(){
SetSensorUltrasonic(IN_4);
while(true){
OnFwd(OUT_AC,75);
while(SensorUS(IN_4)>20);
Off(OUT_AC);
OnRev(OUT_C,100);
Wait(800);
}
}

Oba programy działają identycznie. Różnią się tylko jedną linią służącą do inicjacji czujnika. Możemy użyć SetSensorLowspeed(IN_4) lub SetSensorUltrasonic(IN_4).

SensorUS(IN_4)>20 SensorUS służy do odczytu danych z czujnika, wartości podawane są w cm.

Myślę, że kod jest przejrzysty i nie trzeba go dokładnie tłumaczyć.

task main(){
    SetSensorUltrasonic(IN_4);
    while(true){
        Wait(500);
        ClearScreen();
        NumOut(0, 0, SensorUS(IN_4));
               }
            }

Wait(500)Ten postój na początku jest wskazany, gdyż czujnik musi dokonać pomiaru.

ClearScreen() Wyczyszczenie wyświetlacza.

NumOut(0, 0, SensorUS(IN_4))Wyświetlenie wyniku pomiaru na ekranie.


Czujnik koloru (color sensor)

task main(){
    while(true){
        SetSensorColorFull(IN_3);
        Wait(300);
        ClearScreen();
        NumOut(0,0, SENSOR_3);
               }
           }

SetSensorColorFull(IN_3) Inicjacja czujnika koloru na porcie 3.

NumOut(0,0, SENSOR_3) wyświetlenie wartości pomiaru od 1 do 6 (od czarnego do białego).

task main(){
    while(true){
        SetSensorColorFull(IN_3);
        Wait(300);
        ClearScreen();
        NumOut(0,0, SENSOR_3);
        if  (SENSOR_3==1)
        OnFwd(OUT_AC,75);
        else
        Off(OUT_AC);
              }
          }

if (SENSOR_3==1)Jeśli wartość podana przez czujnik jest równa 1, czyli inaczej jeśli czujnik wykrywa kolor czarny to wtedy robot się porusza. W przeciwnym razie zatrzymuje się.

Czujnik światła (light sensor)

Czujnik światła jest razem z czujnikiem koloru. U mnie nie chce działać, więc wrzucę tylko przykład z dokumentacji.

#define THRESHOLD 40
task main()
{
SetSensorLight(IN_3);
OnFwd(OUT_AC, 75);
while (true)
{
if (Sensor(IN_3) > THRESHOLD)
{
OnRev(OUT_C, 75);
Wait(100);
until(Sensor(IN_3) <= THRESHOLD);
OnFwd(OUT_AC, 75);
}
}
}

Jak widać zdefiniowano wartość progową na 40%. Poruszanie robota jest zależne od pomiaru natężenia światłą odczytywanego przez czujnik.