Arduino Menu Tasarımında Sorun

Omega

Kıdemli Üye
Katılım
24 Kasım 2018
Mesajlar
2,063
Aslında en basit şekliyle anlatmak gerekirse.:

*Arduino Nano da bir butonum var ,6 tane de durum LED lerim ve bir adet de foto diyodum var (Alltaki kodlarda henüz kodları eklenmış değil)
Programdan istenen buton yardımıyla hangi LED yanık yanık kalmış ise photo diyota düşen ışık* belirli bir seyiyenin üstündeyse o PWM değeride çıkış pinin den bunu uygulasın .Sadece bu
* Burada LDR değil Photodiyot kullanmak zorundayım

Butona her bastığımda LED ler sırayla yanıyor ve CASE yapısının içince LED lerin açık kapalı durumlarının altında PwmWrite (led xxx) gibi bir satırla çıkış pwm değerleri ayarlanıyor.

Sorum, photo diyot belirli bir ışık seviyesinin üstünde olduğunda bu LED lerle pwm seviyesi seçilmiş değeri çıkıştan göndersin aksi takdirde göndermesin.

Bunu nasıl yapabilirim
Kodlar :
@Gokrtl bu kodların düzgün görülmesi için bu toolbarda hangi simgeye tıklanıyor?
C:
#include <PWM.h>//eklendi
int led = 9;   // eklendi
int32_t frequency = 50; //eklendi frequency (in Hz)

#define button 3

#define LED1 4
#define LED2 5
#define LED3 6

#define LED4 7
#define LED5 8
#define LED6 10
#define LED7 11

int state = 0;
int old=0;
int buttonPoll=0;
void setup() {
//InitTimersSafe();

  //sets the frequency for the specified pin
// bool success = SetPinFrequencySafe(led, frequency);

  //if the pin frequency was set successfully, turn pin 13 on
//  if(success) {
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH);
  // put your setup code here, to run once:
pinMode (button,INPUT);
pinMode (LED1,OUTPUT);
pinMode (LED2,OUTPUT);
pinMode (LED3,OUTPUT);

pinMode (LED4,OUTPUT);
pinMode (LED5,OUTPUT);
pinMode (LED6,OUTPUT);
pinMode (LED7,OUTPUT);

digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);

digitalWrite(LED4,LOW);
digitalWrite(LED5,LOW);
digitalWrite(LED6,LOW);
digitalWrite(LED6,LOW);

}

void loop() {
buttonPoll =digitalRead(button);
if (buttonPoll ==1){
  delay(50);
  buttonPoll=digitalRead(button);
  if (buttonPoll ==0){
    state =old+1;
  }}
  else{
    delay(100);
  }
  switch (state){
    case 1:
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
  //   pwmWrite(led, 27);
    pwmWrite(led, 26);

    old=state;
    break;
    case 2:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,HIGH);
    digitalWrite(LED3,LOW);

    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
    //pwmWrite(led, 44);
    pwmWrite(led, 51);
    old=state;
    break;

    case 3:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,HIGH);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
     //pwmWrite(led, 48);
    pwmWrite(led, 76);
    old=state;
    break;

   case 4:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,HIGH);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
   //pwmWrite(led, 52);
   pwmWrite(led, 102);
   old=state;
    break;


   case 5:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,HIGH);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);
   //pwmWrite(led, 58);
   pwmWrite(led, 127);
   old=state;
    break;

     case 6:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,HIGH);
    digitalWrite(LED7,LOW);
  //pwmWrite(led, 62);
   pwmWrite(led, 153);
      old=state;
    break;

case 7:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,HIGH);
   //pwmWrite(led, 78);
   pwmWrite(led, 179);
   old=state;
    break;
   
   default:
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);

    digitalWrite(LED4,LOW);
    digitalWrite(LED5,LOW);
    digitalWrite(LED6,LOW);
    digitalWrite(LED7,LOW);

    old=0;
     break;
  }
}
 
Last edited by a moderator:
Ben senin için düzelttim abi. Bir dahaki sefere şu şekilde yapabilirsin;

20210109_144355.png
 
Abi pwm konusuna pek hakim değilim ama çıkış pinini
C:
#define led 9
pinMode(led, OUTPUT);
olarak tanımlamayı denedin mi?
 
Denemedim benimde arduino da yazdığım 3. veya 4. koddur .Aslında bu konuyu halletmek için Gosub yerine ne kullanılıyorsa onu anlamam lazım birde butona tek basma hızlı çift basma ve uzun süre basmayı algılatan kod örneğinin viddeosu var aşağıda .

Çünkü yine aynı ledlerı hızlı yakıp söndürerek photodiyodun hassasiyet ayarlarını da seçtirmeyi düşünüyorum.Bunun içinde array kullanılımı veeya lookup table konularını da anlamam lazım

 
Son düzenleme:
Denemedim benimde arduino da yazdığım 3. veya 4. koddur .Aslında bu konuyu halletmek için Gosub yerine ne kullanılıyorsa onu anlamam lazım birde butona tek basma hızlı çift basma ve uzun süre basmayı algılatan kod örneğinin viddeosu var aşağıda .

Çünkü yine aynı ledlerı hızlı yakıp söndürerek photodiyodun hassasiyet ayarlarınıda seçtirmeyi düşünüyorum bunun içinde array kullnılımı ve/veya lookup table konularını da anlamam lazım

Videoyu izleyeceğim ama benim yazdığım şekilde dener misin?

Çünkü mevcut duruma göre sen integer olarak tanılmladığın "led" değişkenine "9" rakamını atamışsın. Case'ler içinde de pwm değerini "led" değişkeni içine atıyorsun. Değişkenin içinde normalde "9" varken sen misal "62" atıyorsun. O değişkenide başka bir yerde çıkışa gönderdiğini göremedim.
 
