Advertisement
shadow7777

Untitled

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