Arama butonu
Bu konudaki kullanıcılar: 1 misafir
22
Cevap
404
Tıklama
0
Öne Çıkarma
Switch case ile değişkeni joystick ile değiştirilebilir mi?
P
9 yıl
Teğmen
Konu Sahibi

Ö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);
}

}
}






G
9 yıl
Binbaşı

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ı >
Bu mesaja 1 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

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ı >

G
9 yıl
Binbaşı

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ı >
Bu mesaja 1 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

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 >

P
9 yıl
Teğmen
Konu Sahibi

pulseln nin amacı nedir mantığını daa anlatabilirmisiniz ?



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

P
9 yıl
Teğmen
Konu Sahibi

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ı >
Bu mesaja 1 cevap geldi.
G
9 yıl
Binbaşı

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.


Bu mesaja 1 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

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ı >
Bu mesaja 1 cevap geldi.
G
9 yıl
Binbaşı

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.


Bu mesaja 1 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

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 >
Bu mesaja 1 cevap geldi.
G
9 yıl
Binbaşı

#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.


Bu mesaja 1 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

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ı >
Bu mesaja 1 cevap geldi.
G
9 yıl
Binbaşı

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.


Bu mesaja 2 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

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



P
9 yıl
Teğmen
Konu Sahibi

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(){

}




Bu mesaja 1 cevap geldi.
G
9 yıl
Binbaşı

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


Bu mesaja 1 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

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ı >
Bu mesaja 1 cevap geldi.
G
9 yıl
Binbaşı

 
#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 >
Bu mesaja 1 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

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


Bu mesaja 1 cevap geldi.