Arduino kullananlar bir bakabilirmi?

Kodla Büyü
9 ve 10 numarali pinlerin ne ise yaradigini anlayamadim hocam, sanirim motor shield ile hic calismadigim icin.
onun disinda kodda benim gozume carpan verdiginiz komutu bir yenisi gelene kadar surekli isleyecektir. ornegin w ya bastiniz, arac one gidecek ve elinizi w dan ceksenizde durmayacaktir. taaki yeni bir komut alana dek ileri gitmeye devam eder :)
 
Suicide' Alıntı:
onun disinda kodda benim gozume carpan verdiginiz komutu bir yenisi gelene kadar surekli isleyecektir. ornegin w ya bastiniz, arac one gidecek ve elinizi w dan ceksenizde durmayacaktir. taaki yeni bir komut alana dek ileri gitmeye devam eder :)

Hocam bluetooth kodunu inceledim. Dediğiniz gibi yeni değer gelene kadar sürekli mevcut durum tekrarlanıyor. Benzer bir projeyi robotik sergisinde yapmıştım. Bu şekilde kodlandığında sorun yaşanacağını düşünüyorum. While döngüsünün her turunda işlem sonlandırılmalı bence. Yoksa fiziksel olarak aracı kontrol etmek zorlaşacaktır.
 
evet gozden kacan baska bir sey yoksa ana if den ciktiktan sonra pinler sifirlanmali ve her tusa ait if in icinde en sona bir miktar (50-100 ms yeter sanirim) delay eklenmeli.
 
ertsen, Suicide değerli bilgileriniz için çok teşekkür ediyorum, dediğiniz noktaları düzeltmeye çalıştım, bu sefer app invertor dosyaları ile birlikte paylaşıyorum, kodlarda hata varsa tekrar uyarmanızı rica ediyorum, allah razı olsun.
 

Ekli dosyalar

  • Desktop.rar
    1.7 MB · Görüntüleme: 15
suicide hocam 9 ve 10 nolu pinler motor hızını kontrol ediyor, dediğiniz gibi shieldin özelliği.
 

Ekli dosyalar

  • 1.jpg
    1.jpg
    17.8 KB · Görüntüleme: 516
Kod:
char gelenveri;

void setup() {
  // put your setup code here, to run once:
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(9, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:

if(Serial.available()){
  gelenveri==Serial.read();

if(gelenveri=='w'){
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);
  analogWrite(10, 200);
  delay(100);
  }

if(gelenveri=='s'){
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  analogWrite(10, 180);
  delay(100);
  }

if(gelenveri=='a'){
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  analogWrite(9, 120);
  delay(100);
  }

if(gelenveri=='d'){
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  analogWrite(9, 120);
  delay(100);
  }
 
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  analogWrite(9, 0);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  analogWrite(10, 0);
 gelenveri=' ';  
}

}

low lari sarta baglamaniza gerek yok, birde gelenverinin icerigini sifirlamak gerekecegini unutmusum sanirim.

motor shield guzel aletmis, pwm gibi gorunce tahmin etmistim az bucuk ama sorayim dedim yinede :) vereyim bitane siparis dursun, lazim olur illa.
 
hocam sizin yazdiginiz hali ile durdurmak icin e veya f ye basmak gerekir, benim yazdigim hali ile elinizi tustan cektiginiz anda durmasi gerekir, ayrica bir tusa basmak gerekmez.

tabi birde su var, seri iletisimden bilgi nasil geliyor? w ya basili tuttugunuzda surekli w mu geliyor yoksa hir w gelip iletisim duruyor mu.
 
suicide hocam bu gün uygulamamın denemelerini yaptım, tabi tecrübesizlikten dolayı binbir sorun çıktı; önce yukarıda paylaştığım app invertor ve arduino kodları ile denedim, w tuşuna ilk bastıımda döner gibi olup dönmedi, app invertor kodlarını ellemeden sizin kodlarla denedim yine aynısı oldu, sonra mesajınızı gördüm, normalde app invertorda click komutu kullanmıştım mesajınızdan sonra touch dawn kullandım ve sorun çözüldü, benim kodlar ve sizin yazdığınız kodlar aynı işi görüyor, benim kodlarda durması için e ve f ye basmamız gerekmiyor app invertor de touch up yani elini tuştan çekince tomatik larak e ve f gönderiyor. birde gelenveri==Serial.read(); kmutunda hata yapmışım == hatalı lmuş, = yapınca düzeldi. bir nkta daha bluetooth verici hc05 arduinoya bağlı iken ıde den uno ya yükleme yapmıyor muş onuda acı bir tecrübeyle öğrendim. :)
snuç olarak uygulamayı başarılı bir şekilde çalıştırdım, çalışan arduino ve app invertr kodlarını aşağıda paylaşıyorum, emekleriniz ve yardımlarınız için teşekkürler. :++:
 

Ekli dosyalar

  • arackontrolu.rar
    1.5 MB · Görüntüleme: 12
