Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.50 KB | None | 0 0
  1. //Arduino pins:
  2. #define S0 2
  3. #define S1 3
  4. #define S2 4
  5. #define S3 5
  6. #define sensorOut 6
  7. #define redLED 7
  8. #define greenLED 8
  9. #define blueLED 9
  10. int a=9;
  11. //Output from the sensor:
  12. int redFrequency = 0;
  13. int greenFrequency = 0;
  14. int blueFrequency = 0;
  15.  
  16. //Formatted color values:
  17. int redColor = 0;
  18. int greenColor = 0;
  19. int blueColor = 0;
  20.  
  21. //Values used for calibration
  22. int redMin;
  23. int redMax;
  24. int greenMin;
  25. int greenMax;
  26. int blueMin;
  27. int blueMax;
  28.  
  29. int color = 0;
  30.  
  31. void setup() {
  32. //Declarations:
  33. pinMode(S0, OUTPUT);
  34. pinMode(S1, OUTPUT);
  35. pinMode(S2, OUTPUT);
  36. pinMode(S3, OUTPUT);
  37. pinMode(redLED, OUTPUT);
  38. pinMode(greenLED, OUTPUT);
  39. pinMode(blueLED, OUTPUT);
  40. pinMode(13, OUTPUT);
  41. pinMode(sensorOut, INPUT);
  42. // Set frequency scaling to 20%:
  43. digitalWrite(S0, HIGH);
  44. digitalWrite(S1, LOW);
  45. Serial.begin(9600);//begin serial communication
  46. calibrate();//calibrate sensor (look at serial monitor)
  47. }
  48.  
  49. void loop() {
  50. readColor();//read sensor
  51. decideColor();//format color values
  52. printColor();//print values
  53. }
  54.  
  55. void decideColor() {//format color values
  56. //Limit possible values:
  57. redColor = constrain(redColor, 0, 255);
  58. greenColor = constrain(greenColor, 0, 255);
  59. blueColor = constrain(blueColor, 0, 255);
  60.  
  61. //find brightest color:
  62. int maxVal = max(redColor, blueColor);
  63. maxVal = max(maxVal, greenColor);
  64. //map new values
  65. redColor = map(redColor, 0, maxVal, 0, 255);
  66. greenColor = map(greenColor, 0, maxVal, 0, 255);
  67. blueColor = map(blueColor, 0, maxVal, 0, 255);
  68. redColor = constrain(redColor, 0, 255);
  69. greenColor = constrain(greenColor, 0, 255);
  70. blueColor = constrain(blueColor, 0, 255);
  71.  
  72. //decide which color is present (you may need to change some values here):
  73. if (redColor > 220 && greenColor > 220 && blueColor > 220) {
  74. color = 1;//white
  75. }
  76.  
  77. else if (redColor > 250 && greenColor < 10 && blueColor < 10) {
  78. color = 6;//red
  79. }
  80. else if (redColor > 250 && greenColor > 185 && greenColor < 230 && blueColor >130 && blueColor < 150) {
  81. color = 3;//orange
  82. }
  83. else if (redColor > 230 && greenColor > 200 && greenColor < 250 && blueColor >100 && blueColor < 170) {
  84. color = 4;//yellow
  85. }
  86. else if (redColor < 25 && greenColor < 25 && blueColor < 25) {
  87. color = 2;//black
  88. }
  89. else if (redColor < 110 && greenColor >200 && blueColor > 250) {
  90. color = 5;//blue
  91. }
  92.  
  93. else if (redColor < 200 && greenColor > 250 && blueColor < 200) {
  94. color = 7;//green
  95. }
  96. else if (redColor > 180 && redColor < 250 && greenColor > 150 && greenColor < 220 && blueColor > 250) {
  97. color = 8;//violet
  98. }
  99. else if (redColor < 10 && greenColor < 10 && blueColor > 250) {
  100. color = 9;//indigo
  101. }
  102.  
  103. else {
  104. color = 0;//unknown
  105. }
  106. }
  107.  
  108. void calibrate() {
  109. digitalWrite(S2, LOW);
  110. digitalWrite(S3, LOW);
  111. redMin = 11;//pulseIn(sensorOut, LOW);
  112. //delay(100);
  113. digitalWrite(S2, HIGH);
  114. digitalWrite(S3, HIGH);
  115. greenMin = 11;//pulseIn(sensorOut, LOW);
  116. //delay(100);
  117. digitalWrite(S2, LOW);
  118. digitalWrite(S3, HIGH);
  119. blueMin = 4;//pulseIn(sensorOut, LOW);
  120. //delay(100);
  121. //Serial.println("next...");//aim sensor at something black
  122.  
  123. digitalWrite(S2, LOW);
  124. digitalWrite(S3, LOW);
  125. redMax = 59;// pulseIn(sensorOut, LOW);
  126. //delay(100);
  127. digitalWrite(S2, HIGH);
  128. digitalWrite(S3, HIGH);
  129. greenMax = 70;//pulseIn(sensorOut, LOW);
  130. //delay(100);
  131. digitalWrite(S2, LOW);
  132. digitalWrite(S3, HIGH);
  133. blueMax = 54;//pulseIn(sensorOut, LOW);
  134. //delay(100);
  135. //Serial.println("Done calibrating.");
  136.  
  137. }
  138.  
  139. //a=1;b=1;c=1;d=1;e=1;f=1;g=1;h=1;i=1;j=1;
  140. void printColor() {//print data
  141. delay(100);
  142. // Serial.print("R = ");
  143. // Serial.print(redColor);
  144. // Serial.print(" G = ");
  145. // Serial.print(greenColor);
  146. // Serial.print(" B = ");
  147. // Serial.print(blueColor);
  148. // Serial.print(" Color: ");
  149. /*if (color=="1" and a!=0){
  150. Serial.println("1");//white
  151. a=0;
  152. }
  153. else if (color=="2" and a!=1){
  154. Serial.println("2");//blak
  155. a=1;
  156. }
  157. else if (color=="3" and a!=2){
  158. Serial.println("3");//org
  159. a=2;
  160. }
  161. else if (color=="4" and a!=3){
  162. Serial.println("4");//yellow
  163. a=3;
  164. }
  165. else if (color=="5" and a!=4){
  166. Serial.println("5");//blue
  167. a=4;
  168. }
  169. else if (color=="6" and a!=5){
  170. Serial.println("6");//red
  171. a=5;
  172. }
  173. else if (color=="7" and a!=6){
  174. Serial.println("7");//green
  175. a=6;
  176. }
  177. else if (color=="8" and a!=7){
  178. Serial.println("8");//violet
  179. a=7;
  180. }
  181. else if (color="9" and a!=8){
  182. Serial.println("9");//indigo
  183. a=8;
  184. }
  185. else {
  186. //Serial.println("9");//unknown
  187. a=9;
  188. }*/
  189. switch (color) {
  190. case 1: Serial.println("1"); break;//white
  191. case 2: Serial.println("2"); break;//blk
  192. case 3: Serial.println("3"); break;//org
  193. case 4: Serial.println("4"); break;//yel
  194. case 5: Serial.println("5"); break;//blue
  195. case 6: Serial.println("6"); break;//red
  196. case 7: Serial.println("7"); break;//gree
  197. case 8: Serial.println("8"); break;//violet
  198. case 9: Serial.println("9"); break;//indigo
  199. //default: Serial.println("0"); break;//unknown
  200. }
  201. }
  202.  
  203. void readColor() {//get data from sensor
  204. //red:
  205. digitalWrite(S2, LOW);
  206. digitalWrite(S3, LOW);
  207. redFrequency = pulseIn(sensorOut, LOW);
  208. redColor = map(redFrequency, redMin, redMax, 255, 0);
  209. //delay(100);
  210.  
  211. //green:
  212. digitalWrite(S2, HIGH);
  213. digitalWrite(S3, HIGH);
  214. greenFrequency = pulseIn(sensorOut, LOW);
  215. greenColor = map(greenFrequency, greenMin, greenMax, 255, 0);
  216. //delay(100);
  217.  
  218. //blue:
  219. digitalWrite(S2, LOW);
  220. digitalWrite(S3, HIGH);
  221. blueFrequency = pulseIn(sensorOut, LOW);
  222. blueColor = map(blueFrequency, blueMin, blueMax, 255, 0);
  223. //delay(100);
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement