Şimdi Ara

Switch case ile değişkeni joystick ile değiştirilebilir mi?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
23
Cevap
2
Favori
413
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Örnek kod aşağıda:

    Örnekte sicaklikdegisken ini tuş ile veya joystick le 25 de 26 ya gibi bi değişim yaptırılabilir mi. bazı videolar da görmüştüm ama nasıl yapılacağını bulamadım çözemedim yardım edermisiniz.

    #include <LiquidCrystal.h> 

    //*** DEĞİTİRİLECEK
    float sicaklikdegisken=26.7;
    //***

    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    int sogutucu;
    float gerilim;
    int sicaklikpin=1;
    int sicaklik;



    void setup(){
    lcd.begin(16,2);
    }


    void loop(){
    gerilim = analogRead(sicaklikpin);
    gerilim = (gerilim/1023)*5000;
    sicaklik = gerilim /10,0;

    if(sicaklik < sicaklikdegisken){
    digitalWrite(sogutucu,LOW);
    }else if(sicaklik > sicaklikdegisken){
    digitalWrite(sogutucu,HIGH);
    }

    }
    }










  • kullanacağınız devre elemanı nedir? Düğme mi yoksa ayarlı direnç mi yada enkoder tarzı bir eleman mı? Kodlar hepsinde farklı olacak.

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: goçhisar

    kullanacağınız devre elemanı nedir? Düğme mi yoksa ayarlı direnç mi yada enkoder tarzı bir eleman mı? Kodlar hepsinde farklı olacak.

    düğme tercihim teşekkürler

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • en üste:
    #define arti (hangi pini kullanacaksan numarası)
    #define eksi (hangi pini kullanacaksan numarası)

    setup() kısmına:
    pinMode(arti, INPUT);
    pinMode(eksi, INPUT);

    loop() kısmına:
    if(digitalRead(arti)){
    pulseIn(arti, LOW);
    sicaklikdegisken = sicaklikdegisken + 0.1;
    }
    if(digitalRead(eksi)){
    pulseIn(eksi, LOW);
    sicaklikdegisken = sicaklikdegisken - 0.1;
    }

    bunları ekleyeceksin.

    < Bu ileti tablet sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: goçhisar

    en üste:
    #define arti (hangi pini kullanacaksan numarası)
    #define eksi (hangi pini kullanacaksan numarası)

    setup() kısmına:
    pinMode(arti, INPUT);
    pinMode(eksi, INPUT);

    loop() kısmına:
    if(digitalRead(arti)){
    pulseIn(arti, LOW);
    sicaklikdegisken = sicaklikdegisken + 0.1;
    }
    if(digitalRead(eksi)){
    pulseIn(eksi, LOW);
    sicaklikdegisken = sicaklikdegisken - 0.1;
    }

    bunları ekleyeceksin.

    bu kadar basit miydi ya hiç kafamı çalıştırmamışım :D... Acaba Joystick ile de bi örnek verebilirmisiniz .



    < Bu mesaj bu kişi tarafından değiştirildi prax -- 14 Temmuz 2016; 17:32:29 >
  • pulseln nin amacı nedir mantığını daa anlatabilirmisiniz ?

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • amacı tuş LOW yani boşta olduğu zaman sayması anlamı da mı kulla ıldı

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • Tuş bırakılana kadar kodu durdurur. Durdurmazsa sürekli düşüş yaşanır. çok hızlı iniş çıkış sıcaklık değerini rahat ayarlayamamana sebep olur.

    elindeki joistick türü nedir? Hareket bilgisi lazım.
  • quote:

    Orijinalden alıntı: goçhisar

    Tuş bırakılana kadar kodu durdurur. Durdurmazsa sürekli düşüş yaşanır. çok hızlı iniş çıkış sıcaklık değerini rahat ayarlayamamana sebep olur.

    elindeki joistick türü nedir? Hareket bilgisi lazım.

    çok teşekkür ederim. benim elimdeki ler basınca kalan cins ten miş. acaba basınca aktif basmayınca deaktiv butonlara ne deniyor . elimde joystick olarak hali hazırda yok ama modülü 2 eksenli alma imkanım olabilir.

    birde ben switch Case yapsam örnek menü 1 de sicaklikdegisken ini menü 2 de de nemdegisken diye yapsam aynı taşlarla yapabilirmiyim?



    < Bu mesaj bu kişi tarafından değiştirildi prax -- 14 Temmuz 2016; 21:21:16 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Buton basma işinde parazit vardır. Basarken yada çekerken işlemciye ardarda basılıp çekiliyormuş gibi gösterir. Bunu engellemek için butonlara ufak kondansatörler bağlar yada kodla bekleme süresi ekleriz. En basit halini pulse in komutu ile verdim. daha detaylısı için millis() komutu ile bekletme işlevi kullanarak bekletilen süre dolunca ikinci basım gerçekleşiyormuş gibi işlemi devam ettirebilirsin. Bas çek şeklinde değilde açık kapalı butonlar ise onlarla menü gezintisi yapılmaz. PushButton tarzında olması menü gezintisi için daha iyidir.

    En güzel yöntem ise rotary encoder kullanmak. İmzamdaki sitede bir adet tanıttım oraya bak istersen. Bazı araba teyiplerinde olan, basınca teyibi açan, çevirince sesi yükseltip düşüren sonsuz dönmeye sahip encoderler daha güzeldir.

    Menü gezintisi ayarlayabilirsin tabi. Çok zor bir işlem değil. lcd print ile menü oluşturabilirsin. Mesela yukardaki verdiğim kodda sıcaklık artış ve azalmasının ardına lcd print komutu ekleyip değişimi ekrana yazdırabilirsin. 2 adet ayar değiştirme için giriş, 2 adet menü gezintisi için giriş sinyali olması yeterli olur. Menü gezintisi için giriş (onay seçim) ve çıkış olacak. Menü seviye değişkenlerin olacak. Her seviye için menü adları ekrana yazdırılacak.

    switch komutu menü için iyi olur. Her münü adına bir kimlik numarası verirsin, menü seviye değişkenlerine kimlik numarasını kaydeder ve yapılması gereken işlem için dallandırmalı seçim yaptırırsın.




  • quote:

    Orijinalden alıntı: goçhisar

    Buton basma işinde parazit vardır. Basarken yada çekerken işlemciye ardarda basılıp çekiliyormuş gibi gösterir. Bunu engellemek için butonlara ufak kondansatörler bağlar yada kodla bekleme süresi ekleriz. En basit halini pulse in komutu ile verdim. daha detaylısı için millis() komutu ile bekletme işlevi kullanarak bekletilen süre dolunca ikinci basım gerçekleşiyormuş gibi işlemi devam ettirebilirsin. Bas çek şeklinde değilde açık kapalı butonlar ise onlarla menü gezintisi yapılmaz. PushButton tarzında olması menü gezintisi için daha iyidir.

    En güzel yöntem ise rotary encoder kullanmak. İmzamdaki sitede bir adet tanıttım oraya bak istersen. Bazı araba teyiplerinde olan, basınca teyibi açan, çevirince sesi yükseltip düşüren sonsuz dönmeye sahip encoderler daha güzeldir.

    Menü gezintisi ayarlayabilirsin tabi. Çok zor bir işlem değil. lcd print ile menü oluşturabilirsin. Mesela yukardaki verdiğim kodda sıcaklık artış ve azalmasının ardına lcd print komutu ekleyip değişimi ekrana yazdırabilirsin. 2 adet ayar değiştirme için giriş, 2 adet menü gezintisi için giriş sinyali olması yeterli olur. Menü gezintisi için giriş (onay seçim) ve çıkış olacak. Menü seviye değişkenlerin olacak. Her seviye için menü adları ekrana yazdırılacak.

    switch komutu menü için iyi olur. Her münü adına bir kimlik numarası verirsin, menü seviye değişkenlerine kimlik numarasını kaydeder ve yapılması gereken işlem için dallandırmalı seçim yaptırırsın.

    Tekrardan özür dilerim . verdiğiniz kod ile yapamadım. ama şu kod ile denedim ama birtürlü olmuyor.artım butona basıyorum sicaklikdegisken degisiyor herşey yolunda bir de düşüreyim diyorum düşmüyor.
    ISIS ile şemasını çıkardım. bi bakabilirseniz sevinirim. Rar halinde koydum.

    http://s4.dosya.tc/server2/fmwm2u/butonladegiskendegistirme.rar.html

    Kod:
     
    #include <LiquidCrystal.h>

    LiquidCrystal lcd(12,11,5,4,3,2);

    const int buton = 6; /*sicaklkdegisken artis*/
    const int buton1 = 7; /*sicaklkdegisken azalis*/

    const int led = 9;
    float sicaklikdegisken = 26.7; /* butona basılma sayısını tutacak değişken */
    float nemdegisken = 67.1;
    int butonDurumu = 0;
    int butonDurumu1 = 0;

    void setup() {
    pinMode(buton, INPUT);
    pinMode(buton1, INPUT);
    pinMode(led, OUTPUT);
    lcd.begin(16,2);
    }

    void loop() {
    butonDurumu = digitalRead(buton);
    if (butonDurumu == HIGH) {
    delay(10); /* dalgalanmalar için biraz bekleyelim */
    sicaklikdegisken=sicaklikdegisken+0.1; /* sayaç = sayaç + 1 yani sayaç değeri bir arttırıldı */
    while(butonDurumu == HIGH){ /* Butona basili olduğu surece bekle */
    butonDurumu = digitalRead(buton); /* Butonun durumunu kontrol et */
    }
    delay(10); /* dalgalanmalar için biraz bekleyelim */
    }
    butonDurumu1 = digitalRead(buton1);
    if (butonDurumu1 == HIGH) {
    delay(10); /* dalgalanmalar için biraz bekleyelim */
    sicaklikdegisken=sicaklikdegisken-0.1; /* sayaç = sayaç + 1 yani sayaç değeri bir arttırıldı */
    while(butonDurumu1 == HIGH){ /* Butona basili olduğu surece bekle */
    butonDurumu1 = digitalRead(buton1); /* Butonun durumunu kontrol et */
    }
    delay(10); /* dalgalanmalar için biraz bekleyelim */
    }

    lcd.setCursor(0,0);
    lcd.print(sicaklikdegisken); /* sayaç değerimizi ekrana yazdırıyoruz */

    if(sicaklikdegisken>26.7){
    digitalWrite(led,HIGH);
    }
    if(sicaklikdegisken<26.0){
    digitalWrite(led,HIGH);
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi prax -- 17 Temmuz 2016; 16:15:32 >




  • #include <LiquidCrystal.h> 

    LiquidCrystal lcd(12,11,5,4,3,2);
    #define yukari 6 /*sicaklkdegisken artis*/
    #define asagi 7 /*sicaklkdegisken azalis*/

    float sicaklik = 26.7; /* butona basılma sayısını tutacak değişken */
    long beklemeSuresi = 200 // butona basılı kalma süresi ne olması gerekiyorsa milisaniye olarak yazılacak
    long sureYukari = 0 //butona basılı kalan süre bu değişkende tutulacak
    long sureAsagi = 0
    bool asagiTetik = false; // her düğmeye basışta bir defa ısı değişimi isteği
    bool yukariTetik = false;

    void setup() {
    pinMode(yukari, INPUT);
    pinMode(asagi, INPUT);
    pinMode(led, OUTPUT);
    lcd.begin(16,2);
    lcd.clear();
    }

    void loop() {
    if(digitalRead(yukari) == HIGH){
    sureYukari = millis();
    yukariTetik = true; // sıcaklık artışına izin ver.
    }else{
    if(yukariTetik){
    if((millis() - sureYukari) > beklemeSuresi){
    sicaklik = sicaklik + 0.1;
    yukariTetik = false; // sıcaklık artışı yapıldı, izni kaldır.
    LCD_sicaklik(); // sıcalıkğı lcd ye yazdır.
    sureYukari = millis();
    }
    }else{
    sureYukari = millis();
    }
    }
    if(digitalRead(asagi) == HIGH){
    sureAsagi = millis();
    asagiTetik = true; // sıcaklık azalmasına izin ver.
    }else{
    if(asagiTetik){
    if((millis() - sureAsagi) > beklemeSuresi){
    sicaklik = sicaklik - 0.1;
    asagiTetik = false; // sıcaklık azaltıldı, izni kaldır.
    LCD_sicaklik(); // sıcalıkğı lcd ye yazdır.
    sureAsagi = millis();
    }
    }else{
    sureAsagi = millis();
    }
    }
    }

    void LCD_sicaklik(){
    lcd.SetCursor(0,0);
    lcd.print(sicaklikdegisken);
    lcd.print(" "); // sıcaklık değeri basamak değiştirmesi halinde kalan artık yazıyı silmek için
    }


    Kodlarının düzenli çalışmasını istiyorsan, kod yazma mantığının gelişmesini istiyorsan;
    isimlendirmeleri dış ortamdaki tanımlamaların ile uyuştur,
    kaynak kullanımında uzun süreçlerle işlem yapmamaya dikkat et. lcd yazdırma uzun bir süreçtir, sürekli yazdırıyorsun. delay yerinede iç süre ölçeri kullanırsan daha dakik programlar oluşur.
    iç işleyişte nem eklemeyi de düşünüyorsun, süre kullanımındaki bekletmelerin hepsi kalkmalı. Dış ortamdan çoklu veri alma durumlarında buna dikkat et.

    Yukarda verdiğim kod hiç durmadan sürekli kontrol için akar. sıfır bekleme vardır. millis() komutu işlemcinin iç zaman sayacıdır. sayaçla kaydettiğim süre arasındaki fark bekleme süresi olarak ayarladığım 200 milisaniyeyi aşmadığında tepki vermez.

    tetiklemeler ile de süre değişkenleri yenilendiğinden butona ardarda basımlarda zıplamalı artış yaptırmaz.

    sürekli basmalarda her 200 mili saniyede bir artış yaptırır.




  • quote:

    Orijinalden alıntı: goçhisar

    #include <LiquidCrystal.h> 

    LiquidCrystal lcd(12,11,5,4,3,2);
    #define yukari 6 /*sicaklkdegisken artis*/
    #define asagi 7 /*sicaklkdegisken azalis*/

    float sicaklik = 26.7; /* butona basılma sayısını tutacak değişken */
    long beklemeSuresi = 200 // butona basılı kalma süresi ne olması gerekiyorsa milisaniye olarak yazılacak
    long sureYukari = 0 //butona basılı kalan süre bu değişkende tutulacak
    long sureAsagi = 0
    bool asagiTetik = false; // her düğmeye basışta bir defa ısı değişimi isteği
    bool yukariTetik = false;

    void setup() {
    pinMode(yukari, INPUT);
    pinMode(asagi, INPUT);
    pinMode(led, OUTPUT);
    lcd.begin(16,2);
    lcd.clear();
    }

    void loop() {
    if(digitalRead(yukari) == HIGH){
    sureYukari = millis();
    yukariTetik = true; // sıcaklık artışına izin ver.
    }else{
    if(yukariTetik){
    if((millis() - sureYukari) > beklemeSuresi){
    sicaklik = sicaklik + 0.1;
    yukariTetik = false; // sıcaklık artışı yapıldı, izni kaldır.
    LCD_sicaklik(); // sıcalıkğı lcd ye yazdır.
    sureYukari = millis();
    }
    }else{
    sureYukari = millis();
    }
    }
    if(digitalRead(asagi) == HIGH){
    sureAsagi = millis();
    asagiTetik = true; // sıcaklık azalmasına izin ver.
    }else{
    if(asagiTetik){
    if((millis() - sureAsagi) > beklemeSuresi){
    sicaklik = sicaklik - 0.1;
    asagiTetik = false; // sıcaklık azaltıldı, izni kaldır.
    LCD_sicaklik(); // sıcalıkğı lcd ye yazdır.
    sureAsagi = millis();
    }
    }else{
    sureAsagi = millis();
    }
    }
    }

    void LCD_sicaklik(){
    lcd.SetCursor(0,0);
    lcd.print(sicaklikdegisken);
    lcd.print(" "); // sıcaklık değeri basamak değiştirmesi halinde kalan artık yazıyı silmek için
    }


    Kodlarının düzenli çalışmasını istiyorsan, kod yazma mantığının gelişmesini istiyorsan;
    isimlendirmeleri dış ortamdaki tanımlamaların ile uyuştur,
    kaynak kullanımında uzun süreçlerle işlem yapmamaya dikkat et. lcd yazdırma uzun bir süreçtir, sürekli yazdırıyorsun. delay yerinede iç süre ölçeri kullanırsan daha dakik programlar oluşur.
    iç işleyişte nem eklemeyi de düşünüyorsun, süre kullanımındaki bekletmelerin hepsi kalkmalı. Dış ortamdan çoklu veri alma durumlarında buna dikkat et.

    Yukarda verdiğim kod hiç durmadan sürekli kontrol için akar. sıfır bekleme vardır. millis() komutu işlemcinin iç zaman sayacıdır. sayaçla kaydettiğim süre arasındaki fark bekleme süresi olarak ayarladığım 200 milisaniyeyi aşmadığında tepki vermez.

    tetiklemeler ile de süre değişkenleri yenilendiğinden butona ardarda basımlarda zıplamalı artış yaptırmaz.

    sürekli basmalarda her 200 mili saniyede bir artış yaptırır.

    çok teşekkür ederim. Öğrenme amaçlı daha çok dediğim gibi . detaylıca öğrenmek için daha fazla ne yapmalıyım . dediğiniz gibi mantık çok önemli. mantığı geliştirmek için ne gibi konulara bakmam lazım. ben öğrenmek için geleceğiyazanlar turkcell deki programı kullandım. temel bilgileri öğretiyor gibi. bi site önerirnisiniz makale tarzında olabilir. benim internette bulduklarım hep aynı tarzda olduğu için pek fazla bilgi katamıyorum

    < Bu ileti mobil sürüm kullanılarak atıldı >




  • pek fazla kaynak öneremiyorum. ben alt yapıyı epey geliştirdiğim için birebir sorunla karşılaşınca düzenleme yapısını verebiliyorum. bildiğim dillerin ve mantık yapılarının sayısını bile bilmiyorum.

    Zeka gelişimi içi çeşitli taktikler vardır. Sadece aynı yapı üzerinde sürekli durmak zekayı köreltir. farklı işlemler için zekanı zorla. hiç işlem yapmadan, hareket yapmadan sadece düşünerek çözümleme yoluna gitme alıştırması yap.

    ben elektronik programlamayı 16f87 işlemcisinin tüm iç yapısını öğrenerek çözdüm. Tüm lojik mantık işlevlerini kafada çözümleyip içerdeki hareketleri tek tek ilerliyormuşcasına asm kodlarının işleyişine kadar bit bit ilerliyerek çözdüm. uzun bir yol fakat sağlam mantık oturttum. Bundan önce zamnının basic, pascal gibi dillerini bilerek başladığım için asembler ve c++ da kolay geldi.

    Eğer çok ileri seviyeye çıkmayı düşünmüyorsan benden tavsiye alma. Çünkü işlemci ile çalışıyorsam işlemci transistör yapısına kadar kat kat nasıl yapılır, imal edilir öğrenme eğiliminde işin delisiyim.

    Ufak tefek işler için forumda soru sor, denk gelirsem cevaplarım.




  • quote:

    Orijinalden alıntı: goçhisar

    pek fazla kaynak öneremiyorum. ben alt yapıyı epey geliştirdiğim için birebir sorunla karşılaşınca düzenleme yapısını verebiliyorum. bildiğim dillerin ve mantık yapılarının sayısını bile bilmiyorum.

    Zeka gelişimi içi çeşitli taktikler vardır. Sadece aynı yapı üzerinde sürekli durmak zekayı köreltir. farklı işlemler için zekanı zorla. hiç işlem yapmadan, hareket yapmadan sadece düşünerek çözümleme yoluna gitme alıştırması yap.

    ben elektronik programlamayı 16f87 işlemcisinin tüm iç yapısını öğrenerek çözdüm. Tüm lojik mantık işlevlerini kafada çözümleyip içerdeki hareketleri tek tek ilerliyormuşcasına asm kodlarının işleyişine kadar bit bit ilerliyerek çözdüm. uzun bir yol fakat sağlam mantık oturttum. Bundan önce zamnının basic, pascal gibi dillerini bilerek başladığım için asembler ve c++ da kolay geldi.

    Eğer çok ileri seviyeye çıkmayı düşünmüyorsan benden tavsiye alma. Çünkü işlemci ile çalışıyorsam işlemci transistör yapısına kadar kat kat nasıl yapılır, imal edilir öğrenme eğiliminde işin delisiyim.

    Ufak tefek işler için forumda soru sor, denk gelirsem cevaplarım.

    yardımlarınız için teşekkür ederim. Çok ileri seviye belki olmaz ama en azından kendim bi mantık yürütmem işlerimi kolaylaştıracak ve bana yetecek teşekkür ederim




  • quote:

    Orijinalden alıntı: goçhisar

    pek fazla kaynak öneremiyorum. ben alt yapıyı epey geliştirdiğim için birebir sorunla karşılaşınca düzenleme yapısını verebiliyorum. bildiğim dillerin ve mantık yapılarının sayısını bile bilmiyorum.

    Zeka gelişimi içi çeşitli taktikler vardır. Sadece aynı yapı üzerinde sürekli durmak zekayı köreltir. farklı işlemler için zekanı zorla. hiç işlem yapmadan, hareket yapmadan sadece düşünerek çözümleme yoluna gitme alıştırması yap.

    ben elektronik programlamayı 16f87 işlemcisinin tüm iç yapısını öğrenerek çözdüm. Tüm lojik mantık işlevlerini kafada çözümleyip içerdeki hareketleri tek tek ilerliyormuşcasına asm kodlarının işleyişine kadar bit bit ilerliyerek çözdüm. uzun bir yol fakat sağlam mantık oturttum. Bundan önce zamnının basic, pascal gibi dillerini bilerek başladığım için asembler ve c++ da kolay geldi.

    Eğer çok ileri seviyeye çıkmayı düşünmüyorsan benden tavsiye alma. Çünkü işlemci ile çalışıyorsam işlemci transistör yapısına kadar kat kat nasıl yapılır, imal edilir öğrenme eğiliminde işin delisiyim.

    Ufak tefek işler için forumda soru sor, denk gelirsem cevaplarım.

    Tekrar dan özür dilerim. sizin kod işe yaradı teşekkür ederim. fakat daha fazla değişken için sayac ekledim. bunlarıda "&&" işareti ile if komutuna yerleştirdim. 1 olursa işlem yap diye ama lcd de gözükmüyor vede muhtemelen işlem yapmıyor.

     
    #include <LiquidCrystal.h>

    LiquidCrystal lcd(12,11,5,4,3,2);


    #define yukari 6 /*degisken artis*/
    #define asagi 7 /*degisken azalis*/
    #define nemsicaklikbuton 10 /*kapalı ise sıcaklık açık ise nem değiştirme aç kapa buton*/

    const int led=9;
    float sicaklik;
    float analoggerilim;
    int sicaklikpin=1;
    float nemdegisken = 65.7;
    float sicaklikdegisken = 26.7; /* butona basılma sayısını tutacak değişken */
    //**sicaklik bekleme süreleri
    long beklemeSuresi = 200; // butona basılı kalma süresi ne olması gerekiyorsa milisaniye olarak yazılacak
    long sureYukari = 0; //butona basılı kalan süre bu değişkende tutulacak
    long sureAsagi = 0;
    bool asagiTetik = false; // her düğmeye basışta bir defa ısı değişimi isteği
    bool yukariTetik = false;
    //
    //**nem bekleme süreleri
    long nembeklemeSuresi = 200; // butona basılı kalma süresi ne olması gerekiyorsa milisaniye olarak yazılacak
    long nemsureYukari = 0; //butona basılı kalan süre bu değişkende tutulacak
    long nemsureAsagi = 0;
    bool nemasagiTetik = false; // her düğmeye basışta bir defa ısı değişimi isteği
    bool nemyukariTetik = false;
    //

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

    void setup() {
    pinMode(yukari, INPUT);
    pinMode(asagi, INPUT);
    pinMode(nemsicaklikbuton, INPUT);

    pinMode(led, OUTPUT);
    lcd.begin(16,2);
    lcd.clear();
    }

    void loop() {

    //SAYAC BÖLÜMÜ 1 2 3
    butonDurumu = digitalRead(nemsicaklikbuton);
    if (butonDurumu == HIGH) {
    delay(10); /* dalgalanmalar için biraz bekleyelim */
    sayac ++; /* sayaç = sayaç + 1 yani sayaç değeri bir arttırıldı */
    if(sayac>=4){
    sayac=0;
    }
    lcd.setCursor(15,0);
    lcd.print(sayac); /* sayaç değerimizi ekrana yazdırıyoruz */
    while(butonDurumu == HIGH){ /* Butona basili olduğu surece bekle */
    butonDurumu = digitalRead(nemsicaklikbuton); /* Butonun durumunu kontrol et */
    }
    delay(10); /* dalgalanmalar için biraz bekleyelim */
    }
    //SAYAC BÖLÜMÜ SONU//


    //SICAKLIK BUTON DEĞİŞTİRME AYARLARI
    if(digitalRead(yukari) == HIGH && sayac==1){
    sureYukari = millis();
    yukariTetik = true; // sıcaklık artışına izin ver.
    }else{
    if(yukariTetik){
    if((millis() - sureYukari) > beklemeSuresi){
    sicaklikdegisken = sicaklikdegisken + 0.1;
    yukariTetik = false; // sıcaklık artışı yapıldı, izni kaldır.
    LCD_sicaklikdegisken(); // sıcalıkğı lcd ye yazdır.
    sureYukari = millis();
    }
    }else{
    sureYukari = millis();
    }
    }
    if(digitalRead(asagi) == HIGH && sayac==1){
    sureAsagi = millis();
    asagiTetik = true; // sıcaklık azalmasına izin ver.
    }else{
    if(asagiTetik){
    if((millis() - sureAsagi) > beklemeSuresi){
    sicaklikdegisken = sicaklikdegisken - 0.1;
    asagiTetik = false; // sıcaklık azaltıldı, izni kaldır.
    LCD_sicaklikdegisken(); // sıcalıkğı lcd ye yazdır.
    sureAsagi = millis();
    }
    }else{
    sureAsagi = millis();
    }
    }
    //SICAKLIK BUTON DEĞİŞTİRME AYARLARI SONU



    //NEM BUTON DEĞİŞTİRME AYARLARI

    if(digitalRead(yukari) == HIGH && sayac==2){
    nemsureYukari = millis();
    nemyukariTetik = true; // sıcaklık artışına izin ver.
    }else{
    if(nemyukariTetik){
    if((millis() - nemsureYukari) > nembeklemeSuresi){
    nemdegisken = nemdegisken + 1;
    nemyukariTetik = false; // sıcaklık artışı yapıldı, izni kaldır.
    LCD_nemdegisken(); // sıcalıkğı lcd ye yazdır.
    nemsureYukari = millis();
    }
    }else{
    nemsureYukari = millis();
    }
    }
    if(digitalRead(asagi) == HIGH && sayac==2){
    nemsureAsagi = millis();
    nemasagiTetik = true; // sıcaklık azalmasına izin ver.
    }else{
    if(nemasagiTetik){
    if((millis() - nemsureAsagi) > nembeklemeSuresi){
    nemdegisken = nemdegisken - 1;
    nemasagiTetik = false; // sıcaklık azaltıldı, izni kaldır.
    LCD_nemdegisken(); // sıcalıkğı lcd ye yazdır.
    nemsureAsagi = millis();
    }
    }else{
    nemsureAsagi = millis();
    }
    }
    //NEM BUTON DEĞİŞTİRME AYARLARI SONU


    LCD_sicaklik();


    //**Eklemek istediğimiz kodlar
    if(sicaklik>sicaklikdegisken){
    digitalWrite(led,HIGH);
    }else{
    digitalWrite(led,LOW);
    }
    //Eklemek istediğimiz kodlar
    }

    void LCD_sicaklikdegisken(){
    lcd.setCursor(0,1);
    lcd.print("AYAR:");
    lcd.setCursor(5,1);
    lcd.print(sicaklikdegisken);
    lcd.print(" "); // sıcaklık değeri basamak değiştirmesi halinde kalan artık yazıyı silmek için

    }
    void LCD_nemdegisken(){
    lcd.setCursor(10,1);
    lcd.print("NEM%");
    lcd.setCursor(14,1);
    lcd.print(nemdegisken);
    lcd.print(" ");
    }
    void LCD_sicaklik(){
    analoggerilim=analogRead(sicaklikpin);
    analoggerilim=(analoggerilim/1023)*5000;
    sicaklik=analoggerilim/10.0;
    lcd.setCursor(0,0);
    lcd.print("C:");
    lcd.setCursor(2,0);
    lcd.print(sicaklik);
    }

    void asayac(){

    }






  • lcd kaç satır, kaç sütun?
  • quote:

    Orijinalden alıntı: goçhisar

    lcd kaç satır, kaç sütun?

    16x2 lcd. kod doğru mu yani bu soru üzerine :-) sayac==1 yerine hiç bi şey koymazsam veya buton==HIGH VE YA LOW İLE yaptığımda gözüküyor



    < Bu mesaj bu kişi tarafından değiştirildi prax -- 20 Temmuz 2016; 20:40:27 >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  •  
    #include <LiquidCrystal.h>

    // pin tanımlamaları
    #define yukari 6
    #define asagi 7
    #define _menu 10

    //LiquidCrystal(rs, enable, d4, d5, d6, d7)
    //LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
    LiquidCrystal lcd(12,11,5,4,3,2);

    #define led 9

    // menü seviyeleri tanımlamaları
    #define menu_adet 2
    #define menu_sicaklik 1
    #define menu_nem 2

    //buton tepki bekleme süresi
    long beklemeSuresi = 200;

    //buton süre sayaçları
    long sureYukari;
    long sureAsagi;
    long sureMenu;

    //buton tetikleme değişkenleri
    bool yukariTetik;
    bool asagiTetik;
    bool menuTetik;

    // menü konum değişkeni, hangi konumda ise onunla ilgili işlem yapacak
    int menu = menu_sicaklik; // varsayılan açık menü sıcaklık yani 1

    //sıcaklık ve nem değişkenleri
    float sicaklik = 29.1;
    float nem = 65.7;

    //sıcaklik ve nem okuma değişkenleri
    int sicaklik_okuma;
    int nem_okuma;
    int sicaklik_eski = 0;
    int nem_eski = 0;

    void setup() {
    // put your setup code here, to run once:
    pinMode(yukari, INPUT);
    pinMode(asagi, INPUT);
    pinMode(_menu, INPUT);
    pinMode(led, OUTPUT);

    //lcd başlat
    lcd.begin(16,2);
    lcd.clear();

    // lcd görünüm düzenlemesini yap
    // 1. satırı ayar değişkeni için kullanıyorum
    lcd.setCursor(0,0);
    lcd.print("C:");//yazım alanı 2,0 a kadar kaydı
    lcd.print(sicaklik, 1); // sıcaklık 4 karakter değerinde, 6,0 konumundasın
    lcd.setCursor(13,0); //ekrana :%R yazısı sığacak kadar sağa kaydırdım
    lcd.print(":%R");
    lcd.setCursor(9,0);//ekransa nem değerini 4 karakter kaplayacak şekilde konumlandırdım
    lcd.print(nem, 1);
    lcd.setCursor(6,0);// seçili değişiklik alanı için ok işareti konumu
    lcd.print("<=");
    //LCD 1. satır içeriği
    //0123456789012345
    //C:29.1<= 65.7:%R
    // 2. satırı aktif sıcaklık ve nem için kullanıyorum
    lcd.setCursor(0,1);
    lcd.print("C:");
    lcd.setCursor(13,1);
    lcd.print(":%R");
    //LCD 2. satır içeriği
    //0123456789012345
    //C: :%R
    }

    void loop() {
    // put your main code here, to run repeatedly:
    // tuş okumalarını yap
    if(digitalRead(yukari) == HIGH){
    if((millis() - sureYukari) > beklemeSuresi){
    artir();//hangi seçimde ise o seçimin değerini artıracak fonksiyon
    sureYukari = millis();//ikinci değişim için süreyi başa al
    }
    }else{
    sureYukari = millis();//yukarı tuş süresi başlangıç değeri
    }

    if(digitalRead(asagi) == HIGH){
    if((millis() - sureAsagi) > beklemeSuresi){
    azalt();//hangi seçimde ise o değeri azaltacak fonksiyon
    sureAsagi = millis();//ikinci değişim için süreyi başa al
    }
    }else{
    sureAsagi = millis();//aşağı tuş süresi başlangıç değeri
    }

    if(digitalRead(_menu) == HIGH){
    if((millis() - sureMenu)> beklemeSuresi){
    menu++;// menüyü artır
    if(menu > menu_adet){ menu = 1; }// limit menü sayısına ulaşınca başa dön
    sureMenu = millis();//ikinci değişim için süreyi başa al
    lcd_menu_oku();// menü oku yönünü değiştir
    }
    }else{
    sureMenu = millis();//menü tuşu süresi başlangıç değeri
    }

    //analog okuma ve aktif değerleri yazdırma
    // sıcaklık değeri okuma
    sicaklik_okuma = 0;
    for(int i=0; i<3; i++){
    sicaklik_okuma = sicaklik_okuma + analogRead(A0);//A0 pinine sıcaklık sensörünü koy
    delayMicroseconds(150);
    }
    sicaklik_okuma = sicaklik_okuma / 3;// okumada oluşacak sapmaları önlemek için 3 kez okut
    nem_okuma = 0;
    for(int i=0; i<3; i++){
    nem_okuma = nem_okuma + analogRead(A1);//A1 pinine nem sensörü bağlanacak
    delayMicroseconds(150);
    }
    nem_okuma = nem_okuma / 3;
    if(sicaklik_okuma != sicaklik_eski){
    sicaklik_eski = sicaklik_okuma;
    lcd_sicaklik();
    }
    if(nem_okuma != nem_eski){
    nem_eski = nem_okuma;
    lcd_nem();
    }
    }

    void artir(){
    switch(menu){
    case menu_sicaklik:
    sicaklik = sicaklik + 0.1;
    lcd_sicaklik_ayar();
    break;
    case menu_nem:
    nem = nem + 0.1;
    lcd_nem_ayar();
    break;
    }
    }

    void azalt(){
    switch(menu){
    case menu_sicaklik:
    sicaklik = sicaklik - 0.1;
    lcd_sicaklik_ayar();
    break;
    case menu_nem:
    nem = nem - 0.1;
    lcd_nem_ayar();
    break;
    }
    }

    void lcd_menu_oku(){
    lcd.setCursor(6,0);
    switch(menu){
    case menu_sicaklik:
    lcd.print("<= ");
    break;
    case menu_nem:
    lcd.print(" =>");
    break;
    }
    }

    void lcd_sicaklik_ayar(){
    lcd.setCursor(2, 0);
    lcd.print(" ");
    lcd.setCursor(2, 0);
    lcd.print(sicaklik, 1);
    }

    void lcd_nem_ayar(){
    lcd.setCursor(9,0);
    lcd.print(" ");
    lcd.setCursor(9,0);
    lcd.print(nem, 1);
    }

    void lcd_sicaklik(){
    float deger = sicaklik_eski / 1023 * 5000 / 10;
    lcd.setCursor(2, 1);
    lcd.print(" ");
    lcd.setCursor(2, 1);
    lcd.print(deger, 1);
    }

    void lcd_nem(){
    float deger = nem_eski / 1023 * 5000 / 10;
    lcd.setCursor(9,0);
    lcd.print(" ");
    lcd.setCursor(9,0);
    lcd.print(deger, 1);
    }



    < Bu mesaj bu kişi tarafından değiştirildi goçhisar -- 20 Temmuz 2016; 21:16:55 >




  • quote:

    Orijinalden alıntı: goçhisar

     
    #include <LiquidCrystal.h>

    // pin tanımlamaları
    #define yukari 6
    #define asagi 7
    #define _menu 10

    //LiquidCrystal(rs, enable, d4, d5, d6, d7)
    //LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
    LiquidCrystal lcd(12,11,5,4,3,2);

    #define led 9

    // menü seviyeleri tanımlamaları
    #define menu_adet 2
    #define menu_sicaklik 1
    #define menu_nem 2

    //buton tepki bekleme süresi
    long beklemeSuresi = 200;

    //buton süre sayaçları
    long sureYukari;
    long sureAsagi;
    long sureMenu;

    //buton tetikleme değişkenleri
    bool yukariTetik;
    bool asagiTetik;
    bool menuTetik;

    // menü konum değişkeni, hangi konumda ise onunla ilgili işlem yapacak
    int menu = menu_sicaklik; // varsayılan açık menü sıcaklık yani 1

    //sıcaklık ve nem değişkenleri
    float sicaklik = 29.1;
    float nem = 65.7;

    //sıcaklik ve nem okuma değişkenleri
    int sicaklik_okuma;
    int nem_okuma;
    int sicaklik_eski = 0;
    int nem_eski = 0;

    void setup() {
    // put your setup code here, to run once:
    pinMode(yukari, INPUT);
    pinMode(asagi, INPUT);
    pinMode(_menu, INPUT);
    pinMode(led, OUTPUT);

    //lcd başlat
    lcd.begin(16,2);
    lcd.clear();

    // lcd görünüm düzenlemesini yap
    // 1. satırı ayar değişkeni için kullanıyorum
    lcd.setCursor(0,0);
    lcd.print("C:");//yazım alanı 2,0 a kadar kaydı
    lcd.print(sicaklik, 1); // sıcaklık 4 karakter değerinde, 6,0 konumundasın
    lcd.setCursor(13,0); //ekrana :%R yazısı sığacak kadar sağa kaydırdım
    lcd.print(":%R");
    lcd.setCursor(9,0);//ekransa nem değerini 4 karakter kaplayacak şekilde konumlandırdım
    lcd.print(nem, 1);
    lcd.setCursor(6,0);// seçili değişiklik alanı için ok işareti konumu
    lcd.print("<=");
    //LCD 1. satır içeriği
    //0123456789012345
    //C:29.1<= 65.7:%R
    // 2. satırı aktif sıcaklık ve nem için kullanıyorum
    lcd.setCursor(0,1);
    lcd.print("C:");
    lcd.setCursor(13,1);
    lcd.print(":%R");
    //LCD 2. satır içeriği
    //0123456789012345
    //C: :%R
    }

    void loop() {
    // put your main code here, to run repeatedly:
    // tuş okumalarını yap
    if(digitalRead(yukari) == HIGH){
    if((millis() - sureYukari) > beklemeSuresi){
    artir();//hangi seçimde ise o seçimin değerini artıracak fonksiyon
    sureYukari = millis();//ikinci değişim için süreyi başa al
    }
    }else{
    sureYukari = millis();//yukarı tuş süresi başlangıç değeri
    }

    if(digitalRead(asagi) == HIGH){
    if((millis() - sureAsagi) > beklemeSuresi){
    azalt();//hangi seçimde ise o değeri azaltacak fonksiyon
    sureAsagi = millis();//ikinci değişim için süreyi başa al
    }
    }else{
    sureAsagi = millis();//aşağı tuş süresi başlangıç değeri
    }

    if(digitalRead(_menu) == HIGH){
    if((millis() - sureMenu)> beklemeSuresi){
    menu++;// menüyü artır
    if(menu > menu_adet){ menu = 1; }// limit menü sayısına ulaşınca başa dön
    sureMenu = millis();//ikinci değişim için süreyi başa al
    lcd_menu_oku();// menü oku yönünü değiştir
    }
    }else{
    sureMenu = millis();//menü tuşu süresi başlangıç değeri
    }

    //analog okuma ve aktif değerleri yazdırma
    // sıcaklık değeri okuma
    sicaklik_okuma = 0;
    for(int i=0; i<3; i++){
    sicaklik_okuma = sicaklik_okuma + analogRead(A0);//A0 pinine sıcaklık sensörünü koy
    delayMicroseconds(150);
    }
    sicaklik_okuma = sicaklik_okuma / 3;// okumada oluşacak sapmaları önlemek için 3 kez okut
    nem_okuma = 0;
    for(int i=0; i<3; i++){
    nem_okuma = nem_okuma + analogRead(A1);//A1 pinine nem sensörü bağlanacak
    delayMicroseconds(150);
    }
    nem_okuma = nem_okuma / 3;
    if(sicaklik_okuma != sicaklik_eski){
    sicaklik_eski = sicaklik_okuma;
    lcd_sicaklik();
    }
    if(nem_okuma != nem_eski){
    nem_eski = nem_okuma;
    lcd_nem();
    }
    }

    void artir(){
    switch(menu){
    case menu_sicaklik:
    sicaklik = sicaklik + 0.1;
    lcd_sicaklik_ayar();
    break;
    case menu_nem:
    nem = nem + 0.1;
    lcd_nem_ayar();
    break;
    }
    }

    void azalt(){
    switch(menu){
    case menu_sicaklik:
    sicaklik = sicaklik - 0.1;
    lcd_sicaklik_ayar();
    break;
    case menu_nem:
    nem = nem - 0.1;
    lcd_nem_ayar();
    break;
    }
    }

    void lcd_menu_oku(){
    lcd.setCursor(6,0);
    switch(menu){
    case menu_sicaklik:
    lcd.print("<= ");
    break;
    case menu_nem:
    lcd.print(" =>");
    break;
    }
    }

    void lcd_sicaklik_ayar(){
    lcd.setCursor(2, 0);
    lcd.print(" ");
    lcd.setCursor(2, 0);
    lcd.print(sicaklik, 1);
    }

    void lcd_nem_ayar(){
    lcd.setCursor(9,0);
    lcd.print(" ");
    lcd.setCursor(9,0);
    lcd.print(nem, 1);
    }

    void lcd_sicaklik(){
    float deger = sicaklik_eski / 1023 * 5000 / 10;
    lcd.setCursor(2, 1);
    lcd.print(" ");
    lcd.setCursor(2, 1);
    lcd.print(deger, 1);
    }

    void lcd_nem(){
    float deger = nem_eski / 1023 * 5000 / 10;
    lcd.setCursor(9,0);
    lcd.print(" ");
    lcd.setCursor(9,0);
    lcd.print(deger, 1);
    }


    teşekkürler fakat değişkenler butona bastığımda yükseliyor.

    youtuba video koydum.

    https://youtu.be/evZDUkKBa1A




  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.