rica ederim, eger tlf tarafindaki uygulama eli cekince otomatik olarak e ve f yi gonderirse kodlar ayni sonucu verir, diger turlu dedigim gibi bir duzenleme yapmak gerekecek tabi, acikcasi bluetooth modulum olmadigi icin deneme firsatim olmadi hic kodlari, afaki yazdim biraz.

diger yandan bt modulu takili iken kod yuklenmemesinin nedeni arduinoya kodlarin yuklenmesi se rial port araciligi ile oluyor. o esnada seri al port ile bt modulu konustugu icin bilg.dan gelenler bir anlam ifade etmiyor.

son oalrak, s erial in neden yasakli oldugunu tahmin etmek kolay :) kürekli programlars karsi bir oto sansur :D
 
mesafe sensörü ile led yakma olayını yaptım, arduino ıde kodları aşağıda paylaştım, ama s4a da sensöre bağlı olarak kediyi zıplatmak istiyorum pulseIn komutunun karşılığını s4a da yapamadım, yarıda kaldığım s4a dosyasınıda detskop un içinde paylaştım, yardım edebilecek var mı?
 

Ekli dosyalar

  • Desktop.rar
    30.7 KB · Görüntüleme: 10
arkadaşlar mesafe ölçümünü pulseIn kullanmadan nasıl yapabiliriz? s4a yada mblock ile yapmak istiyorum, bu programlarda pulseIn karşılığı yok, pulsIn kullanmadan formül vb bişey ile yapabilirmiyiz?
 
arduino ile bir garaj kapısı projesi planlıyorum, proje şöyle; butona basınca buton değeri 1 olacak, tekrar basınca 2 olacak.
buton 1 olunca motor 1sn boyunca sağa dönecek ve buton 2 olana kadar bekleyecek, buton 2 olunca 1sn sola dönecek ve buton 1 olana kadar bekleyecek.
burada olana kadar bekle kullanmak gerekiyor, başka türlü olmuyor.
kodlara bakabilirmisiniz doğru olmuş mu?


int buton;
void setup() {
// put your setup code here, to run once:
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
pinMode(2, INPUT);
buton=0;
}

void loop() {
// put your main code here, to run repeatedly:

digitalWrite(7, 0);
digitalWrite(8, 0);
analogWrite(10, 0);
delay(10);

while(!(digitalRead(2)==HIGH));
buton=1;
if(buton==1){
digitalWrite(7, 0);
digitalWrite(8, 1);
analogWrite(10, 200);
delay(1000);
digitalWrite(7, 0);
digitalWrite(8, 0);
analogWrite(10, 0);

delay(10);
}
while(!(digitalRead(2)==HIGH));
buton=2;
if(buton==2){
digitalWrite(7, 1);
digitalWrite(8, 0);
analogWrite(10, 200);
delay(1000);
digitalWrite(7, 0);
digitalWrite(8, 0);
analogWrite(10, 0);
delay(10);

}

}
 
Arduinoya yeni başlamış biri olarak ayrı bir sayfa açmak istemedim. Takıldığım bir yer var birkaç gündür uğraşıyorum bir arpa boyu yol alamadım :(

Projem şu şekilde, butona her basıldığında sayacımız 1 artacak ve son durum kaç ise radyo dalgaları ile alıcıya yollayacak. Mesela son durumda sayaç değeri 16 ise 16 olarak karşı tarafa iletmesini istiyorum. Takıldığım yer aslında integer değerini char karakterine dönüştürme.

#include <VirtualWire.h>
#include <TM1637Display.h>

const int CLK = 9; //Set the CLK pin connection to the display
const int DIO = 8; //Set the DIO pin connection to the display
TM1637Display display(CLK, DIO); //set up the 4-Digit Display.

char* mesaj;
String mesaj2;

const int led_pin = 13;
const int tx_pin = 12;
const int buton = 6; /* Butonun bağlı olduğu pin */
int butonDurumu = 0; /* Butonun durumu */

int sayac = 0; /* butona basılma sayısını tutacak değişken */


void setup()
{
Serial.begin(9600);
pinMode(led_pin, OUTPUT);
pinMode(buton, INPUT);
vw_set_tx_pin(tx_pin);
vw_set_ptt_inverted(true);
vw_setup(4000);
display.setBrightness(0x0a); //set the diplay to maximum brightness
}

void loop()
{
butonDurumu = digitalRead(buton);
if(butonDurumu == HIGH) {
sayac ++;
digitalWrite(13,HIGH);
while(butonDurumu == HIGH){
butonDurumu = digitalRead(buton);
}
}else{
digitalWrite(led_pin, LOW);
}

// mesaj="16"; // Bu şekilde yolluyor

mesaj=char(sayac); // Bu şekilde hata veriyor.

vw_send((uint8_t *)mesaj, strlen(mesaj));
vw_wait_tx(); // Bütün mesaj gönderilene kadar bekleyin

Serial.println(mesaj);
display.showNumberDec(sayac); //Display the Variable value;

}
 
Geri
Üst