#include <Wire.h> // I2C-vel való kommunikálást segíti
#include <LiquidCrystal_I2C.h> // LCD kijelző könyvtára
#include <Servo.h> // Szervó könyvtára
Servo servo1; // 1-es szervo objektum
Servo servo2; // 2-es szervo objektum
int potPin = A0; // A gázpedál (potenciométer) érzékelő pinje
int potertek = 0; // A gázpedál (potenciométer) értéke
int fszam = 0; // Fordulat szám
int servo1szog = 0; // Az 1-es szervo szöge
int servo2szog = 90; // A 2-es szervo szöge alapállapotban
LiquidCrystal_I2C lcd(0x27, 16, 2); // Az LCD kijelző objektum (cím: 0x27, 16x2) ez a fordulatszám mérő
void setup()
{
lcd.init(); // LCD inicializálása
lcd.backlight(); // Háttérvilágítás bekapcsolása
servo1.attach(9); // 1-es szervo csatlakoztatása a 9-es pinre
servo2.attach(10);// 2-es szervo csatlakoztatása a 10-es pinre
servo1.write(0); // 1-es szervo alaphelyzetbe állítása
servo2.write(90); // 2-es szervo alaphelyzetbe állítása
}
void loop() {
potertek = analogRead(potPin); // gázpedál (potenciométer) értékének olvasása
// Az érték növekszik, ha a potenciométer nem az alaphelyzetben van, és nem haladta meg a 8000-es fordulatszámot
if (potertek > 0 && fszam < 8000)
{
// A gázpedál (potenciométer) értékét arányosítjuk a sebességhez, minél nagyobb az érték, annál gyorsabban nő
int gyorsasag = map(potertek, 0, 1023, 1, 20);
fszam += gyorsasag; // A gyorsaság értékének növelése
if (fszam > 8000)
{
fszam = 8000; // A fordulatszám maximum 8000 lehet az érték
}
}
else if (potertek == 0 && fszam > 0)
{
// Ha a potenciométer az alaphelyzetben van, és a változó értéke nagyobb, mint 0 akkor a változó értékét csökkentjük
fszam -= 10; // Csökkentjük az értéket, de legalább 0-ig
}
// Ha a változó értéke eléri a 4000 értéket, az 1-es szervót 90 fokkal elforgatjuk, és a 2-es szervót visszaállítjuk alapállapotba
if (fszam >= 4000)
{
servo1.write(90); // Az 1-es szervo 90 fokra állítása
servo2.write(0); // A 2-es szervo alapállapotba állítása
}
else
{
servo1.write(map(fszam, 0, 8000, 0, 90)); // Az 1-es szervo szögének beállítása 0-90 fok között
servo2.write(map(fszam, 0, 8000, 90, 0)); // A 2-es szervo szögének beállítása 90-0 fok között
}
if (fszam < 4000 && servo1.read() != 0 && servo2.read() != 90)
{
servo1.write(0); // 1-es szervo vissza az alapértelmezett pozícióba
servo2.write(90); // 2-es szervo vissza az alapértelmezett pozícióba
}
lcd.setCursor(2, 0); // LCD kurzor beállítása az első sorba, az első oszlopba
lcd.print("Fordulatszam"); // "Fordulatszám" kiírása az LCD-re
lcd.setCursor(6, 1);
lcd.println(fszam); // A fordulatszám értékének kiírása az LCD-re
delay(10); // Késleltetés a potenciométer olvasásához
}