O PWM satırındaki 62,78 vb değerler pwm değerleri .Tek çıkış var o da 9.pin
 
O PWM satırındaki 62,78 vb değerler pwm değerleri .Tek çıkış var o da 9.pin
Anladım da 9 nolu pini sen değişken olarak tanımlamışsın. O yüzden çıkışa birşey gitmediği için çalışmıyor.

Şöyle izah edeyim;
int led = 9; yaparsan led değişkeni içine 9 atmış oluyorsun.
#define led 9 yaparsan 9 nolu pinin adını led yapmış oluyorsun. Bundan sonra nerede led yazarsan 9 nolu pine çıkış gider.
Tabi birde setup kısmında pinMode(led, OUTPUT); yapman lazım.
 
Onuda eklerimde benim tam olarak istediğim .Örneğin 4.LED i yaktım ve butona dokunmadım 2 sn sonra 4.LED bir kere flash yapsın ve photodiyot ışık algılama konumunu girsin ve o seviyenin (kodda ayarladığım) üstünde olduğunda 9.pinden 4.LED de ayarlanmış PWM i göndersin
photodiyot A0 veya herhangi boş bir anolog girişine takabilirim

Alttakide kod photodiyotun belirli bi seviyenin üstünde ışık algıladığında çıkıştaki LED i yakması için kod (Bu kodda çalışıyor mesela)
Amacım ilk uzun programla bu kısa kodun düzgün eklenebilmesi.

(@Gokrtl bu kod eklemede sol tarafa satır numarasını yazma özelliği eklenemiyor mu ? .Kodda birşeyler konuşulurken hangi satırı izah ettiğimiz kolay anlaşılır.)
Kod:
// Dosya adı: LDR.ino
#define inPin0// giriş A0 pini
#define led 3 // Yanacak LED in çıkış pini
//led 3 LOW
void setup() {

pinMode(led,OUTPUT);
Serial.begin(9600);
}


void loop() {

int isik=analogRead(A0);
Serial.println(isik);
delay(100);

if(isik>12){
  digitalWrite(led,HIGH);
}
if(isik<12){
digitalWrite(led,LOW);
  }
}
 
Son düzenleme:
(@Gokrtl bu kod eklemede sol tarata satır numarasını yazma özelliği eklenemiyormu ? .Kodda birşeyler konuşulurken hangi satırı izah ettiğimiz kolay anlaşılır.
Satır numarası görünmüyor abi. Taydin abiyle bir konuşayım ayarlama imkanı varsa açarız. Arada bana da lazım oluyor o satır numarası.
 
int led = 9;
#define led 9

Bunların ikisi farklı şeyler, ama pwmWrite fonksiyonuna argüman olarak verilirse, derleyici ikisini doğru bir şekilde fonksiyona aktarır.

Satır numaralı kod için bir eklenti var onu ekleyeyim bakalım nasıl olacak.
 
Videoda GOTO yu anlatmış .
Benim işimi tam görmüyor. Değerleride getirmesi lazım (Yada getiriyordur da tanımlamaları da öğrenmek lazım )

 
Fotodiyot olarak neyi kullanıyorsun? Özel bir arduino shield midir yoksa tek başına bir fotodiyot mu? İlgili yerin şemasını paylaşırsan daha iyi anlaşılır.
 
BPW34 kullanıyorum.Gerilim bölücü dirençlerle de denedim (1K ,10 K ve 1MOhm).Gerilim bölücü ile kullanınca ayırt etmem gereken değerler çok değişiyor ayırt etmem zorlaşıyor.Direkt Anolog girişe bağlı.
Seri monitörden de görebiliyorum .İkinci eklediğim kısa programda yaklaşık ışık değeri 50 den yukarısında algılama başlıyor
(Hiçbir sinyal yokken 45-48 arası değer üretiyor)
 
Son düzenleme:
Özel bir arduino shield midir
Nanonun üzerine taktığım kendi yaptığım bir shild

Buton D3 pininde
LED ler D5,D6,D7,D8,D10,D11 de
D9 PWM çıkışı (Aslında D9 a da bir LED vardı pwm çıkışı başka yok diye oradan pwm çıkışı aldım.Eğer Başka bilmediğim pwm pini varsa oradan alırsam çok iyi olur .Çünkü LED lerin sayısını 7 adet yapmam da gerekiyor
 
Buton ve LED'ler önemli değil. Önemli olan fotodiyodun bağlanış şekli. Fotodiyot ters polarize kullanılır ve ışığa göre ters kaçak akım değişir. O yüzden devrenin bağlantı şekli kritik. Tam olarak nasıl bağlı olduğunu çizersen anlamış oluruz.
 
Buton ve LED'ler önemli değil. Önemli olan fotodiyodun bağlanış şekli. Fotodiyot ters polarize kullanılır ve ışığa göre ters kaçak akım değişir. O yüzden devrenin bağlantı şekli kritik. Tam olarak nasıl bağlı olduğunu çizersen anlamış oluruz.
Zaten fotodiyotu ters bağlayınca serial monitörde mantıklı bir değer görülmüyor çizgili kısmı analog girişe takıyorum diğer ucda gnd tabi
 
Yani analog girişe fotodiyodun katodu bağlı, anot da şaseye mi bağlı? Başka hiçbir devre elemanı yok mu?
 
Evet A0 ve GND ye bağlı fotodiyot için başka bir yükseltici opamp, transistor falan yok
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,653
Mesajlar
97,274
Üyeler
2,438
Son üye
İbrahimSönmez

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top