#include #include #include #include #define IR_PIN_0 4 // S0 - uplne na pravo (pin D4) #define IR_PIN_1 5 // S1 (pin D5) #define IR_PIN_2 6 // S2 (pin D6) #define IR_PIN_3 7 // S3 (pin D7) #define IR_PIN_4 8 // S4 (pin D8) #define IR_PIN_5 11 // S5 (pin D11) #define IR_PIN_6 12 // S6 (pin D12) #define IR_PIN_7 13 // S7 (pin D13) Servo LeftServo; #define SERVO_PIN_LEFT 9 // lave servo pripojene na pin D9 Servo RightServo; #define SERVO_PIN_RIGHT 10 // prave servo pripojene na pin D10 #define TRIGGER_PIN 2 // (pin D2) #define ECHO_PIN 3 // (pin D3) // #define PING_PIN 3 long duration, distance; #define FAST 110 #define SLOW 80 #define OBSTACLE_DISTANCE_THRESHOLD 8 // vzdialenost prekazky od robota v cm pri ktorej sa jej zacne vyhybat void setup() { Serial.begin(9600); LeftServo.attach(SERVO_PIN_LEFT); RightServo.attach(SERVO_PIN_RIGHT); pinMode(2, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); pinMode(7, INPUT); pinMode(8, INPUT); pinMode(11, INPUT); pinMode(12, INPUT); pinMode(13, INPUT); // Povolenie prerusenia pre IR piny PCICR |= (1 << PCIE2) | (1 << PCIE0); // Povolenie PCIE2 pre piny od PCINT16 do PCINT23 a PCIE0 pre piny od PCINT0 do PCINT7 PCMSK2 |= (1 << PCINT20) | (1 << PCINT21) | (1 << PCINT22) | (1 << PCINT23); // Povolenie preruseni pre PD4 az PD7 PCMSK0 |= (1 << PCINT0) | (1 << PCINT3); // Povolenie preruseni pre PB0 a PB3 sei(); } void loop() { Serial.print("S: "); Serial.print(digitalRead(IR_PIN_0)); Serial.print(digitalRead(IR_PIN_1)); Serial.print(digitalRead(IR_PIN_2)); Serial.print(digitalRead(IR_PIN_3)); Serial.print(digitalRead(IR_PIN_4)); Serial.print(digitalRead(IR_PIN_5)); Serial.print(digitalRead(IR_PIN_6)); Serial.println(digitalRead(IR_PIN_7)); // pinMode(PING_PIN, OUTPUT); digitalWrite(TRIGGER_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIGGER_PIN, HIGH); delayMicroseconds(5); digitalWrite(TRIGGER_PIN, LOW); // pinMode(PING_PIN, INPUT); duration = pulseIn(ECHO_PIN, HIGH); distance = (duration*.0343)/2; Serial.print("Distance: "); Serial.println(distance); // distance = microsecondsToCentimeters(duration); // pohyb if(digitalRead(IR_PIN_3) == 1 || digitalRead(IR_PIN_4) == 1) { // dopredu LeftServo.write(90-SLOW); RightServo.write(90+SLOW); } else if(digitalRead(IR_PIN_5) == 1 || digitalRead(IR_PIN_6) == 1) { // dolava LeftServo.write(90-SLOW); RightServo.write(90-SLOW); } else if(digitalRead(IR_PIN_1) == 1 || digitalRead(IR_PIN_2) == 1) { // do prava LeftServo.write(90+SLOW); RightServo.write(90+SLOW); } else if(digitalRead(IR_PIN_0) == 1) { // ostro do prava LeftServo.write(90+FAST); RightServo.write(90+FAST); } else if(digitalRead(IR_PIN_7) == 1) { // ostro dolava LeftServo.write(90-FAST); RightServo.write(90-FAST); } else if(distance <= OBSTACLE_DISTANCE_THRESHOLD) { LeftServo.write(90+FAST); RightServo.write(90+FAST); delay(10); LeftServo.write(90-FAST); RightServo.write(90-FAST); } delay(5); } // long microsecondsToCentimeters(long microseconds) // { // return microseconds / 29 / 2; // }