Bir kodu diğerine entegre etmek

Akif9748

Kilopat
Katılım
19 Ocak 2020
Mesajlar
4.243
Makaleler
14
Çözümler
55
Dün kodlar üzerinde denemiştim ama başaramadım. Paylaşacağım koddaki Bluetooth ile veri gelen yerleri değiştirdim, ır yaptım ama tepki vermemişti. Sonrasında "veri" değişkeni varmış, onu ır sensörden gelen veri olarak tanımladım bu da olmadı. En sonunda yardım almaya karar verdim.

[CODE lang="csharp" title="Arduinoca"]#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

}

}

}[/CODE]

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. :)
Motor için ON/OFF: 40BF00ff.
Oto mod-manuel mod: 40BF807F.

Spoyler: Meraklısına, referans aldığım yer:

@Fakirmaker @cengover_ekin
 
Dün kodlar üzerinde denemiştim ama başaramadım. Paylaşacağım koddaki Bluetooth ile veri gelen yerleri değiştirdim, ır yaptım ama tepki vermemişti. Sonrasında "veri" değişkeni varmış, onu ır sensörden gelen veri olarak tanımladım bu da olmadı. En sonunda yardım almaya karar verdim.

[CODE lang="csharp" title="Arduinoca"]#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

}

}

}[/CODE]

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. :)
Motor için ON/OFF: 40BF00ff.
Oto mod-manuel mod: 40BF807F.

Spoyler: Meraklısına, referans aldığım yer:

@Fakirmaker @cengover_ekin
@fakirmaker burada yok sanırım.

Görmüştüm bunu da bakmaya fırsatım olmamıştı. Bakayım şimdi, müsait sayılırım.
 

Geri
Yukarı