const int led1 = 6;
const int buzzer = 7;
#include <LedControl.h>
#include <Servo.h> //載入函式庫,這是內建的,不用安裝
#include <Ultrasonic.h>
Ultrasonic ultrasonic(8, 13);
LedControl display = LedControl(12,11,10,1);
int distance;
Servo myservo; // 建立SERVO物件
const uint64_t R_IMAGES[] = { //往右箭頭
0x0038101010181000,
0x003c081020241800,
0x0018202018201800,
0x0010103e14181000,
0x001c20201c043c00,
0x001824241c041800,
0x0010101010203c00,
0x003c24243c243c00,
0x0020202038241800,
0x00724a4a4a4a3200
};
const int R_IMAGES_LEN = sizeof(R_IMAGES)/8;
void setup() {
myservo.attach(9);
pinMode (led1, OUTPUT);
pinMode (buzzer, OUTPUT);
Serial.begin(9600);
display.clearDisplay(0); // 清除螢幕
display.shutdown(0, false); // 關閉省電模式
display.setIntensity(0, 10); // 設定亮度為 8 (介於0~15之間)
}
void displayImage(uint64_t image) {
for (int i = 0; i < 8; i++) {
byte row = (image >> i * 8) & 0xFF;
for (int j = 0; j < 8; j++) {
display.setLed(0, i, j, bitRead(row, j));
}
}
}
int i = 0;
int t =-1;
void loop() {
distance = ultrasonic.read(); //不加參數就是輸出CM,可用read(INC)輸出英寸
t=t+1;
Serial.print("Distance in CM: ");
Serial.println(distance);
delay(500); //每次間格0.5秒
if(distance < 100) {
displayImage(R_IMAGES[t-1]);
digitalWrite (buzzer, LOW);
digitalWrite (led1, LOW);
myservo.write(135);
delay(100);
}
else if (distance >= 100 , distance <= 200 ){
displayImage(R_IMAGES[t-1]);
digitalWrite (buzzer, LOW);
digitalWrite (led1, LOW);
myservo.write(45);
delay(100);
}
else if (distance > 200){
digitalWrite (buzzer, HIGH);
digitalWrite (led1, HIGH);
myservo.write(90);
delay(100);
}
}