Advertisement
Szerelo

Car index demo

Feb 9th, 2019
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.91 KB | None | 0 0
  1. /*
  2.  * Irányjelző szimulátor
  3.  *
  4.  * A magyar jogszabályok nem teszik lehetővé a fényjelző berendezések módosítását, a gyáritól való eltérés esetén engedélyeztetni kell!
  5.  * Tehát az ismertetésre kerülő megoldás kizárólag játék ill. demonstrációs céllal használható, engedély nélkül közúti forgalomban tilos vele részt venni!
  6.  * Használata kizárólag saját felelősségel történhet.
  7.  *
  8.  * Az áramkör egy darab 1 méteres, WS2812B 60 RGB LED-es szalaggal készült. Ez van 4 részre osztva a 4 irányjelzőnek megfelelően.
  9.  * A példa programban 1-1 irányjelző 12 LED-et tartalmaz, azért, hogy jól láthatóan el legyenek különülve, de a megvalósításkor erre nincs szükség,
  10.  * fel lehet használni az összes LED-et.
  11.  *
  12.  */
  13. #include <Adafruit_NeoPixel.h>  // A WS2812B led szalag meghajtásához szükséges könyvtár. Letölthető innen: https://github.com/adafruit/Adafruit_NeoPixel
  14.  
  15. #define FRONT_DEFAULT_R  128    // Az alapértelmezett szín beállítása, amikor nincs bekapcsolva az irányjelző.
  16. #define FRONT_DEFAULT_G  128    // Ez jelen esetben elől fehér szín fél fényerővel.
  17. #define FRONT_DEFAULT_B  128
  18. #define FRONT_LEFT_START  0     //  A bal első LED sor kezdete a teljes szalagon.
  19. #define FRONT_RIGHT_START  15   //  A jobb első LED sor kezdete a teljes szalagon.
  20.  
  21. #define REAR_DEFAULT_R  128     // Az alapértelmezett szín beállítása, amikor nincs bekapcsolva az irányjelző.
  22. #define REAR_DEFAULT_G  0       // Ez jelen esetben hátul piros szín fél fényerővel.
  23. #define REAR_DEFAULT_B  0
  24. #define REAR_LEFT_START  45     //  A bal hátsó LED sor kezdete a teljes szalagon.
  25. #define REAR_RIGHT_START  30    //  A jobb hátsó LED sor kezdete a teljes szalagon.
  26.  
  27. // Figyelem! Nincs vizsgálva, hogy a LED sorok hossza és kezdő értéke alapján nem kerül-e átfedésbe valamelyik LED sor egy másikkal.
  28.  
  29. #define FRONT_LEFT_DIRECTION  0   // Az irányjelző LED sorokon végigfutó fény iránya.
  30. #define FRONT_RIGHT_DIRECTION  1  // Ez a bekötéstől függ, hogy a felszereléskor ne legyen kötött a huzalozás iránya.
  31. #define REAR_LEFT_DIRECTION  1    // Tetszés szerinti irányban lehessen felszerelni,
  32. #define REAR_RIGHT_DIRECTION  0   // majd ahhoz lehet beállítani a fénysáv futásának az irányát.
  33.  
  34. #define PLAY_R  245             // Ez az irányjelző narancs színének egy lehetséges beállítása, ha valaki nincs megelégedve vele, akkor
  35. #define PLAY_G  98              // itt lehet átállítani a színárnyalatot. Ez 100%-os fényerejű.
  36. #define PLAY_B  10
  37. #define PLAY_PIXEL_LONG  12     // Az irányjelző fénycsík hossza. 60 LED-es szalagnál célszerű 4*15 részre bontani.
  38.  
  39. #define SPEED  100              // A fénycsík futásának sebessége. Az érték csökkentésével gyorsabb lesz.
  40. #define PAUSE  500              // 2 fénycsík közötti várakozási idő, amikor nem világít egyik LED sem. Ez jelen esetben 0,5 sec.
  41.  
  42. #define LEFT_PIN  2             // A balra irány jelzésének bemenete.
  43. #define RIGHT_PIN  3            // A jobbra irány jelzésének bemenete.
  44. #define HSignal_PIN  4          // A vészvillogó bemenete, ilyenkor mind a 4 LED sor egyszerre működik.
  45. #define NC1_PIN  5              // Tervezett fejlesztéshez fenntartva, most nincs használva.
  46.  
  47. #define PIXEL_PIN    6          // A LED szalag vezérlő jele, ide kell kötni a WS2812B szalag IN pontját.
  48.  
  49. #define PIXEL_COUNT 60          // A WS2812B szalag LED-jeinek a száma. Ez tartalmazza mind a 4 irányjelzőt.
  50.  
  51. Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);  // A LED sor kezelő létrehozása a programban, a megadott paraméterek szerint
  52.  
  53. bool State = LOW;               // Állapot jelző, funkciója később lesz ismertetve.
  54.  
  55. void setup() {                  // A kezdeti állapotok beállításai.
  56. //  Serial.begin(115200);       // Hibakereséshez vagy nyomonkövetéshez a soros monitor bekapcsolása.
  57. //  Serial.println("Start");
  58.   strip.begin();                // Elindítjuk a LED szalagot, ezzel törlődik, azaz minden LED kikapcsolt állapotba kerül.
  59.   strip.show();                 // Megjelenítjük a beállított LED állapotot, ezt minden esetben meg kell tenni, hogy látszódjon is a változtatás.
  60.   pinMode(LEFT_PIN, INPUT);     // A bemenetek létrehozása
  61.   pinMode(RIGHT_PIN, INPUT);
  62.   pinMode(HSignal_PIN, INPUT);
  63.   pinMode(NC1_PIN, INPUT);
  64.   pinMode(LEFT_PIN, INPUT_PULLUP);  // És a felhúzó ellenállás bekapcsolása. Ajánlott külső 1k - 10k értékű külső ellenállás használata.
  65.   pinMode(RIGHT_PIN, INPUT_PULLUP);
  66.   pinMode(HSignal_PIN, INPUT_PULLUP);
  67.   pinMode(NC1_PIN, INPUT_PULLUP);
  68.   showDefault();                // Az alapértelmezett fény megjelenítése. A programban ez az elől fehér, hátul pedig piros szín 50%-os fényerővel.
  69. }
  70.  
  71. void loop() {                   // Maga a főprogram, mely ciklikusan hajtódik végre.
  72.   if (digitalRead(HSignal_PIN)==LOW ) {   // A vészvillogó bemenet lekérdezése.
  73.       showHazardSignal();                 // És ha aktív (negatív logika, nulla szintre kapcsolva válik aktívvá)
  74.     }
  75.   if (digitalRead(LEFT_PIN)==LOW )  {     // A balra irány bemenet lekérdezése.
  76.       showLEFT();
  77.     }
  78.   if (digitalRead(RIGHT_PIN)==LOW ) {     // A jobbra irány bemenet lekérdezése.
  79.       showRIGHT();
  80.     }
  81.   if (digitalRead(LEFT_PIN)==HIGH and digitalRead(RIGHT_PIN)==HIGH and digitalRead(HSignal_PIN)==HIGH and State==HIGH) {  // Az alapérték megjelenítésének vizsgálata
  82.     State=LOW;  // Az állapotjelző visszaállítása, hogy ne történjen meg minden loop ciklusban az alapértékek kiírása a LED sorra, mert felesleges.
  83.     showDefault();    // Az alap szín beállítása.
  84.     }
  85. }
  86.  
  87. void showDefault() {    // Az alap szín beállításást elvégző függvény.
  88.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {    // Az irányjelzők hosszának megfelelő hosszú ciklus.
  89.     strip.setPixelColor( i+FRONT_LEFT_START, strip.Color( FRONT_DEFAULT_R, FRONT_DEFAULT_G,FRONT_DEFAULT_B ) );   // A 4 irányjelző alapszíneinek beállítás sorban
  90.     strip.setPixelColor( i+FRONT_RIGHT_START, strip.Color( FRONT_DEFAULT_R, FRONT_DEFAULT_G,FRONT_DEFAULT_B ) );
  91.     strip.setPixelColor( i+REAR_LEFT_START, strip.Color( REAR_DEFAULT_R, REAR_DEFAULT_G,REAR_DEFAULT_B ) );
  92.     strip.setPixelColor( i+REAR_RIGHT_START, strip.Color( REAR_DEFAULT_R, REAR_DEFAULT_G,REAR_DEFAULT_B ) );
  93.   }
  94.     strip.show();     // Az értékek beírása után megjelenítjük a LED soron.
  95. }
  96.  
  97. void showLEFT() {     // A bal oldal irányjelzőinek a kezelésére szolgáló függvény.
  98.   State=HIGH;         // Beállítjuk az állapotjelző, hogy történt irányjelzés.
  99.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {
  100.     strip.setPixelColor( i+FRONT_LEFT_START, strip.Color( 0, 0, 0 ) );  // Kikapcsoljuk az irányjelző LED-jeit.
  101.     strip.setPixelColor( i+REAR_LEFT_START, strip.Color( 0, 0, 0 ) );
  102.   }
  103.   strip.show();     // És ezt megjelenítjük.
  104.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {
  105.     if (FRONT_LEFT_DIRECTION) {
  106.       strip.setPixelColor(i+FRONT_LEFT_START, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );    // Majd a megfelelő irányban sorban bekapcsoljuk a futófényt.
  107.     }
  108.     else {
  109.       strip.setPixelColor(PLAY_PIXEL_LONG-i+FRONT_LEFT_START-1, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );  // Ez a másik irányú futófény.
  110.     }
  111.     if (REAR_LEFT_DIRECTION) {
  112.       strip.setPixelColor(i+REAR_LEFT_START, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  113.     }
  114.     else {
  115.       strip.setPixelColor(PLAY_PIXEL_LONG-i+REAR_LEFT_START-1, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  116.     }
  117.     strip.show();
  118.     delay(SPEED);   // A LED-ek bekapcsolása között eltelt várakozási idő.
  119.   }
  120.   strip.show();
  121.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {
  122.     strip.setPixelColor( i+FRONT_LEFT_START, strip.Color( 0, 0, 0 ) );  // A futófény végén kikapcsoljuk a LED-eket.
  123.     strip.setPixelColor( i+REAR_LEFT_START, strip.Color( 0, 0, 0 ) );
  124.   }
  125.   strip.show();
  126.   delay(PAUSE);   // Majd várakozunk.
  127.   //Serial.println("LEFT END");
  128. }
  129.  
  130. void showRIGHT() {
  131.   State=HIGH;
  132.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {
  133.     strip.setPixelColor( i+FRONT_RIGHT_START, strip.Color( 0, 0, 0 ) );
  134.     strip.setPixelColor( i+REAR_RIGHT_START, strip.Color( 0, 0, 0 ) );
  135.   }
  136.   strip.show();
  137.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {
  138.     if (FRONT_RIGHT_DIRECTION) {
  139.       strip.setPixelColor(i+FRONT_RIGHT_START, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  140.     }
  141.     else {
  142.       strip.setPixelColor(PLAY_PIXEL_LONG-i+FRONT_RIGHT_START-1, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  143.     }
  144.     if (REAR_RIGHT_DIRECTION) {
  145.       strip.setPixelColor(i+REAR_RIGHT_START, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  146.     }
  147.     else {
  148.       strip.setPixelColor(PLAY_PIXEL_LONG-i+REAR_RIGHT_START-1, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  149.     }
  150.     strip.show();
  151.     delay(SPEED);
  152.   }
  153.   strip.show();
  154.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {
  155.     strip.setPixelColor( i+FRONT_RIGHT_START, strip.Color( 0, 0, 0 ) );
  156.     strip.setPixelColor( i+REAR_RIGHT_START, strip.Color( 0, 0, 0 ) );
  157.   }
  158.   strip.show();
  159.   delay(PAUSE);
  160. }
  161.  
  162. void showHazardSignal() {
  163.   State=HIGH;
  164.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {
  165.     strip.setPixelColor( i+FRONT_LEFT_START, strip.Color( 0, 0, 0 ) );
  166.     strip.setPixelColor( i+REAR_LEFT_START, strip.Color( 0, 0, 0 ) );
  167.     strip.setPixelColor( i+FRONT_RIGHT_START, strip.Color( 0, 0, 0 ) );
  168.     strip.setPixelColor( i+REAR_RIGHT_START, strip.Color( 0, 0, 0 ) );
  169.   }
  170.   strip.show();
  171.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {
  172.     if (FRONT_LEFT_DIRECTION) {
  173.       strip.setPixelColor(i+FRONT_LEFT_START, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  174.     }
  175.     else {
  176.       strip.setPixelColor(PLAY_PIXEL_LONG-i+FRONT_LEFT_START-1, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  177.     }
  178.     if (REAR_LEFT_DIRECTION) {
  179.       strip.setPixelColor(i+REAR_LEFT_START, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  180.     }
  181.     else {
  182.       strip.setPixelColor(PLAY_PIXEL_LONG-i+REAR_LEFT_START-1, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  183.     }
  184.     if (FRONT_RIGHT_DIRECTION) {
  185.       strip.setPixelColor(i+FRONT_RIGHT_START, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  186.     }
  187.     else {
  188.       strip.setPixelColor(PLAY_PIXEL_LONG-i+FRONT_RIGHT_START-1, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  189.     }
  190.     if (REAR_RIGHT_DIRECTION) {
  191.       strip.setPixelColor(i+REAR_RIGHT_START, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  192.     }
  193.     else {
  194.       strip.setPixelColor(PLAY_PIXEL_LONG-i+REAR_RIGHT_START-1, strip.Color( PLAY_R, PLAY_G, PLAY_B ) );
  195.     }
  196.     strip.show();
  197.     delay(SPEED);
  198.   }
  199.   strip.show();
  200.   for (char i=0;i<PLAY_PIXEL_LONG;i++) {
  201.     strip.setPixelColor( i+FRONT_LEFT_START, strip.Color( 0, 0, 0 ) );
  202.     strip.setPixelColor( i+REAR_LEFT_START, strip.Color( 0, 0, 0 ) );
  203.     strip.setPixelColor( i+FRONT_RIGHT_START, strip.Color( 0, 0, 0 ) );
  204.     strip.setPixelColor( i+REAR_RIGHT_START, strip.Color( 0, 0, 0 ) );
  205.   }
  206.   strip.show();
  207.   delay(PAUSE);
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement