Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define dioda 8
- #define ileDiod 6
- #define przycisk 3
- #define PRINT
- short tryb = 0;
- /* 0 - podaj 1. liczbe
- * 1 - podaj znak
- * 2 - podaj 2. liczbe
- * 0->1->2->1->2->1... */
- short znak = 0;
- /* 0 brak
- * 1 +
- * 2 -
- * 3 *
- * 4 : */
- short liczba = 0; //aktualna liczba
- short pLiczba; //poprzednia liczba
- void setup()
- {
- for (int i = 0; i < 5; ++i)
- pinMode(przycisk + i, INPUT_PULLUP);
- for (int i = 0; i < ileDiod; ++i)
- pinMode(dioda + i, OUTPUT);
- #ifdef PRINT
- Serial.begin(9600);
- #endif
- pokaz(liczba);
- }
- void pokaz(int x)
- {
- #ifdef PRINT
- Serial.println(x);
- #endif
- for (int i = 0; i < ileDiod; i++)
- {
- if (x % 2 == 1)
- digitalWrite(dioda + i, HIGH);
- else
- digitalWrite(dioda + i, LOW);
- x /= 2;
- }
- }
- void pokazZnak(int x)
- {
- #ifdef PRINT
- switch (x)
- {
- case 0: Serial.println('N'); break;
- case 1: Serial.println('+'); break;
- case 2: Serial.println('-'); break;
- case 3: Serial.println('*'); break;
- case 4: Serial.println('/'); break;
- }
- #endif
- for (int i = 0; i < ileDiod; i++)
- digitalWrite(dioda + i, (i == x - 1 ? HIGH : LOW));
- }
- int pow2(int i)
- {
- int x = 1;
- while (i--)
- x *= 2;
- return x;
- }
- bool wprowadzLiczbe()
- {
- bool wait = false;
- if (digitalRead(przycisk) == LOW) //+1
- {
- wait = true;
- pokaz(++liczba);
- }
- else if (digitalRead(przycisk + 1) == LOW) //-1
- {
- wait = true;
- pokaz(--liczba);
- }
- else if (digitalRead(przycisk + 2) == LOW) //*2
- {
- wait = true;
- pokaz(liczba *= 2);
- }
- else if (digitalRead(przycisk + 3) == LOW) //:2
- {
- wait = true;
- pokaz(liczba /= 2);
- }
- else if (digitalRead(przycisk + 4) == LOW) //potwierdz
- {
- return true;
- }
- while(liczba < 0)
- liczba += pow2(ileDiod);
- liczba %= pow2(ileDiod);
- pokaz(liczba);
- if (wait == true)
- delay(1000);
- return false;
- }
- bool wprowadzZnak()
- {
- bool wait = false;
- if (digitalRead(przycisk) == LOW) //+
- {
- wait = true;
- pokazZnak(znak = 1);
- }
- else if (digitalRead(przycisk + 1) == LOW) //-
- {
- wait = true;
- pokazZnak(znak = 2);
- }
- else if (digitalRead(przycisk + 2) == LOW) //*
- {
- wait = true;
- pokazZnak(znak = 3);
- }
- else if (digitalRead(przycisk + 3) == LOW) //:
- {
- wait = true;
- pokazZnak(znak = 4);
- }
- else if (digitalRead(przycisk + 4) == LOW && znak != 0) //potwierdz
- {
- return true;
- }
- if (znak != 0)
- pokazZnak(znak);
- if (wait == true)
- delay(1000);
- return false;
- }
- void loop()
- {
- if (tryb != 1)
- {
- if (wprowadzLiczbe())
- {
- if (tryb != 0)
- {
- switch (znak)
- {
- case 1:
- liczba += pLiczba;
- break;
- case 2:
- liczba = pLiczba - liczba;
- break;
- case 3:
- liczba *= pLiczba;
- break;
- case 4:
- liczba = pLiczba / (liczba != 0 ? liczba : 1);
- break;
- }
- }
- while(liczba < 0)
- liczba += pow2(ileDiod);
- liczba %= pow2(ileDiod);
- pokaz(liczba);
- tryb = 1;
- znak = 0;
- delay(1000);
- }
- }
- else
- {
- if (wprowadzZnak())
- {
- tryb = 2;
- pLiczba = liczba;
- pokaz(liczba = 0);
- delay(1000);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement