# Dokumentacja OSOYOO
## Silniki
### Działanie silników
Silniki mają dwa wejścia, + i -.
Działają podobnie jak potencjometr, w sensie, jeśli podepniesz na odwrót do będą obracać się w drugą stronę
Prędkość jest zależna od napięcia prądu.
Osoyoo rozdziela to na dwa piny, na których będziemy przesyłać w sygnały + i -, a także na pin przez który regulujemy napięcie.
### Piny silników
Każdy z silników ma 3 piny
Dwa cyfrowe, odpowiedzialne za kierunek obrotu
Jedno analogowe, odpowiedzialne za nadanie prędkości
Piny:
1 -> Przód
2 -> Tył
P -> Predkość
| Piny | Przednie Lewe | Przednie Prawe | Tylnie Lewe | Tylnie Prawe |
|:----:|:-------------:|:--------------:|:-----------:|:------------:|
| 1 | 26 | 22 | 7 | 5 |
| 2 | 28 | 24 | 8 | 6 |
| P | 10 | 9 | 12 | 11 |
### Obsługa silników
Każdemu silnikowi trzeba nadać:
1. Kierunek obrotu
2. Prędkość obrotu
Przykładowe wywołanie obrotu (Koło Lewe Przednie, by się obróciło do przodu)
```c++
void LPDoPrzodu(){
digitalWrite(26, HIGH);
digitalWrite(28, LOW);
analogWrite(10, 100);
}
```
Trzeba pamiętać by jeden kierunek był włączony w jednym momencie, inaczej silnik się nie poruszy.
Warto wywołać zmienną "speed", by łatwo zmieniać prędkość silnika, można wykorzystać do obrotu.
## Czujniki
### Serwo i Echolokacja
Można spojrzeć do poprzednich dokumentacji do obsługi.
Tutaj Echolokacja jest podłączona do serwosilnika, wykorzystywane jest to do wyczucia przeszkód przed robotem i na prawo i lewo.
Piny:
Serwo <- 13
Echo <- 31
Trig <- 30
### Czujniki koloru
Sensor składa się z pięciu (5) czujników na które składją się (od lewej):
A4, A3, A2, A1, A0
Czujniki wyczuwają odbijanie się światła od podłoża.
Oddają sygnały bitowe, 1 kiedy się odbija (biały) , 0 kiedy się nie odbija (czarny).
Przykładowe odczytanie terenu:
```c++
String senstr="";
int s0 = digitalRead(A4);
int s1 = digitalRead(A3);
int s2 = digitalRead(A2);
int s3 = digitalRead(A1);
int s4 = digitalRead(A0);
int sensorvalue=32;
//32 jest po to by w przypadku gdzie nigdzie nie wyczuje odbicia nadal miec obraz 00000, zamiast 0
sensorvalue +=s0*16+s1*8+s2*4+s3*2+s4;
senstr= String(sensorvalue,BIN);
senstr=senstr.substring(1,6);
//odcina nam pierwszą cyfrę liczby binarnej, w kazdym przypadku byloby to 1
```
Dzięki niemu możemy odczytać obrazy typu "11100", lub "00011"
które pokazują po której stronie odbija swiatlo i które czujniki to wyczuły.
## Informacje dodatkowe
### Praca Robota
Trzeba pamiętać że robot działa prawidłowo dopiero w momencie odłączenia go od komputera i włączenia zasilenia bateriami.
UWAGA! ROBOT MA DUŻO SIŁY, UWAŻAĆ ŻEBY NIE POLECIAŁ W ŚCIANE.
### Własne biblioteki
Dokumentacja:
https://docs.arduino.cc/learn/contributions/arduino-creating-library-guide
### Lekcje ze strony Osoyoo
Lekcja 1 (Działanie kół):
https://osoyoo.com/2021/09/17/mecanum-wheel-robotic-kit-v2-0-for-arduino-mega2560-lesson-1/
Lekcja 2 (Unikanie przeszkód za pomocą echolokacji):
https://osoyoo.com/2021/09/17/mecanum-wheel-robotic-kit-v2-0-for-arduino-mega2560-lesson-2/
Lekcja 3 (Podążanie za koloerm białym/czarnym):
https://osoyoo.com/2021/09/17/mecanum-wheel-robotic-kit-v2-0-for-arduino-mega2560-lesson-3/