Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.87 KB | None | 0 0
  1. #define dioda 8
  2. #define ileDiod 6
  3. #define przycisk 3
  4. #define PRINT
  5.  
  6. short tryb = 0;
  7. /* 0 - podaj 1. liczbe
  8.  * 1 - podaj znak
  9.  * 2 - podaj 2. liczbe
  10.  * 0->1->2->1->2->1...      */
  11.  
  12. short znak = 0;
  13. /* 0 brak
  14.  * 1 +
  15.  * 2 -
  16.  * 3 *
  17.  * 4 :                      */
  18.  
  19. short liczba = 0;   //aktualna liczba
  20. short pLiczba;      //poprzednia liczba
  21.  
  22. void setup()
  23. {
  24.     for (int i = 0; i < 5; ++i)
  25.         pinMode(przycisk + i, INPUT_PULLUP);
  26.  
  27.     for (int i = 0; i < ileDiod; ++i)
  28.         pinMode(dioda + i, OUTPUT);
  29.  
  30.     #ifdef PRINT
  31.     Serial.begin(9600);
  32.     #endif
  33.  
  34.     pokaz(liczba);
  35. }
  36.  
  37. void pokaz(int x)
  38. {
  39.     #ifdef PRINT
  40.     Serial.println(x);
  41.     #endif
  42.  
  43.     for (int i = 0; i < ileDiod; i++)
  44.     {
  45.         if (x % 2 == 1)
  46.             digitalWrite(dioda + i, HIGH);
  47.         else
  48.             digitalWrite(dioda + i, LOW);
  49.         x /= 2;
  50.     }
  51. }
  52.  
  53. void pokazZnak(int x)
  54. {
  55.     #ifdef PRINT
  56.     switch (x)
  57.     {
  58.     case 0: Serial.println('N'); break;
  59.     case 1: Serial.println('+'); break;
  60.     case 2: Serial.println('-'); break;
  61.     case 3: Serial.println('*'); break;
  62.     case 4: Serial.println('/'); break;
  63.     }
  64.     #endif
  65.  
  66.     for (int i = 0; i < ileDiod; i++)
  67.         digitalWrite(dioda + i, (i == x - 1 ? HIGH : LOW));
  68. }
  69.  
  70. int pow2(int i)
  71. {
  72.     int x = 1;
  73.     while (i--)
  74.         x *= 2;
  75.     return x;
  76. }
  77.  
  78. bool wprowadzLiczbe()
  79. {
  80.     bool wait = false;
  81.  
  82.     if (digitalRead(przycisk) == LOW) //+1
  83.     {
  84.         wait = true;
  85.         pokaz(++liczba);
  86.     }
  87.     else if (digitalRead(przycisk + 1) == LOW) //-1
  88.     {
  89.         wait = true;
  90.         pokaz(--liczba);
  91.     }
  92.     else if (digitalRead(przycisk + 2) == LOW) //*2
  93.     {
  94.         wait = true;
  95.         pokaz(liczba *= 2);
  96.     }
  97.     else if (digitalRead(przycisk + 3) == LOW) //:2
  98.     {
  99.         wait = true;
  100.         pokaz(liczba /= 2);
  101.     }
  102.     else if (digitalRead(przycisk + 4) == LOW) //potwierdz
  103.     {
  104.         return true;
  105.     }
  106.  
  107.     while(liczba < 0)
  108.         liczba += pow2(ileDiod);
  109.     liczba %= pow2(ileDiod);
  110.     pokaz(liczba);
  111.  
  112.     if (wait == true)
  113.         delay(1000);
  114.     return false;
  115. }
  116.  
  117. bool wprowadzZnak()
  118. {
  119.     bool wait = false;
  120.  
  121.     if (digitalRead(przycisk) == LOW) //+
  122.     {
  123.         wait = true;
  124.         pokazZnak(znak = 1);
  125.     }
  126.     else if (digitalRead(przycisk + 1) == LOW) //-
  127.     {
  128.         wait = true;
  129.         pokazZnak(znak = 2);
  130.     }
  131.     else if (digitalRead(przycisk + 2) == LOW) //*
  132.     {
  133.         wait = true;
  134.         pokazZnak(znak = 3);
  135.     }
  136.     else if (digitalRead(przycisk + 3) == LOW) //:
  137.     {
  138.         wait = true;
  139.         pokazZnak(znak = 4);
  140.     }
  141.     else if (digitalRead(przycisk + 4) == LOW && znak != 0) //potwierdz
  142.     {
  143.         return true;
  144.     }
  145.  
  146.     if (znak != 0)
  147.         pokazZnak(znak);
  148.  
  149.     if (wait == true)
  150.         delay(1000);
  151.     return false;
  152. }
  153.  
  154. void loop()
  155. {
  156.     if (tryb != 1)
  157.     {
  158.         if (wprowadzLiczbe())
  159.         {
  160.             if (tryb != 0)
  161.             {
  162.                 switch (znak)
  163.                 {
  164.                 case 1:
  165.                     liczba += pLiczba;
  166.                     break;
  167.                 case 2:
  168.                     liczba = pLiczba - liczba;
  169.                     break;
  170.                 case 3:
  171.                     liczba *= pLiczba;
  172.                     break;
  173.                 case 4:
  174.                     liczba = pLiczba / (liczba != 0 ? liczba : 1);
  175.                     break;
  176.                 }
  177.             }
  178.            
  179.             while(liczba < 0)
  180.                 liczba += pow2(ileDiod);
  181.             liczba %= pow2(ileDiod);
  182.             pokaz(liczba);
  183.  
  184.             tryb = 1;
  185.             znak = 0;
  186.             delay(1000);
  187.         }
  188.     }
  189.  
  190.     else
  191.     {
  192.         if (wprowadzZnak())
  193.         {
  194.             tryb = 2;
  195.             pLiczba = liczba;
  196.             pokaz(liczba = 0);
  197.             delay(1000);
  198.         }
  199.     }
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement