5.Örnek: Butonlara basınca modlar arasında geçiş
// C++ code
/*
Bariyer Sistemi v1
HC-SR-04 Ultrasonic Distance Sensor
Ses havada ortalama 340 m/sn hızla ilerler.
Bu da 34000 cm/sn demektir.
Bu 34 cm/milisn'ye eşittir.
Ölçümlerimizi Arduino'da mikrosaniye cinsinden yaptığımız için
0.034 cm/mikrosaniye bizim için birim değerimizdir.
*/
#define trigPin 13
#define echoPin 8
#include <Servo.h>
Servo servom;
float mesafe;
long sure;
bool mesafeSensor=true;
char deger;
void setup()
{
pinMode(7, OUTPUT);
digitalWrite(7,1);
pinMode(12, OUTPUT);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(trigPin,OUTPUT); //Trig
pinMode(echoPin,INPUT); //Eco
servom.attach(15);
Serial.begin(9600);
}
void loop()
{
if(digitalRead(2)){
mesafeSensor=true;
digitalWrite(7,1);
digitalWrite(12,0);
}
if(digitalRead(4)){
mesafeSensor=false;
digitalWrite(7,0);
digitalWrite(12,1);
}
if(mesafeSensor==true){
mesafeOlc();
if(mesafe<20){
servom.write(90);
}
else{
servom.write(0);
}
}
else{
deger=Serial.read();
if(deger=='a'){
servom.write(90);
}
if(deger=='k'){
servom.write(0);
}
}
}
void mesafeOlc(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2); // 2 mikro saniye bekle
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); //tetik pini 10 mikrosaniye boyunca ses dalgası yayınlıyor.
digitalWrite(trigPin, LOW); // ses yayınını bitir.
sure=pulseIn(echoPin,HIGH); //süre sesin gidiş geliş süresi.Bu nedenle hesaplamada 2'ye bölmeliyiz.
mesafe= (sure/2)*0.034; // 340 m/sn = 0.034 cm/mikrosn
}
6.Örnek: Kesme (interrupt)
/*
Bariyer Sistemi v4.5 attachinterrupt ve hazır reset pinini kullanarak iki butonla da kontrol
HC-SR-04 Ultrasonic Distance Sensor
Ses havada ortalama 340 m/sn hızla ilerler.
Bu da 34000 cm/sn demektir.
Bu 34 cm/milisn'ye eşittir.
Ölçümlerimizi Arduino'da mikrosaniye cinsinden yaptığımız için
0.034 cm/mikrosaniye bizim için birim değerimizdir.
*/
// Servo - Version: Latest
#include <Servo.h>
Servo servom;
float mesafe;
long sure;
#define trigPin 13
#define echoPin 8
void setup() {
servom.attach(15);
pinMode(trigPin, OUTPUT); //Trig
pinMode(echoPin, INPUT); //Eco
pinMode(7, OUTPUT); //kırmızı led
pinMode(12, OUTPUT); //mavi led
pinMode(2, INPUT); //buton 1 (inturrupt pini) aynı zamanda bariyeri açar
pinMode(4, INPUT); // buton 2 bariyeri kapatır
attachInterrupt(digitalPinToInterrupt(2), bariyerAc, RISING);
digitalWrite(7, 0); // kırmızı led kapalı
digitalWrite(12, 1); //mavi led açık (ultrasonik sensör kontrolünde)
servom.write(0);
}
void loop() {
mesafeOlc();
if (mesafe < 20) {
servom.write(90);
}
else {
servom.write(0);
}
if (digitalRead(7)) {
servom.write(90);
while(1){
if(digitalRead(2)){
servom.write(90);
}
if(digitalRead(4)){
servom.write(0);
}
}
}
}
void bariyerAc() { //interrupt fonksiyonu
digitalWrite(7, 1); // kırmızı led açık (buton kontrolü devrede)
digitalWrite(12,0); // mavi led kapalı
}
void mesafeOlc() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2); // 2 mikro saniye bekle
digitalWrite(trigPin, HIGH);
delayMicroseconds(10); //tetik pini 10 mikrosaniye boyunca ses dalgası yayınlıyor.
digitalWrite(trigPin, LOW); // ses yayınını bitir.
sure = pulseIn(echoPin, HIGH); //süre sesin gidiş geliş süresi.Bu nedenle hesaplamada 2'ye bölmeliyiz.
mesafe = (sure / 2) * 0.034; // 340 m/sn = 0.034 cm/mikrosn
}