Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.33 KB | None | 0 0
  1. // Deklaracja pinów odpowiadających diodom LED.
  2. int ledArray[] = {2,3,4};
  3.  
  4. // Pomocnicza zmienna boolean potrzebna do zapamiętania, czy kalibracja została już wykonana.
  5. boolean balanceSet = false;
  6.  
  7. // Zmienne przechowujące wykryte wartości kolorów.
  8. int red = 0;
  9. int green = 0;
  10. int blue = 0;
  11.  
  12. // Tablice zmiennych typu float potrzebne do kalibracji.
  13. float colourArray[] = {0,0,0};
  14. float whiteArray[] = {0,0,0};
  15. float blackArray[] = {0,0,0};
  16.  
  17.  
  18. // Zmienna przechowująca wynik średni kalibracji.
  19. int avgRead;
  20.  
  21. void setup(){
  22.  
  23.   // Ustawienie wyjść na detektor kolorów.
  24.   pinMode(2,OUTPUT);
  25.   pinMode(3,OUTPUT);
  26.   pinMode(4,OUTPUT);
  27.  
  28.   // Rozpoczęcie komunikacji szeregowej.
  29.   Serial.begin(9600);
  30.  
  31. }
  32.  
  33. void loop(){
  34.     checkBalance();
  35.     checkColour();
  36.     printColour();
  37.     }
  38.  
  39. void checkBalance(){
  40.   // Sprawdzenie czy kalibracja została wykonana, jeśli nie, to przeprowadzenie kalibracji.
  41.   if(balanceSet == false){
  42.     setBalance();
  43.   }
  44. }
  45.  
  46. void setBalance(){
  47.   // Rozpoczęcie kalibracji dla koloru białego.
  48.  
  49.   // Opóźnienie pozwalające na swobodne przyłożenie białej próbki do sensora.
  50.    delay(5000);
  51.   // Przejście przez każdą diodę LED i zapisanie wyników do tablicy przechowującej wartości dla koloru białego.
  52.   for(int i = 0;i<=2;i++){
  53.      digitalWrite(ledArray[i],HIGH);
  54.      delay(100);
  55.      getReading(1);
  56.      whiteArray[i] = avgRead;
  57.      digitalWrite(ledArray[i],LOW);
  58.      delay(100);
  59.   }
  60.  
  61.   // Rozpoczęcie kalibracji dla koloru czarnego.
  62.  
  63.   // Opóźnienie pozwalające na swobodne przyłożenie białej próbki do sensora.  
  64.   delay(5000);              
  65.  
  66.     // Przejście przez każdą diodę LED i zapisanie wyników do tablicy przechowującej wartości dla koloru czarnego.
  67.   for(int i = 0;i<=2;i++){
  68.      digitalWrite(ledArray[i],HIGH);
  69.      delay(100);
  70.      getReading(1);
  71.      blackArray[i] = avgRead;
  72.      digitalWrite(ledArray[i],LOW);
  73.      delay(100);
  74.   }
  75.    // Ustawienie zmiennej pomocniczej zapamiętującej stan kalibracji.
  76.   balanceSet = true;
  77.   delay(5000);
  78.   }
  79.  
  80. void checkColour(){
  81.     for(int i = 0;i<=2;i++){
  82.      digitalWrite(ledArray[i],HIGH);  // Włączanie diod RGB.
  83.      delay(100);                      //Opóźnienie pozwalające fotorezystorowi na stabilizację.
  84.      getReading(1);                
  85.      colourArray[i] = avgRead;
  86.      float greyDiff = whiteArray[i] - blackArray[i];      
  87.  
  88.      // Bieżący odczyt - najmniejszy zakres kolorów / możliwy do wykorzystania zakres * 255 - operacja ta zwraca wartości z przedziału od 0 - 255 które odpowiadają natężeniu badanej w danej chwili składowej (R, G lub B).
  89.      colourArray[i] = (colourArray[i] - blackArray[i])/(greyDiff)*255;
  90.      digitalWrite(ledArray[i],LOW);   // Wyłączenie bieżącej diody.
  91.      delay(100);
  92.   }
  93. }
  94. void getReading(int times){
  95.   int reading;
  96.   int tally=0;
  97.  
  98. for(int i = 0;i < times;i++){
  99.    reading = analogRead(0);
  100.    tally = reading + tally;
  101.    delay(10);
  102. }
  103. // Obliczanie i ustawianie średniej.
  104. avgRead = (tally)/times;
  105. }
  106.  
  107. // Ustawienie i przesłanie wszystkich wartości R, G i B dla bieżącego pomiaru.
  108. void printColour(){
  109. Serial.print("R = ");
  110. Serial.println(int(colourArray[0]));
  111. Serial.print("G = ");
  112. Serial.println(int(colourArray[1]));
  113. Serial.print("B = ");
  114. Serial.println(int(colourArray[2]));
  115. delay(2000);
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement