RCX 1.0@ 2.0 - czujnik obrotów przez nqc

Mindstorms, WeDo, Lego Digital Desinger, Stud.io

Moderatorzy: Mod Team, Mod Team

Autor
Wiadomość
Awatar użytkownika
OmenGda
Posty: 873
Rejestracja: 2007-02-05, 21:58
Lokalizacja: Gdańsk
brickshelf: OmenGda

 

RCX 1.0@ 2.0 - czujnik obrotów przez nqc

#1 Post autor: OmenGda »

Hej!
Niedawno udało mi się za pomocą softu zmienić RCX 1.0 na 2.0 - ot taki swapik.
Chcę zrobić małą MOC ale nie znam za dobrze składni nqc a wszelkie tutoriale, które przewertowałem nie pomagają :(
No, przechodząc do sedna sprawy:
muszę w ciągu 10 sekund odczytać pełną ilość obrotów czujnika. Następnie wykonać na tej wartości operacje matematyczne i zaprezentować na wyświetlaczu ostateczny wynik.
Ktoś jest w stanie mi jakoś pomóc? Będę bardzo wdzięczny.
Pozdrawiam
MP
Ostatnio zmieniony 2014-04-20, 10:12 przez OmenGda, łącznie zmieniany 3 razy.
Nie jest sztuką trafić w muchę przednią szybą...
Sztuką jest, zrobić to boczną!

Awatar użytkownika
OmenGda
Posty: 873
Rejestracja: 2007-02-05, 21:58
Lokalizacja: Gdańsk
brickshelf: OmenGda

 

#2 Post autor: OmenGda »

Pomoże ktoś plzzz ?? :-((((
Nie jest sztuką trafić w muchę przednią szybą...
Sztuką jest, zrobić to boczną!

Jetboy

#3 Post autor: Jetboy »

Jak ktoś będzie potrafił, miał czas i ochotę to pomoże. Pisanie kolejnych "pleasów" nic nie da.

Awatar użytkownika
szimonek
Posty: 118
Rejestracja: 2006-06-06, 13:24
Lokalizacja: Legionowo
Kontakt:

#4 Post autor: szimonek »

NQC nie znam zupełnie, nawet na oczy go nie widziałem, ale spróbuję ugryźć temat od strony znanego mi rozwiązania czyli Javy (LeJOS RCX). Aby zliczać obroty musisz mieć pewność, że dostajesz sygnał o każdym kroku, bo jak dasz dużą prędkość rotacyjną czujnika i będziesz go odczytywał zbyt rzadko, to możesz przegapić obrót.
Czujnik rotacyjny w RCX ma bardzo małą rozdzielczość, 16 kroków na cały obrót, czyli 1 krok to 22,5 stopnia. Dodatkowo przy niskiej prędkości obrotowej może błędnie podawać wartości (polecam lekturę na temat tego czujnika u Philo - http://www.philohome.com/sensors/legorot.htm)

W LeJOS użyłbym listenera, który w osobnym wątku "nasłuchuje" na zmiany stanu czujnika. Wartości z czujnika czytałbym w postaci surowej i najpierw nauczył się je interpretować a następnie użył ich do zliczania obrotów.

Przykładowy kod:

Kod: Zaznacz cały

   int countSensorValues = 0;

   Sensor.S1.setTypeAndMode (4, 0x00); // Rotation sensor, read RAW values
   Sensor.S1.activate();
   Sensor.S1.addSensorListener (new SensorListener() {
     public void stateChanged (Sensor src, int oldValue, int newValue) {
       // Tutaj najpierw bym sprawdził jakie wartości sensor zwraca przy użyciu LCD.showNumber(newValue); i obracania sensora przy użyciu axla. Następnie przerobił to na zliczanie obrotów które Ci jest potrzebne np.

       // Dodaj aktualną wartość odczytaną z sensora do zmiennej.
       countSensorValues += newValue;
   });

Ewentualnie możesz to spróbować oprogramować liniowo według algorytmu:

1. Odczytaj wartość początkową z sensora
2. Ustaw licznik pętli na 1
3. Ustaw licznik obrotów na 0
4. W pętli odczytaj wartość sensora, jeśli się zmieniła to sprawdź czy wystąpił pełny obrót
5. Jeśli wystąpił pełny obrót zwiększ licznik obrotów o jeden
6. Zwiększ licznik pętli o 1
7. Uśpij program na 100ms (nie wiem czy to można zrobić w NQC)
8. Wyjdź z pętli po 100 iteracjach (100 * 100ms = 10s)
9. Zaprezentuj wynik
Pozdrawiam
Szymon

Awatar użytkownika
3dom
Adminus Emeritus
Posty: 5639
Rejestracja: 2011-04-18, 20:43
Lokalizacja: Warszawa
brickshelf: 3dom

 

#5 Post autor: 3dom »

Jetboy pisze:Jak ktoś będzie potrafił, miał czas i ochotę to pomoże. Pisanie kolejnych "pleasów" nic nie da.
No popatrz, a jednak dało. Nie wszyscy są na forum codziennie i posty mogą zniknąć w otchłani usuniętych nieprzeczytanych.
...na mieście już ćwierkają wróble... 🐦🐦🐦
nisiia pisze:SMAŻ SIĘ W PIEKLE ZA TE POSPINANE PLEJTY!!!!!!!!

ODPOWIEDZ