Advertisement
Guest User

arduino 17-10-2019 11:35

a guest
Oct 17th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.78 KB | None | 0 0
  1. #include "labduino.h"
  2. #include <TimerThree.h>
  3.  
  4. #define ON 1
  5. #define OFF 0
  6.  
  7. //Zmienne do temperatury:
  8. int temperatura; //odczyt z analogowego
  9. float tempC; //odczyt z cyfrowego
  10. int temp_zadana = 40; //temperatura zadana
  11.  
  12. //Zmienne do regulatora PI
  13. float wyjscie_regP; //wynik regulatora P
  14. float wyjscie_regI; //wynik regulatora I
  15. int kp = 2; //nastawa wzmocnienia regulatora P
  16. int ki = 1; //nastawa wzmocnienia regulatora I
  17. float uchyb; //roznica temp_zadana - tempC
  18. float sygnal_sterujacy;
  19. int podstawa_calkowania = 0.1;
  20.  
  21. //Inne zmienne
  22. int licznik_na_pol_sek = 0; //do odliczania 0.5 sek w przerwaniu Timer3ISR
  23. unsigned char Pwm_Set = 0; //do reprezantacyjnego programu do mrugania diodami
  24.  
  25. void Timer3ISR() {
  26.   //static boolean output = HIGH; //do mrugania zielona dioda w przycisku trzecim
  27.  
  28.   //INFORMOWANIE O UCHYBIE
  29.   if (uchyb < 0.1*temp_zadana)
  30.   {
  31.     digitalWrite(LED3, ON);
  32.     digitalWrite(LED1, OFF);
  33.     digitalWrite(LED2, OFF);
  34.   }
  35.   if (uchyb > 0.1*temp_zadana)
  36.   {
  37.     digitalWrite(LED3, OFF);
  38.     digitalWrite(LED1, ON);
  39.     digitalWrite(LED2, ON);
  40.   }
  41.  
  42.   //REGULATOR PI
  43.   sygnal_sterujacy = wyjscie_regP + wyjscie_regI;
  44.   uchyb = temp_zadana - tempC;
  45.  
  46.   wyjscie_regI = uchyb*podstawa_calkowania;
  47.  
  48.  
  49.  
  50.  
  51.   //STEROWANIE
  52.  
  53.  
  54.   //ZMIANA TEMPERATURY ZADANEJ - LEWY PRZYCISK ZWIEKSZANIE / PRAWY PRZYCISK ZMNIEJSZANIE
  55.   if (!digitalRead(SW1)) //przycisk pierwszy - zwiekszanie temperatury zadanej
  56.   {
  57.     licznik_na_pol_sek++; //inkrementuj licznik
  58.     if (licznik_na_pol_sek == 5) //jezeli odliczymy 0.5 sek
  59.     {
  60.       temp_zadana++; //zwieksz o jeden
  61.       licznik_na_pol_sek = 0; //zeruj licznik
  62.     }
  63.   }
  64.   else
  65.   {
  66.     //do nothing
  67.   }
  68.  
  69.   if (!digitalRead(SW2)) //przycisk drugi - zmniejszanie temperatury zadanej
  70.   {
  71.     licznik_na_pol_sek++; //inkrementuj licznik
  72.     if (licznik_na_pol_sek == 5) //jezeli odliczymy 0.5 sek
  73.     {
  74.       temp_zadana--; //zwieksz o jeden
  75.       licznik_na_pol_sek = 0; //zeruj licznik
  76.     }
  77.   }
  78.   else
  79.   {
  80.     //do nothing
  81.   }
  82.  
  83.   //do mrugania zielona dioda w przycisku trzecim:
  84.   //digitalWrite(LED3, output); //miganie zielonym przyciskiem
  85.   //output = !output;
  86.  
  87.   Pwm_Set += 10;
  88.   analogWrite(M1_EN, Pwm_Set);
  89.   analogWrite(M2_EN, - Pwm_Set);
  90.   analogWrite(M3_EN, Pwm_Set);
  91.   analogWrite(M4_EN, -Pwm_Set);
  92.  
  93.  
  94.  
  95. }
  96.  
  97. void setup() {
  98.   labduinoSetup();
  99.   sensors.begin();
  100.   Timer3.initialize(100000);
  101.   Timer3.attachInterrupt(Timer3ISR);
  102.  
  103.   Serial.begin(9600);
  104.   if (!sensors.getAddress(sensor, 0))   Serial.println("Nie znaleziono chipu DS18B20");
  105. }
  106.  
  107. void loop() {
  108.   temperatura = analogRead(LM35);
  109.   sensors.requestTemperatures();
  110.   tempC = sensors.getTempC(sensor);
  111.   Serial.println(String(temperatura) + String(" ; ") + String(tempC) + String(" ; ") +  String(temp_zadana));
  112.  
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement