Merhaba, geçtiğimiz günlerde Arduino ile hobi amaçlı telefon kontrollü Bluetooth bir araç yaptım. Sorunsuz çalışıyordu ancak aynı model farklı bir modül kullanarak bir kumanda yaptığımda bağlantı sağlandı fakat komutların gönderilmesinde 1-2 saniye kadar bir gecikme var. Bu gecikme varken kumanda kullanılmaz halde ve sorunu çözmek istiyorum. Yardımcı olabilecek arkadaş var mı?
Araba kodu:
int buzzer = 8; //6. pini buzzer olarak tanımlandı.
//buzzer için melodi kodl
int buzzerPin = 8;
//L298N Bağlantısı
const int motorA1 = 5; // L298N'in IN3 Girişi
const int motorA2 = 6; // L298N'in IN1 Girişi
const int motorB1 = 10; // L298N'in IN2 Girişi
const int motorB2 = 9; // L298N'in IN4 Girişi
int i=0; //Döngüler için atanan rastgele bir değişken
int j=0; //Döngüler için atanan rastgele bir değişken
int state; //Bluetooth cihazından gelecek sinyalin değişkeni
int vSpeed=255; // Standart Hız, 0-255 arası bir değer alabilir
void setup() {
pinMode(buzzer , OUTPUT); //buzzer'i çıkış olarak tanımladık.
// Pinlerimizi belirleyelim
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(motorB1, OUTPUT);
pinMode(motorB2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(8, OUTPUT);
// 9600 baud hızında bir seri port açalım
Serial.begin(9600);
// Rastgele hedef renk belirle//
}
void loop() {
if (Serial.available() > 0){
state = Serial.read();
Serial.println(state);
delay(10);
}
/* Uygulamadan ayarlanabilen 4 hız seviyesi.(Değerler 0-255 arasında olmalı)*/
/***********************İleri****************************/
//Gelen veri 'F' ise araba ileri gider.
if (state == 'F') {
analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
}
/**********************İleri Sol************************/
//Gelen veri 'G' ise araba ileri sol(çapraz) gider.
else if (state == 'G') {
analogWrite(motorA1,vSpeed ); analogWrite(motorA2, 0);
analogWrite(motorB1, 150); analogWrite(motorB2, 0);
}
/**********************İleri Sağ************************/
//Gelen veri 'I' ise araba ileri sağ(çapraz) gider.
else if (state == 'I') {
analogWrite(motorA1, 150); analogWrite(motorA2, 0);
analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
}
/***********************Geri****************************/
//Gelen veri 'B' ise araba geri gider.
else if (state == 'B') {
analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
}
/**********************Geri Sol************************/
//Gelen veri 'H' ise araba geri sol(çapraz) gider
else if (state == 'H') {
analogWrite(motorA1, 0); analogWrite(motorA2, 100);
analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
}
/**********************Geri Sağ************************/
//Gelen veri 'J' ise araba geri sağ(çapraz) gider
else if (state == 'J') {
analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
analogWrite(motorB1, 0); analogWrite(motorB2, 100);
}
/***************************Sol*****************************/
//Gelen veri 'L' ise araba sola gider.
else if (state == 'L') {
analogWrite(motorA1, vSpeed); analogWrite(motorA2, 150);
analogWrite(motorB1, 0); analogWrite(motorB2, 0);
}
/***************************Sağ*****************************/
//Gelen veri 'R' ise araba sağa gider
else if (state == 'R') {
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
analogWrite(motorB1, vSpeed); analogWrite(motorB2, 150);
}
/************************Stop*****************************/
//Gelen veri 'S' ise arabayı durdur.
else if (state == 'S'){
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
analogWrite(motorB1, 0); analogWrite(motorB2, 0);
}
else if (state == 'W'){
digitalWrite(3, HIGH);
}
else if (state == 'w'){
digitalWrite(3, LOW);
}
else if (state == 'U'){
digitalWrite(2, HIGH);
}
else if (state == 'u'){
digitalWrite(2, LOW);
}
else if (state == 'V'){
// Kornanın ilk nota dizisi
tone(buzzerPin, 440); // 440 Hz frekansında nota çalınacak (La)
delay(150); // 150 ms boyunca nota çalacak
noTone(buzzerPin); // Nota çalmayı durdurun
delay(50); // 50 ms boyunca sessiz kalacak
// Kornanın ikinci nota dizisi
tone(buzzerPin, 523); // 523 Hz frekansında nota çalınacak (Do)
delay(150); // 150 ms boyunca nota çalacak
noTone(buzzerPin); // Nota çalmayı durdurun
delay(50); // 50 ms boyunca sessiz kalacak
// Kornanın üçüncü nota dizisi
tone(buzzerPin, 659); // 659 Hz frekansında nota çalınacak (Mi)
delay(150); // 150 ms boyunca nota çalacak
noTone(buzzerPin); // Nota çalmayı durdurun
delay(50); // 50 ms boyunca sessiz kalacak
// Kornanın dördüncü nota dizisi
tone(buzzerPin, 784); // 784 Hz frekansında nota çalınacak (Sol)
delay(300); // 300 ms boyunca nota çalacak
noTone(buzzerPin); // Nota çalmayı durdurun
delay(100); // 100 ms boyunca sessiz kalacak
}
}
....................................
alıcı kodu :
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(0, 1); // RX, TX
const int analogPinX = A0; // X ekseninin analog pini
const int analogPinY = A1; // Y ekseninin analog pini
int xValue = 0;
int yValue = 0;
void setup() {
Serial.begin(9600);
BTSerial.begin(9600);
}
void loop() {
xValue = analogRead(analogPinX);
yValue = analogRead(analogPinY);
String direction;
if (xValue < 300 && yValue > 700) {
direction = "S";
} else if (xValue < 300 && yValue < 300) {
direction = "H";
} else if (xValue > 700 && yValue > 700) {
direction = "I";
} else if (xValue > 700 && yValue < 300) {
direction = "J";
} else if (yValue > 700) {
direction = "F";
} else if (yValue < 300) {
direction = "B";
} else if (xValue < 300) {
direction = "L";
} else if (xValue > 700) {
direction = "R";
}
BTSerial.println(direction); // Yön verisini Bluetooth ile gönder
delay(100); // İstenilen güncelleme hızına ayarlayabilirsiniz
}
Araba kodu:
int buzzer = 8; //6. pini buzzer olarak tanımlandı.
//buzzer için melodi kodl
int buzzerPin = 8;
//L298N Bağlantısı
const int motorA1 = 5; // L298N'in IN3 Girişi
const int motorA2 = 6; // L298N'in IN1 Girişi
const int motorB1 = 10; // L298N'in IN2 Girişi
const int motorB2 = 9; // L298N'in IN4 Girişi
int i=0; //Döngüler için atanan rastgele bir değişken
int j=0; //Döngüler için atanan rastgele bir değişken
int state; //Bluetooth cihazından gelecek sinyalin değişkeni
int vSpeed=255; // Standart Hız, 0-255 arası bir değer alabilir
void setup() {
pinMode(buzzer , OUTPUT); //buzzer'i çıkış olarak tanımladık.
// Pinlerimizi belirleyelim
pinMode(motorA1, OUTPUT);
pinMode(motorA2, OUTPUT);
pinMode(motorB1, OUTPUT);
pinMode(motorB2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(2, OUTPUT);
pinMode(8, OUTPUT);
// 9600 baud hızında bir seri port açalım
Serial.begin(9600);
// Rastgele hedef renk belirle//
}
void loop() {
if (Serial.available() > 0){
state = Serial.read();
Serial.println(state);
delay(10);
}
/* Uygulamadan ayarlanabilen 4 hız seviyesi.(Değerler 0-255 arasında olmalı)*/
/***********************İleri****************************/
//Gelen veri 'F' ise araba ileri gider.
if (state == 'F') {
analogWrite(motorA1, vSpeed); analogWrite(motorA2, 0);
analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
}
/**********************İleri Sol************************/
//Gelen veri 'G' ise araba ileri sol(çapraz) gider.
else if (state == 'G') {
analogWrite(motorA1,vSpeed ); analogWrite(motorA2, 0);
analogWrite(motorB1, 150); analogWrite(motorB2, 0);
}
/**********************İleri Sağ************************/
//Gelen veri 'I' ise araba ileri sağ(çapraz) gider.
else if (state == 'I') {
analogWrite(motorA1, 150); analogWrite(motorA2, 0);
analogWrite(motorB1, vSpeed); analogWrite(motorB2, 0);
}
/***********************Geri****************************/
//Gelen veri 'B' ise araba geri gider.
else if (state == 'B') {
analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
}
/**********************Geri Sol************************/
//Gelen veri 'H' ise araba geri sol(çapraz) gider
else if (state == 'H') {
analogWrite(motorA1, 0); analogWrite(motorA2, 100);
analogWrite(motorB1, 0); analogWrite(motorB2, vSpeed);
}
/**********************Geri Sağ************************/
//Gelen veri 'J' ise araba geri sağ(çapraz) gider
else if (state == 'J') {
analogWrite(motorA1, 0); analogWrite(motorA2, vSpeed);
analogWrite(motorB1, 0); analogWrite(motorB2, 100);
}
/***************************Sol*****************************/
//Gelen veri 'L' ise araba sola gider.
else if (state == 'L') {
analogWrite(motorA1, vSpeed); analogWrite(motorA2, 150);
analogWrite(motorB1, 0); analogWrite(motorB2, 0);
}
/***************************Sağ*****************************/
//Gelen veri 'R' ise araba sağa gider
else if (state == 'R') {
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
analogWrite(motorB1, vSpeed); analogWrite(motorB2, 150);
}
/************************Stop*****************************/
//Gelen veri 'S' ise arabayı durdur.
else if (state == 'S'){
analogWrite(motorA1, 0); analogWrite(motorA2, 0);
analogWrite(motorB1, 0); analogWrite(motorB2, 0);
}
else if (state == 'W'){
digitalWrite(3, HIGH);
}
else if (state == 'w'){
digitalWrite(3, LOW);
}
else if (state == 'U'){
digitalWrite(2, HIGH);
}
else if (state == 'u'){
digitalWrite(2, LOW);
}
else if (state == 'V'){
// Kornanın ilk nota dizisi
tone(buzzerPin, 440); // 440 Hz frekansında nota çalınacak (La)
delay(150); // 150 ms boyunca nota çalacak
noTone(buzzerPin); // Nota çalmayı durdurun
delay(50); // 50 ms boyunca sessiz kalacak
// Kornanın ikinci nota dizisi
tone(buzzerPin, 523); // 523 Hz frekansında nota çalınacak (Do)
delay(150); // 150 ms boyunca nota çalacak
noTone(buzzerPin); // Nota çalmayı durdurun
delay(50); // 50 ms boyunca sessiz kalacak
// Kornanın üçüncü nota dizisi
tone(buzzerPin, 659); // 659 Hz frekansında nota çalınacak (Mi)
delay(150); // 150 ms boyunca nota çalacak
noTone(buzzerPin); // Nota çalmayı durdurun
delay(50); // 50 ms boyunca sessiz kalacak
// Kornanın dördüncü nota dizisi
tone(buzzerPin, 784); // 784 Hz frekansında nota çalınacak (Sol)
delay(300); // 300 ms boyunca nota çalacak
noTone(buzzerPin); // Nota çalmayı durdurun
delay(100); // 100 ms boyunca sessiz kalacak
}
}
....................................
alıcı kodu :
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(0, 1); // RX, TX
const int analogPinX = A0; // X ekseninin analog pini
const int analogPinY = A1; // Y ekseninin analog pini
int xValue = 0;
int yValue = 0;
void setup() {
Serial.begin(9600);
BTSerial.begin(9600);
}
void loop() {
xValue = analogRead(analogPinX);
yValue = analogRead(analogPinY);
String direction;
if (xValue < 300 && yValue > 700) {
direction = "S";
} else if (xValue < 300 && yValue < 300) {
direction = "H";
} else if (xValue > 700 && yValue > 700) {
direction = "I";
} else if (xValue > 700 && yValue < 300) {
direction = "J";
} else if (yValue > 700) {
direction = "F";
} else if (yValue < 300) {
direction = "B";
} else if (xValue < 300) {
direction = "L";
} else if (xValue > 700) {
direction = "R";
}
BTSerial.println(direction); // Yön verisini Bluetooth ile gönder
delay(100); // İstenilen güncelleme hızına ayarlayabilirsiniz
}
Son düzenleyen: Moderatör: