Affansen
Katılımcı Üye
- Katılım
- 15 Ocak 2021
- Mesajlar
- 501
- Puanları
- 56
Dün kodlar üzerinde denemiştim ama başaramadım. Paylaşacağım koddaki Bluetooth ile veri gelen yerleri değiştirdim, IR yaptım ama tepki vermemişti. Sonrasında "veri" değişkeni varmış, onu IR sensörden gelen veri olarak tanımladım bu da olmadı. En sonunda yardım almaya karar verdim.
Motor için ON/OFF:
Oto mod-manuel mod:
@FakirMaker @cengover_ekin
C#:
#include <IRremote.h>
uint8_t hiz = 0;
char command;
int receiver_pin = 4; //Connect the output pin of IR receiver at pin 4
int vcc = 5; //VCC for IR sensor
int gnd = 6; //GND for IR sensor
int statusled = 13;
IRrecv irrecv(receiver_pin);
decode_results results;
// connect motor controller pins to Arduino digital pins
// motor A
int enA = 6;
int in1 = 12;
int in2 = 11;
// motor B
int enB = 5;
int in3 = 10;
int in4 = 9;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(statusled,OUTPUT);
digitalWrite(statusled,LOW);
// set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(vcc, OUTPUT);
pinMode(gnd, OUTPUT);
// Initializing vcc pin high
digitalWrite(vcc, HIGH);
}
void loop() {
if (irrecv.decode(&results)) {
digitalWrite(statusled,LOW);
irrecv.resume();
switch(results.value){
case 0x40BFF807:
if(hiz<255)
hiz +=51;
analogWrite(enA,hiz);
analogWrite(enB,hiz);
break;
case 0x40BF7887:
if(hiz>0)
hiz -=51;
analogWrite(enA,hiz);
analogWrite(enB,hiz);
break;
default:
break;
}
if (results.value == 0x40BF609F){ // type button 2 forward robot control
// this function will run the motors in both directions at a fixed speed
Serial.println("Button 2");
// turn on motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// set speed to 200 out of possible range 0~255
// turn on motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// set speed to 200 out of possible range 0~255
}else if(results.value == 0x40BF906F){ // type button 4 turn left robot control
// this function will run motor A in forward directions motor B stop
Serial.println("Button 4");
// turn on motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// set speed to 200 out of possible range 0~255
// turn on motor B
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
// set speed to 200 out of possible range 0~255
}else if(results.value == 0x40BF48B7){ // type button 1 rotate left robot control
// this function will run motor A in forward directions motor B in backward directions
Serial.println("Button Turn Right");
// turn on motor A
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
// set speed to 200 out of possible range 0~255 analogWrite(enA, 130);
// turn on motor B
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// set speed to 200 out of possible range 0~255
}else if(results.value == 0x40BFD02F){ // type button 6 turn right robot control
// this function will stop motor A run motor B in forward directions
Serial.println("Button Turn Left");
// turn on motor A
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
// set speed to 200 out of possible range 0~255
// turn on motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// set speed to 200 out of possible range 0~255
}else if(results.value == 0x40BFC837){ // type button 3 rotate right robot control
// this function will run motor A in backward directions motor B in forward directions
// turn on motor A
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// set speed to 200 out of possible range 0~255
// turn on motor B
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
// set speed to 200 out of possible range 0~255
} else if(results.value == 0x40BF708F){ // type button 8 backward robot control
// this function will run motor A and motor B in backward directions
// turn on motor A
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
// set speed to 200 out of possible range 0~255
// turn on motor B
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// set speed to 200 out of possible range 0~255
}else if(results.value == 0x40BF50AF){ // type button 5 stop robot control
// this function will stop both motor A and motor B
// turn on motor A
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
// set speed to 200 out of possible range 0~255
// turn on motor B
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
// set speed to 200 out of possible range 0~255
}
}
}
C#:
int pwmA = 10; // sag motor
int pwmB = 11; // sol motor
int pwmsol = 100; // hiz sol
int pwmsag = 100; // hiz sag
int in1 = 4; //sag ileri
int in2 = 5; //sag geri
int in3 = 6; //sol ileri
int in4 = 7; //sol geri
int temmotoru = 12; // temizlik motoru pini
int otomod=0; //otomotik mod
char veri;
int triggerPin = 9; //mesafe sensoru tetikleme ucu
int echoPin = 8; //mesafe sensoru geri donus
long sure, uzaklik;
void setup() {
pinMode(pwmA,OUTPUT);
pinMode(pwmB,OUTPUT);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4, OUTPUT);
pinMode(temmotoru,OUTPUT);
pinMode(echoPin, INPUT);
pinMode(triggerPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
while(Serial.available()){
veri = Serial.read();
if (veri=='X')
otomod=1;
if (veri=='x')
otomod=0;
if(otomod==1)
otomatikmod();
else{
switch (veri){
Serial.print(veri);
pwmsol=100;
pwmsag=100;
case 'F': //ileri
{
ileri();
break;
}
case 'I': //ileri sag
{
pwmsol=150;
ileri();
}
case 'R': //sag
{
sag();
break;
}
case 'J': //Geri sag
{
pwmsol=150;
sag();
break;
}
case 'B': //Geri
{
geri();
break;
}
case 'H': //Geri sol
{
pwmsag=150;
geri();
break;
}
case 'L': //sol
{
sol();
break;
}
case 'G': //ileri sol
{
pwmsag=150;
ileri();
break;
}
case 'S': //durma
{
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
break;
}
case 'V': //Temizlik Motoru Acma
{
digitalWrite(temmotoru, 1);
break;
}
case 'v': //Temizlik Motoru Kapatma
{
digitalWrite(temmotoru, 0);
break;
}
case 'X': //otomotik mod calistirma
{
otomod=1;
break;
}
case 'x': //durma
{
otomod=0;
break;
}
}
Serial.println(veri);
}
}
}
void ileri(){
digitalWrite(in1, 1); //sag ileri
digitalWrite(in2, 0); //sag geri
digitalWrite(in3, 1); //sol ileri
digitalWrite(in4, 0); //sol geri
analogWrite(pwmA,pwmsag);
analogWrite(pwmB,pwmsol);
}
void sag(){
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 1);
digitalWrite(in4, 0);
analogWrite(pwmA,pwmsag);
analogWrite(pwmB,pwmsol);
}
void geri(){
digitalWrite(in1, 0);
digitalWrite(in2, 1);
digitalWrite(in3, 0);
digitalWrite(in4, 1);
analogWrite(pwmA,pwmsag);
analogWrite(pwmB,pwmsol);
}
void sol(){
digitalWrite(in1, 1);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
analogWrite(pwmA,pwmsag);
analogWrite(pwmB,pwmsol);
}
void otomatikmod(){
digitalWrite(triggerPin, LOW);
delayMicroseconds(5);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
sure = pulseIn(echoPin, HIGH);
uzaklik = sure / 29.1 / 2;
Serial.println(uzaklik);
if (uzaklik < 25) // Uzaklık 25'den kucuk ise,
{
geri(); // 150 ms geri git
delay(200);
sag(); // 250 ms saga donn
delay(300);
}
else { // degil ise,
ileri(); // ileri git
}
}
İkinci koddaki son kısım var, otomatik mod yazan. Bu robotun asıl amacı yerleri temizlemek. Ben de böyle olunca hazır koddan algoritmayı alıp diğer koda yerleştirmenin daha kolay olacağını düşündüm. Yani otomatik modu ve temmotoru (Temizlik robotunun tetik pini) ana koda eklemek gerekiyor. Tuşların kodlarını paylaşacağım. Bir de merak ettiğim bir husus otomatik moddayken kendisi otomatikman temizlik motorunu çalıştırıyor mu, yoksa tekrardan komut verilerek mi? Eğer otomatik başlıyorsa yolu varsa ayrı tuş olarak atanabilir mi? Teşekkürler.
Projenin son kalan kısmı sanırsam. Gerisi hazır olacak. Bu arada @FakirMaker Emeği geçenler şeklinde Serial porta kullanıcı isminizi yazdırsam sorun olur mu? En azından kodu paylaştığınızda kimin tarafından yapıldığı da belli olur başkaları için. İsteyen siler sonuçta.
Projenin son kalan kısmı sanırsam. Gerisi hazır olacak. Bu arada @FakirMaker Emeği geçenler şeklinde Serial porta kullanıcı isminizi yazdırsam sorun olur mu? En azından kodu paylaştığınızda kimin tarafından yapıldığı da belli olur başkaları için. İsteyen siler sonuçta.
Motor için ON/OFF:
40BF00FF
Oto mod-manuel mod:
40BF807F
@FakirMaker @cengover_ekin