# Zajęcia OSOYOO
## Dzień 1
**Przygotowanie:** Instalacja biblioteki Robot.h
### Zadanie 1
Napisanie jazdy do przodu bez biblioteki
#### 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++
int speed = 100;
void LPDoPrzodu(){
digitalWrite(26, HIGH);
digitalWrite(28, LOW);
analogWrite(10, speed);
}
```
Trzeba pamiętać by dokładnie jeden pin kierunkowy był włączony w jednym momencie, inaczej silnik się nie poruszy.
Warto utworzyć zmienną "speed", by łatwo zmieniać prędkość silnika, można wykorzystać do obrotu.
### Zadane 2
Pokazujemy jak dołączyć bibliotekę do skryptu.
[Biblioteka do kierowania robotem](/JAT2s2T5Tz-QzEtXqR9djQ)
```
Narzędzia -> Dołącz Biblotekę ZIP
```
Rozmawiamy o tym w jaki sposób nasz robot może się poruszać (przód, tył, sręcanie, stryfe)
Zgrywanie skryptów do robota
### Zadanie 3
Wgranie do robota skryptu *Lesson6 APMode*
Zabawa z robotem, sterowanie aplikacją.
[Lekcja](https://osoyoo.com/2020/05/12/osoyoo-v2-1-robot-car-lesson-6-use-wifi-to-control-an-iot-robot-car/)
[Kod](https://osoyoo.com/picture/V2.1_Arduino_Robot_Car/code/v2smartcar-lesson6B.zip)
---
### Zadanie 4
Tor przeszkód, każdy ma jedną próbę, potem rotacja.
Pierwszą rundę robimy sterowaniem aplikacją. Drugą rundę uczestnicy próbują przejść tor przeszkód pisząc sekwencję ruchów w programie.
``` cpp
//rusz do przodu
delay(4000);
//rusz w prawo
delay(500);
//...
```
Najłatwiejszym sposobem na pisanie kierunków jazdy jest stowrzenie kilku funkcji (doPrzodu(), doTylu(), skrecWPrawo()...) które będą wywoływać odpowiednie funkcje uruchamiania kół z naszej biblioteki,
### Zadanie 5
Konkurs na skrypt na przejechanie to toru na macie (pętli) w jak najktótszym czasie.
---
## Dzień 2
### Zadanie 1 - Line Follower na macie
Głównym pomysł na działanie LineFollowera jest stosunkowo prosty.
Jeżeli linia znajduje się po lewej stronie robota należy skręcić w lewo, jeżeli po prawej - w prawo.
Jeżeli linia jest na środku robot może spokojnie jechać do przodu.
Dodatkowo, dzięki temu że mamy aż 5 czujników można zaprogramować robota aby jechał delikatnie w prawo lub delikatnie w lewo jeżeli linia jest między środkiem a krawędzią pola czujników.
```cpp
//main.cpp
#include "Robot.h"
bool czujniki[5]; //tablica na dane z czujnika koloru
void czujnik_koloru(){ //funkcja czytająca dane z czujników
czujniki[0] = !digitalRead(A4);
czujniki[1] = !digitalRead(A3);
czujniki[2] = !digitalRead(A2);
czujniki[3] = !digitalRead(A1);
czujniki[4] = !digitalRead(A0);
//negacja (operator !) sprawia że wartości 1 będą na czujnikach pod którymi jest czarna linia, a 0 na czujnikach pod którymi jest białe pole
}
void nawiguj(){ //funkcja wyznaczająca kierunek ruchu
czujnik_koloru();
if(czujniki[0]){
//jedz ostro prawo
}
else if(czujniki[4]){
//jedz ostro lewo
}
// tu można dodać delikatne skręcanie
else{
//jedz do przodu
}
}
Robot mojrobot;
void setup(){
}
void loop(){
nawiguj();
}
```
### Zadanie 2
Kończenie LineFollowera, własne projekty uczestników.