Advertisement
shadow7777

Untitled

May 21st, 2022
695
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1.  
  2.  
  3. #include <LiquidCrystal.h> //implementacja biblioteki do obslugi wyswietlacza
  4.  
  5. #define ADC_LSB     (5.0/1024)
  6. #define PWM_LSB     (5.0/256)
  7.  
  8. #define PWM_OUTPUT  6
  9. #define Rd          1.0     // kohm
  10. #define Switch
  11.  
  12. LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //definicja pinow wyswietlacza
  13. boolean pomiar = 0; //utworzenie zmiennej sluzacej do rozpoczecia i zakonczenia cyklu pomiaru
  14. boolean stan; //utworzenie zmiennej sluzacej do odczytu stanu przycisku
  15. int liczba_pomiarow = 0;
  16. void setup() {
  17.   lcd.begin(16, 2);
  18.   lcd.print("...");
  19.   pinMode(7, INPUT); //zdeklarowanie pinu 7 jako wejscie
  20. }
  21.  
  22. void loop() {
  23.   stan = digitalRead(7); //odczyt stanu zmiennej
  24. if(stan == HIGH) //sprawdzanie stanu zmiennej
  25. {
  26. pomiar=1; // rozpoczecie cyklu
  27. liczba_pomiarow++; //inkrementacja zmiennej liczacej pomiary
  28. }
  29. if(pomiar == 1) // sprawdzanie stanu zmiennej odpowiadajacej za start cyklu
  30. {
  31. lcd.clear(); //czyszczenie wyswietlacza
  32. delay(100); //opoznienie 100ms
  33.   lcd.setCursor(0, 0); //ustawienie kursora na zadane wspolzedne
  34.   lcd.print("Pomiar nr."); //wyswietlenie tesktu na wyswietlaczu
  35.   lcd.setCursor(12, 0);
  36.   lcd.print(liczba_pomiarow);
  37.  
  38.  
  39.     int a0,a1;
  40.   float u0,u1,u2,i2; //deklaracja zmiennych pomiarowych
  41.  
  42.   a0 = analogRead(A0); //odczyt stanu pinu analogowego
  43.   u0 = a0*ADC_LSB;
  44.  
  45.   analogWrite(PWM_OUTPUT, a0/4);
  46.  
  47.   u1 = analogAverage(A1, 100);//usrednienie wartsoci napiecia
  48.   u2 = analogAverage(A2, 100);
  49.   i2 = (u1-u2) / Rd; //obliczanie natezenia pradu
  50.   if (i2 < 0)
  51.     i2 = 0.0;
  52.  
  53.   lcd.clear();
  54.   delay(500);
  55.   lcd.setCursor(0, 0);
  56.   lcd.print(u0,3);
  57.   lcd.print('V');
  58.  
  59.   lcd.setCursor(8, 0);
  60.   lcd.print(u1,3);
  61.   lcd.print('V');
  62.  
  63.   lcd.setCursor(0, 1);
  64.   lcd.print(u2,3);
  65.   lcd.print('V');
  66.  
  67.   lcd.setCursor(8, 1);
  68.   lcd.print(i2,3);
  69.   lcd.print("mA");
  70.   pomiar = 0;
  71.   delay(500);
  72. }
  73. }
  74.  
  75. float   analogAverage(int input, int time) //fukcja odpowiadajaca za liczenie sredniej arytmetycznej
  76. {
  77.   unsigned long start;
  78.   unsigned long a0 = 0;
  79.   unsigned long count = 0;
  80.   float u0;
  81.  
  82.   start = millis(); //rozpoczecie odliczania
  83.  
  84.   while (millis()-start < time)
  85.   {
  86.     a0 += analogRead(input);
  87.     count ++;
  88.   }
  89.   u0 = a0*ADC_LSB;
  90.   u0 /= count;
  91.   return u0;
  92. }
  93.  
  94.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement