SHARE
TWEET

Untitled

a guest Jun 19th, 2017 44 in 7 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Servo.h>              // biblioteka do obsługi serwa
  2. #include <LiquidCrystal_I2C.h>  // biblioteka do obsługi I2C dla LCD
  3. #include <Wire.h>               // standardowa biblioteka obslugi I/O Arduino
  4.  
  5. /* Program przygotowany na potrzeby Interdyscyplinarnego Projektu Zespolowego, MTR, 2016/2017 sem. letni
  6. Sklad Grupy projektowej:
  7. *  Dawid Baraniak,
  8. * Piotr Baranowski,
  9. * Marcel Gutek,
  10. * Mikołaj Pietras
  11. */
  12.  
  13. Servo ramie;  // Tworzenie obiektu servo o nazwie "ramie"
  14. // Tworzenie tablicy pozycji serwa z przesunięciem o 22,5 stopnia (zaokraglone int >> liczba calkowita)
  15. int position [1][8] = {11, 34, 56, 79, 101, 124, 146, 169};
  16.  
  17. // Deklaracja tablicy stanow logicznych pinow A,B,C do obslugi multipleksera sygnalow analogowych:
  18. int kanaly [8][3] = {
  19. {0,0,0},  //CH1
  20. {0,0,1},  //CH2
  21. {0,1,0},  //CH3
  22. {0,1,1},  //CH4
  23. {1,0,0},  //CH5
  24. {1,0,1},  //CH6
  25. {1,1,0},  //CH7
  26. {1,1,1}   //CH8
  27. };
  28.  
  29. LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu ukladu LCD (PIN A4)
  30.  
  31.  
  32. // Deklaracja zmiennych
  33. float napieciesensor [8];
  34. float napieciesolar = 0;
  35. int odczytADC = 0;
  36. int k = 0;
  37. float max = 0;
  38.  
  39. void setup() { // Deklaracje pinow
  40.   ramie.attach(3);  // Przypisanie serwa na pinie 3 do stworzonego obiektu
  41.   // Piny wyjsciowe dla obslugi multipleksera (wybor kanalu)
  42.   pinMode(4, OUTPUT);   //A
  43.   pinMode(5, OUTPUT);   //B                                                                                                                                                                                                                                                        
  44.   pinMode(6, OUTPUT);   //C
  45.   lcd.begin(16,2);   // Inicjalizacja LCD 2x16
  46.   lcd.backlight(); // zalaczenie podwietlenia
  47. }
  48.  
  49. void loop() {
  50.   for(int i = 0; i <= 7; i+=1){ //Wybor kanalu pomiarowego multipleksera
  51.     if (kanaly[i][0]==1){
  52.       digitalWrite(4,HIGH);
  53.     }
  54.     else{
  55.       digitalWrite(4,LOW);
  56.     }
  57.     if (kanaly[i][1]==1){
  58.       digitalWrite(5,HIGH);
  59.     }
  60.     else{
  61.       digitalWrite(5,LOW);
  62.     }
  63.     if (kanaly[i][2]==1){
  64.       digitalWrite(6,HIGH);
  65.     }
  66.     else{
  67.       digitalWrite(6,LOW);
  68.     }
  69.     delay(10);
  70.     odczytADC = analogRead (A0);
  71.     napieciesensor[i] = odczytADC *(5.0/1023.0);
  72.     // wybor najwiekszej z pobranych probek
  73.     if(napieciesensor[i] > max){
  74.       max = napieciesensor[i];
  75.       k=i; // Indeks najwiekszej wartosci
  76.     }
  77.   }
  78.   ramie.write(position[0][k]);  // Ustawienie ogniwa w kierunku najwyzszego natezenia swiatla
  79.   delay(50); // Oczekiwanie 0,05 s az serwo osiagnie zadana pozycje
  80.   napieciesolar=analogRead(A1)*(10.0/1023.0);
  81.   // wyswietlanie:
  82.   lcd.setCursor(0,0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)
  83.   lcd.print("Pozycja: ");
  84.   lcd.print(position[0][k]); // Wyswietlenie orientacji panelu
  85.   lcd.print(" d. ");
  86.   lcd.setCursor(0,1); //Ustawienie kursora w pozycji 0,1 (drugi wiersz, pierwsza kolumna)
  87.   lcd.print("U[V] = ");
  88.   lcd.print(napieciesolar); // Wyswietlenie napiecia ogniwa
  89.   delay(20);
  90. }
RAW Paste Data
Want to get better at C?
Learn to code C in 2017
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top