Advertisement
Guest User

joystick_arduino_code

a guest
Sep 25th, 2020
511
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1.  
  2. // Variabilele joystick-ului
  3.  
  4. int sX = A0; //Axa x a joystick-ului, intrare analogica
  5. int sY = A1; //Axa y a joystick-ului, intrare analogica
  6. int sSX; //starea lui x, citita de pe sX
  7. int sSY; //starea lui y, citita de pe sY
  8. int sS;
  9.  
  10. // Variabile din joc
  11. int rNum; //un intreg ce reprezinta led-ul care se aprinde
  12. int wins=0; //numara rundele castigate
  13. int highScore=0; //stocheaza cel mai mare numar de runde castigate
  14.  
  15. // Variabile constante ce dau timpul de reactie
  16. const int easy=1000;//1 secunda
  17. const int medium=500;
  18. const int hard=325;
  19. const int extreme=250;
  20.  
  21.  
  22. int ledPins[]={5,2,4,3,6,7,8}; //initializare led-uri
  23. int pinCount=7; //numarul de pini pt led-uri
  24.  
  25. void setup() {
  26.  
  27. Serial.begin(9600);
  28. pinMode(sX, INPUT);
  29. pinMode(sY, INPUT);
  30.  
  31. for (int thisPin = 0; thisPin < pinCount; thisPin++) { //atriuie toti pinii ca iesiri intr-o bucla for
  32. pinMode(ledPins[thisPin], OUTPUT);
  33. }
  34. }
  35.  
  36. void loop() {
  37.  
  38. rNum=random(4); //se genereaza random ce led sa se aprinda
  39. delay(1000);
  40. digitalWrite(ledPins[rNum], HIGH); //se aprinde led-ul respectiv
  41. delay(easy); //dificultatea
  42.  
  43.  
  44. sSX = analogRead(sX); //se citesc intrarile de pe axa x
  45. delay(100);
  46. sSY = analogRead(sY); //se citesc intrarile de pe axa y
  47.  
  48. //se convertesc intrarile de pe axele x si y la 4 variante. 0 si 1023 sunt valorile maxime de pe axele x si y ale joystick-ului.
  49. sS=0;
  50. switch (sSX) {
  51. case 0:
  52. sS=1; // Stanga
  53. break;
  54. case 1023:
  55. sS=2; // Dreapta
  56. break;
  57. }
  58. switch (sSY) {
  59. case 0:
  60. sS=3; // Sus
  61. break;
  62. case 1023:
  63. sS=4; // Jos
  64. break;
  65. }
  66.  
  67. digitalWrite(ledPins[rNum], LOW); //se stinge led-ul ales random, dupa ce s-a ales de la joystick.
  68. if (sS-1==rNum) //se verifica daca aleagerea user-ului este corecta.
  69. {
  70. wins++;
  71. for (int k=0; k<=3; k++) { //se aprinde led-ul verde daca alegerea este corecta
  72. digitalWrite(ledPins[4], HIGH);
  73. delay(50);
  74. digitalWrite(ledPins[4], LOW);
  75. delay(50);
  76. }
  77. }
  78. else
  79. {
  80. if (wins>highScore) { //daca rundele castigate determina un scor mai mare decat cel anterior, scorul se reseteaza
  81. highScore=wins;
  82. wins=0;
  83. }
  84. for (int i=0; i<=3; i++) { //se aprinde led-ul rosu daca optiunea aleasa este gresita
  85. digitalWrite(ledPins[5], HIGH);
  86. delay(50);
  87. digitalWrite(ledPins[5], LOW);
  88. delay(50);
  89. }
  90. //puteti comenta acest for daca nu vreti sa asteptati ca led-ul galben sa termine de numarat scorul
  91. for (int w=0; w<highScore; w++) { //se afiseza scorul prin aprinderea led-ului galben de atatea ori cate runde au fost castigate
  92. digitalWrite(ledPins[6], HIGH);
  93. delay(200);
  94. digitalWrite(ledPins[6], LOW);
  95. delay(200);
  96. }
  97. }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement