Guest User

Untitled

a guest
Jul 20th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.82 KB | None | 0 0
  1. #include <Servo.h>
  2.  
  3. //light
  4. const int scanning_patterns_mask = 0b00011111;
  5.  
  6. const int row_count = 5;
  7.  
  8. const int rows[5] = {8, 9, 10, 11, 12};
  9.  
  10. //I message
  11. const int myI[5] = {
  12. ~0b00011111,
  13. ~0b00000100,
  14. ~0b00000100,
  15. ~0b00000100,
  16. ~0b00011111};
  17. const int myU[5] = {
  18. ~0b00010001,
  19. ~0b00010001,
  20. ~0b00010001,
  21. ~0b00010001,
  22. ~0b00011111};
  23.  
  24. const int myheart[5] = {
  25. ~0b00011011,
  26. ~0b00011111,
  27. ~0b00011111,
  28. ~0b00001110,
  29. ~0b00000100};
  30.  
  31.  
  32. //servo
  33. Servo myservo;
  34.  
  35. int pos = 90;
  36. int servoPin = 4;
  37.  
  38. //sonar
  39. int sonarPin = A6;
  40. int sensorValue = 0;
  41. const int sensorThreshold = 30;
  42.  
  43. //other
  44. int mode = 1;
  45.  
  46.  
  47. void setup()
  48. {
  49.  
  50. //light matrix
  51. for (int r = 0; r < row_count; r++)
  52. {
  53. pinMode(rows[r], OUTPUT);
  54. }
  55. Serial.begin(9600);
  56. DDRC = (DDRC & ~scanning_patterns_mask) | (scanning_patterns_mask);
  57.  
  58. //servo
  59. myservo.attach(servoPin);
  60. myservo.write(pos);
  61. }
  62.  
  63. void loop()
  64. {
  65. //delay(50);
  66. //sensorValue = analogRead(sonarPin);
  67. //Serial.print(sensorValue);
  68.  
  69. switch (mode){
  70. case(1)://lid taken off
  71. if(sensorValue >= sensorThreshold){
  72. mode++;
  73. }
  74. delay(500);
  75. break;
  76. case(2): //servo rotates 90 degree
  77. pos = 0;
  78. myservo.write(pos);
  79. mode++;
  80. delay(300);
  81. break;
  82. case(3): //light show message
  83. lightshow();
  84. mode++;
  85. delay(300);
  86. break;
  87. case(4): //servo rotates back after light show
  88. pos = 90;
  89. myservo.write(pos);
  90. delay(300);
  91. mode++;
  92. break;
  93. case(5): //check to see if lid is on to resart process
  94. if(sensorValue < sensorThreshold){
  95. //mode++;
  96. mode = 1;
  97. delay(500);
  98. }
  99.  
  100. break;
  101. }
  102. delay(50);
  103. sensorValue = analogRead(sonarPin);
  104. Serial.println(sensorValue);
  105.  
  106. //Serial.println(sensorValue);
  107. //for(pos = 0; pos < 90; pos += 1) // goes from 0 degrees to 180 degrees
  108. //{ // in steps of 1 degree
  109. //myservo.write(pos); // tell servo to go to position in variable 'pos'
  110. //delay(15); // waits 15ms for the servo to reach the position
  111. //}
  112. //for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
  113. //{
  114. // myservo.write(pos); // tell servo to go to position in variable 'pos'
  115. //delay(15); // waits 15ms for the servo to reach the position
  116. //}
  117. }
  118.  
  119.  
  120. void lightshow(){
  121. for (int j = 0; j < 1200; j++){
  122. for (int r = 0; r < row_count; r++)
  123. {
  124. digitalWrite(rows[r], HIGH);
  125. PORTC = (PORTC & ~scanning_patterns_mask) | (myI[r] & scanning_patterns_mask);
  126. delayMicroseconds(1000);
  127. digitalWrite(rows[r], LOW);
  128. }
  129. }
  130. delay(1000);
  131. for (int j = 0; j < 1200; j++){
  132. for (int r = 0; r < row_count; r++)
  133. {
  134. digitalWrite(rows[r], HIGH);
  135. PORTC = (PORTC & ~scanning_patterns_mask) | (myheart[r] & scanning_patterns_mask);
  136. delayMicroseconds(1000);
  137. digitalWrite(rows[r], LOW);
  138. }
  139. }
  140. delay(1000);
  141.  
  142. for (int j = 0; j < 1200; j++){
  143. for (int r = 0; r < row_count; r++)
  144. {
  145. digitalWrite(rows[r], HIGH);
  146. PORTC = (PORTC & ~scanning_patterns_mask) | (myU[r] & scanning_patterns_mask);
  147. delayMicroseconds(1000);
  148. digitalWrite(rows[r], LOW);
  149. }
  150. }
  151. delay(1000);
  152.  
  153. }
Add Comment
Please, Sign In to add comment