Şimdi Ara

Arduino Programlama Yardım

Bu Konudaki Kullanıcılar:
2 Misafir - 2 Masaüstü
5 sn
26
Cevap
0
Favori
1.203
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Merhaba arkadaşlar,

    Size birşey soracaktım. Kuzenimin lise projesi var. Ambulans duyarlı trafik lambası vermişler proje olarak.

    Devreye başladım yapmaya simulasyonu ve yazılımını. Bir yerde takıldım arduino alanına hakim değilim fazla. Yardımcı olursanız çok sevinirim.

    Trafik lambası normal çalışıyor kırmızı,sarı,yeşil yanıyor sırayla daha sonra ambulansı algılayınca yeşil yanıyor. Bundan sonra ambulans geçtikten sonra tekrar lamba normal çalışma akışına dönmesi lazım ama ben bunu yapamadım. Yeşilde takılı kalıyor butona basınca. Video çektim ekte yolluyorum. Kodlarıda ek'e koydum.

    Sensör yerine buton koydum devrede; çalışma mantıgı aynı zaten sensör ve butonun. Butona basınca ambulansı algılamış oluyor ve yeşil yanıyor. Sonrasında dediğim gibi ambulans geçtikten sonra döngüyü tekrar başa alıp normal trafik lambasının çalışma akışına döndüremedim. Çözümü çok kolay bişi gibi duruyor interrupt koyulcak sanırım ama dediğim gibi bilgim olmadığı için yapamadım.


    int KIRMIZI=3;
    int SARI=4;
    int YESIL=5;
    int sinyalpin = A0;
    int degisken;
    int sayac;
    int sayac2;
    int zamanlayici;

    void setup() {
    pinMode (YESIL, OUTPUT);
    pinMode (SARI, OUTPUT);
    pinMode (KIRMIZI, OUTPUT);
    digitalWrite(sinyalpin,INPUT);
    degisken = digitalRead(sinyalpin) ;
    }

    void loop() {
    if(degisken=HIGH){
    kod();
    }
    else{
    kod2();
    }
    }

    void kod(){
    sayac=millis();
    zamanlayici=sayac % 24000;
    degisken = digitalRead(sinyalpin) ;

    if(degisken == HIGH){
    kod2();
    }
    else if(sayac==0){

    digitalWrite (KIRMIZI,HIGH);
    digitalWrite (SARI,LOW);
    digitalWrite (YESIL,LOW);
    }
    else if(sayac==10000){
    digitalWrite (KIRMIZI,HIGH);
    digitalWrite (SARI,HIGH);
    digitalWrite (YESIL,LOW);
    }
    else if(sayac==12000){
    digitalWrite (KIRMIZI,LOW);
    digitalWrite (SARI,LOW);
    digitalWrite (YESIL,HIGH);
    }
    else if(sayac==22000){
    digitalWrite (KIRMIZI,LOW);
    digitalWrite (SARI,HIGH);
    digitalWrite (YESIL,LOW);
    }
    else if(zamanlayici==0) {
    digitalWrite (KIRMIZI,HIGH);
    digitalWrite (SARI,LOW);
    digitalWrite (YESIL,LOW);
    }
    }

    void kod2(){
    digitalWrite (KIRMIZI, LOW);
    digitalWrite (SARI, LOW);
    digitalWrite (YESIL, HIGH);
    }


    Linkte video mevcut. isis'te devreyi kurup bu kodu arduino'da çalıştırdım.

    http://dosya.co/n28d6q89giyl/WhatsApp_Video_2018-02-13_at_14.47.14.mp4.html







  • Ambulansi algılayan sensör devreye girdiğinde giriş high olup sorna tekrar low mu oluyor yoksa ambulans orada olduğu sürece high mi kalıyor? (kodda hatalar var. Bu hali ile derleme sırasında da hata vermesi gerekir)

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Hata vermiyor video'nun linkini attım ordan bakabilirsin. Ambulans geldiğinde algılayıp yeşil yanacak. Ambulans geçtikten sonra yeşil sönüp normal trafik lambası çalışma akışına dönecek. Bu arada ilgilendiğin için teşekkürler. Sitede ardunio bilen yok galiba :)
  • Mete355 kullanıcısına yanıt
    if(degisken=HIGH){
    kod();
    }
    bu ifade yanlış mesela. iki tane = olmalı .
    if(degisken==HIGH){
    kod();
    }
  • Mete355 kullanıcısına yanıt
    videoya şimdi baktım.konu hakkında eksiğiniz var. butonda pull-up veya pull-down resistor yok. o başlı başına bir hata. kod tanımlamalarında uygun formatta yazım yapmamışsın. pinlere değil değişkenlere giriş çıkış atanmış :) hata vermiyorsa senin arduino ide herşeyi senin yerine yapıyor demektir
  • Hocam dediğim gibi arduino alanına hakim değilim. Yardımcı olursanız çok sevinirim cidden.
  • Mete355 kullanıcısına yanıt
    ben şimdi bi kod yazıp atıcam. onu bi deneyin
  • Mete355 kullanıcısına yanıt
    Arduino Programlama Yardım


     


    #define yesil 4
    #define sari 5
    #define kirmizi 6
    #define sensor 7


    int ambulans_algilandi_mi();
    void yesil_yansin();
    void kirmizi_yansin();
    void sari_yansin();


    int kirmizi_isik_zamani = 3;// hengi ışık kaç saniye yanacaksa buraya yazın.
    int sari_isik_zamani = 3;//sarı ışık 3 saniye yanacak
    int yesil_isik_zamani = 3;// yeşil ışık da 3 saniye yanacak
    int turn = 0;

    void setup() {

    pinMode(yesil, OUTPUT);
    pinMode(sari, OUTPUT);
    pinMode(kirmizi, OUTPUT);
    pinMode(sensor, INPUT);
    }

    void loop() {


    yesil_yansin();

    sari_yansin();

    kirmizi_yansin();


    }


    int ambulans_algilandi_mi()
    {
    if (digitalRead(sensor))
    {
    delay(60);
    return digitalRead(sensor);
    }

    }

    void yesil_yansin()
    {
    digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);

    for (int x = 0; x < yesil_isik_zamani * 1000; x++)
    {
    delay(1);
    while (ambulans_algilandi_mi())

    { digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);
    turn=1;

    }

    if (turn == 1)
    {
    digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);
    turn = 0;

    }
    }

    }
    void sari_yansin()
    {
    digitalWrite(yesil, LOW);
    digitalWrite(sari, HIGH);
    digitalWrite(kirmizi, LOW);

    for (int x = 0; x < sari_isik_zamani * 1000; x++)
    {
    delay(1);
    while (ambulans_algilandi_mi()) {
    digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);
    turn = 1;

    }

    if (turn == 1)
    {
    digitalWrite(yesil, LOW);
    digitalWrite(sari, HIGH);
    digitalWrite(kirmizi, LOW);
    turn = 0;

    }
    }

    }


    void kirmizi_yansin()
    {
    digitalWrite(yesil, LOW);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, HIGH);

    for (int x = 0; x < kirmizi_isik_zamani * 1000; x++)
    {
    delay(1);
    while (ambulans_algilandi_mi()) {
    digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);
    turn = 1;

    }

    if (turn == 1)
    {
    digitalWrite(yesil, LOW);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, HIGH);
    turn = 0;

    }
    }

    }









    < Bu mesaj bu kişi tarafından değiştirildi ghostmanzero -- 21 Şubat 2018; 17:33:53 >




  • Mete355 kullanıcısına yanıt
    bu kodla sensör high olduğu sürece daima yeşil yanar. sensör low olduğu gibi de sistem en son hangi ışıkta ve hangi saniyede kaldıysa aynen oradan devam eder.
  • Hocam denedim çalışıyor ama söyle bir sıkıntı var. Trafik ışığı yeşil sarı kırmızı olarak yanıyor. Onu kırmızı sarı yeşil olarak yaparsak Ve yeşil ışıgın yanma süresi 5 saniye filan olarak ayarlasak. Çünkü butona basınca yani sensör ambulansı algılayınca yeşil ışığın yandığını göremiyorum çalıştırınca.
  • Mete355 kullanıcısına yanıt
    istediğin şekilde kendin düzenleyebilirsin
     void loop() {  


    yesil_yansin();

    sari_yansin();

    kirmizi_yansin();


    }


    burada sıralamayı değiştirmen yeterli.

     

    void loop() {

    kirmizi_yansin();

    sari_yansin();

    yesil_yansin();


    }
    bu şekilde kırmızı, sarı ve yeşil yanar.


    süreyi de yine istediğin gibi değişterebilirsin.
     

    int kirmizi_isik_zamani = 3;// hengi ışık kaç saniye yanacaksa buraya yazın.
    int sari_isik_zamani = 3;//sarı ışık 3 saniye yanacak
    int yesil_isik_zamani = 3;// yeşil ışık da 3 saniye yanacak

    burada ben hepsine 3sn attım. sen istediğin ışığın süresini burdan değiştirebilirsin. int yesil_isik_zamani = 3; yerine int yesil_isik_zamani = 5; yazarsan yeşil ışık 5 saniye yanar.
  • Dediklerinizi yaptım yalnız şey hala düzelmedi butona basınca yeşil hemen direk yanıp sönüyor. 5sn beklesin ambulans geçsin sonra sönsün olarak nasıl yaparız onu.
  • Mete355 kullanıcısına yanıt
    öyleyse butona bakıp bırakıyorsun. ben başta bunun için sormuştum buton, ambulans orda olduğu sürece high mı kalacak diye.





    #define yesil 4
    #define sari 5
    #define kirmizi 6
    #define sensor 7


    int ambulans_algilandi_mi();
    void yesil_yansin();
    void kirmizi_yansin();
    void sari_yansin();


    int kirmizi_isik_zamani = 3;// hengi ışık kaç saniye yanacaksa buraya yazın.
    int sari_isik_zamani = 3;//sarı ışık 3 saniye yanacak
    int yesil_isik_zamani = 3;// yeşil ışık da 3 saniye yanacak
    int turn = 0;
    int bekle =5;

    void setup() {

    pinMode(yesil, OUTPUT);
    pinMode(sari, OUTPUT);
    pinMode(kirmizi, OUTPUT);
    pinMode(sensor, INPUT);
    }

    void loop() {


    yesil_yansin();

    sari_yansin();

    kirmizi_yansin();


    }


    int ambulans_algilandi_mi()
    {
    if (digitalRead(sensor))
    {
    delay(60);
    return digitalRead(sensor);
    }

    }

    void yesil_yansin()
    {
    digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);

    for (int x = 0; x < yesil_isik_zamani * 1000; x++)
    {
    delay(1);
    while (ambulans_algilandi_mi())

    { digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);

    turn=1;

    }

    if (turn == 1)
    {
    delay(bekle*1000);
    digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);

    turn = 0;

    }
    }

    }
    void sari_yansin()
    {
    digitalWrite(yesil, LOW);
    digitalWrite(sari, HIGH);
    digitalWrite(kirmizi, LOW);

    for (int x = 0; x < sari_isik_zamani * 1000; x++)
    {
    delay(1);
    while (ambulans_algilandi_mi()) {
    digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);

    turn = 1;

    }

    if (turn == 1)
    {
    delay(bekle*1000);
    digitalWrite(yesil, LOW);
    digitalWrite(sari, HIGH);
    digitalWrite(kirmizi, LOW);

    turn = 0;

    }
    }

    }


    void kirmizi_yansin()
    {
    digitalWrite(yesil, LOW);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, HIGH);

    for (int x = 0; x < kirmizi_isik_zamani * 1000; x++)
    {
    delay(1);
    while (ambulans_algilandi_mi()) {
    digitalWrite(yesil, HIGH);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, LOW);

    turn = 1;

    }

    if (turn == 1)
    {
    delay(bekle*1000);
    digitalWrite(yesil, LOW);
    digitalWrite(sari, LOW);
    digitalWrite(kirmizi, HIGH);

    turn = 0;

    }
    }

    }










    en üstte "bekle" yazan değeri değiştirerek istediğin kadar bekletirsin.Ben istediğin gibi 5 saniye koydum.



    < Bu mesaj bu kişi tarafından değiştirildi ghostmanzero -- 21 Şubat 2018; 20:36:34 >




  • Hocam dediginiz kodu yükledim yine değişen bişi olmadı butona basıp bırakıyorum bekleme yapmadan direk yeşil yanıp öbürkü ışığa geçiyor.
  • quote:

    Orijinalden alıntı: Mete355

    Hocam dediginiz kodu yükledim yine değişen bişi olmadı butona basıp bırakıyorum bekleme yapmadan direk yeşil yanıp öbürkü ışığa geçiyor.

    en son attığım kodu bi daha dene.küçük bir hata vardı. onu düzelttim. bu sefer çalışır
  • butona basıp çekince dediğim gibi bekleme yapmadan direk öbürkü ışığa geçiyor.

    Butonu sürekli on konumunda yani kapalı konumda tuttuğumuzda bu sefer yeşilde takılıp kalıyor.

    İki türlüde denedim
  • Şimdi oldu hocam çok teşekkür ederim sizi uğraştırdım baya. Hakkınızı helal edin.

    Son olarak bu buton yerine hangi sensörü kullanmamı öneriyorsunuz. Dediğim gibi arduino yazılım konusunda bilgim yok bu bana verdiginiz yazılım ile hangi sensör gider.
  • quote:

    Orijinalden alıntı: Mete355

    butona basıp çekince dediğim gibi bekleme yapmadan direk öbürkü ışığa geçiyor.

    Butonu sürekli on konumunda yani kapalı konumda tuttuğumuzda bu sefer yeşilde takılıp kalıyor.

    İki türlüde denedim

    dediğim gibi bu en son attığım kodu dene tekrar. çalışıyor. butona basıp bırakınca 5 sanıye daha yeşil yanacak. sonra kaldığı yerden devam eder
  • Mete355 kullanıcısına yanıt
    sensör olayı sana kalmış ama gelen aracın ambulans mı başka bir araç mı olacağını nerden bilicez. hani onun için bir ibare veya bir koşul var mı ?
  • söyle düşündüm mesela 3 araba geliyor bunlardan birisi ambulans diğer ikisi normal taksi. Ambulansın üzerine bir verici koyarız. Trafik lambasının altınada alıcı. Ambulansı algılayınca yeşil yanacak ambulans gidince normal çalışma akışına devam edecek. Bunu maket üstüne yapcaz. Oyuncak ambulansın üstüne dediğim gibi verici, lambanın altına alıcı koyarız gibi düşündüm.
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.