Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Servo.h>
- //light
- const int scanning_patterns_mask = 0b00011111;
- const int row_count = 5;
- const int rows[5] = {8, 9, 10, 11, 12};
- //I message
- const int myI[5] = {
- ~0b00011111,
- ~0b00000100,
- ~0b00000100,
- ~0b00000100,
- ~0b00011111};
- const int myU[5] = {
- ~0b00010001,
- ~0b00010001,
- ~0b00010001,
- ~0b00010001,
- ~0b00011111};
- const int myheart[5] = {
- ~0b00011011,
- ~0b00011111,
- ~0b00011111,
- ~0b00001110,
- ~0b00000100};
- //servo
- Servo myservo;
- int pos = 90;
- int servoPin = 4;
- //sonar
- int sonarPin = A6;
- int sensorValue = 0;
- const int sensorThreshold = 30;
- //other
- int mode = 1;
- void setup()
- {
- //light matrix
- for (int r = 0; r < row_count; r++)
- {
- pinMode(rows[r], OUTPUT);
- }
- Serial.begin(9600);
- DDRC = (DDRC & ~scanning_patterns_mask) | (scanning_patterns_mask);
- //servo
- myservo.attach(servoPin);
- myservo.write(pos);
- }
- void loop()
- {
- //delay(50);
- //sensorValue = analogRead(sonarPin);
- //Serial.print(sensorValue);
- switch (mode){
- case(1)://lid taken off
- if(sensorValue >= sensorThreshold){
- mode++;
- }
- delay(500);
- break;
- case(2): //servo rotates 90 degree
- pos = 0;
- myservo.write(pos);
- mode++;
- delay(300);
- break;
- case(3): //light show message
- lightshow();
- mode++;
- delay(300);
- break;
- case(4): //servo rotates back after light show
- pos = 90;
- myservo.write(pos);
- delay(300);
- mode++;
- break;
- case(5): //check to see if lid is on to resart process
- if(sensorValue < sensorThreshold){
- //mode++;
- mode = 1;
- delay(500);
- }
- break;
- }
- delay(50);
- sensorValue = analogRead(sonarPin);
- Serial.println(sensorValue);
- //Serial.println(sensorValue);
- //for(pos = 0; pos < 90; pos += 1) // goes from 0 degrees to 180 degrees
- //{ // in steps of 1 degree
- //myservo.write(pos); // tell servo to go to position in variable 'pos'
- //delay(15); // waits 15ms for the servo to reach the position
- //}
- //for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
- //{
- // myservo.write(pos); // tell servo to go to position in variable 'pos'
- //delay(15); // waits 15ms for the servo to reach the position
- //}
- }
- void lightshow(){
- for (int j = 0; j < 1200; j++){
- for (int r = 0; r < row_count; r++)
- {
- digitalWrite(rows[r], HIGH);
- PORTC = (PORTC & ~scanning_patterns_mask) | (myI[r] & scanning_patterns_mask);
- delayMicroseconds(1000);
- digitalWrite(rows[r], LOW);
- }
- }
- delay(1000);
- for (int j = 0; j < 1200; j++){
- for (int r = 0; r < row_count; r++)
- {
- digitalWrite(rows[r], HIGH);
- PORTC = (PORTC & ~scanning_patterns_mask) | (myheart[r] & scanning_patterns_mask);
- delayMicroseconds(1000);
- digitalWrite(rows[r], LOW);
- }
- }
- delay(1000);
- for (int j = 0; j < 1200; j++){
- for (int r = 0; r < row_count; r++)
- {
- digitalWrite(rows[r], HIGH);
- PORTC = (PORTC & ~scanning_patterns_mask) | (myU[r] & scanning_patterns_mask);
- delayMicroseconds(1000);
- digitalWrite(rows[r], LOW);
- }
- }
- delay(1000);
- }
Add Comment
Please, Sign In to add comment