Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Deklaracja pinów odpowiadających diodom LED.
- int ledArray[] = {2,3,4};
- // Pomocnicza zmienna boolean potrzebna do zapamiętania, czy kalibracja została już wykonana.
- boolean balanceSet = false;
- // Zmienne przechowujące wykryte wartości kolorów.
- int red = 0;
- int green = 0;
- int blue = 0;
- // Tablice zmiennych typu float potrzebne do kalibracji.
- float colourArray[] = {0,0,0};
- float whiteArray[] = {0,0,0};
- float blackArray[] = {0,0,0};
- // Zmienna przechowująca wynik średni kalibracji.
- int avgRead;
- void setup(){
- // Ustawienie wyjść na detektor kolorów.
- pinMode(2,OUTPUT);
- pinMode(3,OUTPUT);
- pinMode(4,OUTPUT);
- // Rozpoczęcie komunikacji szeregowej.
- Serial.begin(9600);
- }
- void loop(){
- checkBalance();
- checkColour();
- printColour();
- }
- void checkBalance(){
- // Sprawdzenie czy kalibracja została wykonana, jeśli nie, to przeprowadzenie kalibracji.
- if(balanceSet == false){
- setBalance();
- }
- }
- void setBalance(){
- // Rozpoczęcie kalibracji dla koloru białego.
- // Opóźnienie pozwalające na swobodne przyłożenie białej próbki do sensora.
- delay(5000);
- // Przejście przez każdą diodę LED i zapisanie wyników do tablicy przechowującej wartości dla koloru białego.
- for(int i = 0;i<=2;i++){
- digitalWrite(ledArray[i],HIGH);
- delay(100);
- getReading(1);
- whiteArray[i] = avgRead;
- digitalWrite(ledArray[i],LOW);
- delay(100);
- }
- // Rozpoczęcie kalibracji dla koloru czarnego.
- // Opóźnienie pozwalające na swobodne przyłożenie białej próbki do sensora.
- delay(5000);
- // Przejście przez każdą diodę LED i zapisanie wyników do tablicy przechowującej wartości dla koloru czarnego.
- for(int i = 0;i<=2;i++){
- digitalWrite(ledArray[i],HIGH);
- delay(100);
- getReading(1);
- blackArray[i] = avgRead;
- digitalWrite(ledArray[i],LOW);
- delay(100);
- }
- // Ustawienie zmiennej pomocniczej zapamiętującej stan kalibracji.
- balanceSet = true;
- delay(5000);
- }
- void checkColour(){
- for(int i = 0;i<=2;i++){
- digitalWrite(ledArray[i],HIGH); // Włączanie diod RGB.
- delay(100); //Opóźnienie pozwalające fotorezystorowi na stabilizację.
- getReading(1);
- colourArray[i] = avgRead;
- float greyDiff = whiteArray[i] - blackArray[i];
- // 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).
- colourArray[i] = (colourArray[i] - blackArray[i])/(greyDiff)*255;
- digitalWrite(ledArray[i],LOW); // Wyłączenie bieżącej diody.
- delay(100);
- }
- }
- void getReading(int times){
- int reading;
- int tally=0;
- for(int i = 0;i < times;i++){
- reading = analogRead(0);
- tally = reading + tally;
- delay(10);
- }
- // Obliczanie i ustawianie średniej.
- avgRead = (tally)/times;
- }
- // Ustawienie i przesłanie wszystkich wartości R, G i B dla bieżącego pomiaru.
- void printColour(){
- Serial.print("R = ");
- Serial.println(int(colourArray[0]));
- Serial.print("G = ");
- Serial.println(int(colourArray[1]));
- Serial.print("B = ");
- Serial.println(int(colourArray[2]));
- delay(2000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement