Advertisement
MSlomiany

Woltomierz z diodami

Apr 21st, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  Name:      funkcje.ino
  3.  Created:   21.04.2019 19:17:01
  4.  Author:    Michał
  5. */
  6.  
  7. //definiowanie pinów
  8. #define green 11
  9. #define orange 13
  10. #define odczyt A5 //definiowanie przetwornika ADC na pinie A5
  11. //diody niebieskie
  12. #define n1 7
  13. #define n2 6
  14. #define n3 5
  15. #define n4 4
  16. #define n5 3
  17.  
  18. // the setup function runs once when you press reset or power the board
  19. void setup() {
  20.     pinMode(green, OUTPUT);
  21.     pinMode(orange, OUTPUT);
  22.     Serial.begin(9600); //otwarcie transmisji portu COM
  23. }
  24.  
  25. // the loop function runs over and over again until power down or reset
  26. void loop() {
  27.     double wartosc; //zmienna przechowująca dane z przerwornika ADC
  28.     double wartosc_skonwertowana; //zmienna pokazująca dane w V
  29.     wartosc = analogRead(odczyt); //odczyt wartości z przetwornika
  30.     blink(orange, 50); //mignięcie pomarańczowej diody po zapisaniu wartości do zmiennej
  31.     //wyświetlanie zmierzonych wartości na monitorze portu COM
  32.     Serial.print("Wartosc = ");
  33.     Serial.print(wartosc);
  34.     Serial.print("\n");
  35.     wartosc_skonwertowana = convert_double(wartosc, 0, 1020, 0, 5); //konwersja na V
  36.     //wyświetlanie skonwertowanej wartości na monitorze portu COM
  37.     Serial.print(wartosc_skonwertowana);
  38.     Serial.print(" [V]\n");
  39.     setPWM(green, 5); //włączenie zielonej diody
  40.     Serial.println(liczbadiod(wartosc_skonwertowana)); //Sprawdzanie poprawnego działania funkcji przeliczającej volty na liczbę diód
  41.     //uruchomienie niebieskich diód na 2s
  42.     switch (liczbadiod(wartosc_skonwertowana))
  43.     {
  44.         case 1: {
  45.             set(n1);
  46.             delay(2000);
  47.             reset(n1);
  48.             break;
  49.         }
  50.         case 2: {
  51.             set(n1);
  52.             set(n2);
  53.             delay(2000);
  54.             reset(n1);
  55.             reset(n2);
  56.             break;
  57.         }
  58.         case 3: {
  59.             set(n1);
  60.             set(n2);
  61.             set(n3);
  62.             delay(2000);
  63.             reset(n1);
  64.             reset(n2);
  65.             reset(n3);
  66.             break;
  67.         }
  68.         case 4: {
  69.             set(n1);
  70.             set(n2);
  71.             set(n3);
  72.             set(n4);
  73.             delay(2000);
  74.             reset(n1);
  75.             reset(n2);
  76.             reset(n3);
  77.             reset(n4);
  78.             break;
  79.         }
  80.         case 5: {
  81.             set(n1);
  82.             set(n2);
  83.             set(n3);
  84.             set(n4);
  85.             set(n5);
  86.             delay(2000);
  87.             reset(n1);
  88.             reset(n2);
  89.             reset(n3);
  90.             reset(n4);
  91.             reset(n5);
  92.             break;
  93.         }
  94.     default:
  95.         Serial.println("FAIL");
  96.         break;
  97.     }
  98.     setPWM(green, 0); //wyłączenie zielonej diody
  99. }
  100.  
  101. //mapowanie double do int
  102. int liczbadiod(double val) {
  103.     int liczba;
  104.     if (val <= 1) {
  105.         liczba = 1;
  106.     }
  107.     else if (val > 1 && val <= 2) {
  108.         liczba = 2;
  109.     }
  110.     else if (val > 2 && val <= 3) {
  111.         liczba = 3;
  112.     }
  113.     else if (val > 3 && val <= 4) {
  114.         liczba = 4;
  115.     }
  116.     else if (val > 4 && val <= 5) {
  117.         liczba = 5;
  118.     }
  119.     return liczba;
  120. }
  121.  
  122. //włączenie diody
  123. //set(nazwa_wyjścia)
  124. void set(uint8_t nazwa) {
  125.     digitalWrite(nazwa, HIGH);
  126. }
  127.  
  128. //wyłączenie diody
  129. //reset(nazwa_wyjścia)
  130. void reset(uint8_t nazwa) {
  131.     digitalWrite(nazwa, LOW);
  132. }
  133.  
  134. //włączanie diody PWM
  135. //setPWM(nazwa_wyjścia, wartość_wypełnienia(0-255))
  136. void setPWM(uint8_t nazwa, int wartosc) {
  137.     analogWrite(nazwa, wartosc);
  138. }
  139.  
  140. //miganie diody
  141. //blink(nazwa_wyjścia, czas_świecenia)
  142. void blink(uint8_t nazwa, int przerwa) {
  143.     digitalWrite(nazwa, HIGH); //włącza diodę
  144.     delay(przerwa); //czas świecenia
  145.     digitalWrite(nazwa, LOW); //wyłącza diodę
  146. }
  147.  
  148. //miganie przygaszonej diody PWM
  149. //blinkPWM(nazwa_wejścia, wartość_wypełnienia(0-255), czas_świecenia)
  150. void blinkPWM(uint8_t nazwa, int wartosc, int przerwa) {
  151.     analogWrite(nazwa, wartosc);
  152.     delay(przerwa);
  153.     analogWrite(nazwa, 0);
  154. }
  155.  
  156. //funkcja konwertuje wartość z jednego zakresu na drugi
  157. //convert_double(wartość, dolna_granica_1, górna_granica_1, dolna_granica_2, górna_granica_2)
  158. //zwraca wynik w zmiennej typu double
  159. double convert_double(double val, double inmin, double inmax, double outmin, double outmax) {
  160.     return((val - inmin)*(outmax - outmin) / (inmax - inmin) + outmin);
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement