Fejlesztői dokumentáció - GaborPinter/Automatikus_parkolohaz Wiki

Feladatunk egy automatikus parkolóház elkészítése volt, ennek a fejlesztői részét szeretnénk bemutatni.

Az első sorban a for ciklussal bejárjuk a számokat 63-től 58-ig csökkenő sorrendben. Ezután a sleep metódust felhasználva megállítjuk a ciklust egy rövid időre, majd újraindul. Betöltjük egy tömbe a számokat, kivéve az 59-et és adunk nekik piros színt. Ezután pedig a megjelenés előtti pixelt kikapcsoljuk. Végül kiíratjuk a t tömböt és a sorompót.

A következő probléma az a parkoló autók kiválasztása és a helyükre beparkoló autók helyének kiválasztása volt. Szerettük volna a legtöbb birtokunkba lévő eszközre valamit programozni, ilyen volt a joystick is. A tervünk az volt, hogy a jobbra és balra joystickoláskor a parkolóba lévő szabad, illetve a távozó autót válasszuk ki, előbbit sárga színnel, míg utóbbit zöld színnel jeleztük. Erre a problémára az alábbi programot használtuk: for event in sense.stick.get_events(): if event.action == "released": if event.direction == "left": sense.set_pixel(x,y,green) if event.direction == "right": sense.set_pixel(x,y,yellow) A kódot néhány mondatban szeretnénk részletezni. Az első sorban bejárjuk a Sense Hat-nak a joystick eseményeit. A második sorban feltételt írtunk, a további sor akkor fusson le, amikor elengedtük a joystickot és visszaugrik az elejére. A további sorokban látható még egy if, attól függ, hogy balra vagy jobbra húzzuk a sticket, sárga színű lesz a pixel, illetve zöld. Miután ezt sikeresen megcsináltuk, már találkoztunk is a következő problémával. Ki tudtuk választani azokat a területeket is, ahol parkolt autó, így az új autó rá tudott parkolni, illetve amikor azt akartuk, hogy egy parkoló autó hagyja el a parkolót, akkor ki tudtuk választani azokat a helyeket is, ahol nem állt parkoló. Ezen felül még az is előfordult, hogy miután kiválasztottuk a helyet és elváltottunk róla, törölte az ott lévő színt. Ezeket a problémákat úgy orvosoltuk, hogy elmentettük a pixelek színét, így ha elváltunk róla, akkor ugyanúgy törli, de olyan gyorsan beszínezi, hogy az emberi szem nem látja. Azt pedig, hogy az foglalt pixeleket ne tudjuk kiválasztani, létrehoztunk mindegyik helyre egy bool változójót, amiknek alapból False volt az értéke és ha a hely foglalt, akkor megváltoztattuk az értékét True-ra. Ezután már csak egy if metódussal kellet rászűrnünk azokra a helyekre, ahol az érték False.

Az adatbázisunk egy MySQL szerver, ebben a következő információkat tároljuk: a felhasználó azonosítója, a felhasználó neve, az autó rendszáma, a felhasználó bankkártyaszáma. A MySQL egy többfelhasználós, többszálú, SQL-alapú relációs adatbázis-kezelő szerver. Ez az egyik legismertebb a világon, ennek az oka az, hogy költséghatékony és egyszerűen lehet kezelni, továbbá teljesen nyílt forráskódú.

Első sorban telepíteni kellett a raspberry készülékünkre a MySQL-t a terminálon keresztül. Ezt a „sudo apt install mariadb-server” parancsal tudjuk megtenni. A telepítés előtt ellenőrizzük, hogy kapcsolódtunk-e a hálózathoz, mert szükséges. A telepítés befejezését követően létre kell hoznunk egy felhasználót, aminek admin jogosultságot kell adnunk, így létre tudjuk hozni az adatbázisunkat. Ezt a következő paranccsal tudjuk megtenni: CREATE USER ’pelda’@’localhost’ IDENTIFIED BY ’jelszo’; Most már be tudunk lépni: mysql -u pelda -p Kérni fogja az előbb megadott jelszót: jelszo Utolsó lépésként hozzuk létre az adatbázist és a táblát: CREATE DATABASE ’adatbazisnev’; CREATE TABLE autok (…); Most már csak az a feladatunk, hogy a python programunk és a mariadb szerver között megteremtsük a kapcsolatot, ezt az alábbi kóddal tettük meg: mariadb_connection = mariadb.connect(user ='mark', password = '123456', host = 'Localhost', port = '3306') create_cursor = mariadb_connection.cursor() create_cursor.execute("USE adatbazis") Végül az sql paranccsal kapott eredményeket egy tömbbe raktuk, amit a későbbi belépéskor használtunk fel: create_cursor.execute('SELECT id FROM autok Order by id desc LIMIT 1') eredmeny = create_cursor.fetchall() eredmeny2 = [i[0] for i in eredmeny]