Kod hakkında yardım

ercanerkec

Üye
Katılım
25 Eki 2016
Mesajlar
8
Puanları
1
Yaş
24
Sevgili forum severler merhaba,

Benim küçük bir hobi projem var. Sizlerin daha iyi anlayabilmesi adına kısa bir özetini anlatacağım.
Devremde kullanılan malzemeler; Uno, LDR, HM-10, buzzer, kontaktör vb.
Bluetooth ile cihazıma bağlanıyorum sizlere ilettiğim aşağıdaki kodda da görebildiğiniz üzere sadece ilettiğim komutlar çerçevesinde işlem yapabiliyorum.
Örneğin;
gelen_karakter=Serial.read();
if(gelen_karakter=='6'){
digitalWrite(kontak4,HIGH);
Serial.println("Kontak 4 aktif, Led4 yakıldı.");
Benim soruma gelirsek, ben devreye hareket sensörü takıp aktif olarak kullanmak istiyorum fakat hareket sensörü sadece ben komut verdiğimde aktif oluyor örneğin "s" komutu verdiğimde tabi ki kodu ona göre ayarlıyorum. Hiçbir türlü sürekli aktif olacak şekilde bir kod uyduramadım. Umarım anlaşılır olabilmişimdir. Devreye enerji verildiği an hiçbir komut almadan hareket sensörü çalışsın hareket görürse çıkışı versin, devreden elektrik gidene kadar da böyle çalışmaya devam etsin. Hareket olduğunda telefonuma geri dönüş sağlasın.
Teşekkür eder, iyi forumlar dilerim.


char gelen_karakter;
const int kontak1=2,kontak2=3,kontak3=4,kontak4=5;
int buzzer = 6;
float sicaklikgerilim;
int okunandeger;
float sicaklik;
int lm35 = A0;
int led = 7;
int zaman =50;
int ldrsensor = 8;
int ldrled = 9;
int susensor = 10;

void setup() {
pinMode(kontak1,OUTPUT);
pinMode(kontak2,OUTPUT);
pinMode(kontak3,OUTPUT);
pinMode(kontak4,OUTPUT);
pinMode(buzzer,OUTPUT);
pinMode(led,OUTPUT);
pinMode(ldrsensor,INPUT);
pinMode(ldrled,OUTPUT);
pinMode(susensor,INPUT);

Serial.begin(9600);
}

void loop() {


while(Serial.available()>0)
{
gelen_karakter=Serial.read();
if(gelen_karakter=='6'){
digitalWrite(kontak4,HIGH);
Serial.println("Kontak 4 aktif, Led4 yakıldı.");
}
else if(gelen_karakter=='7'){
digitalWrite(kontak4,LOW);
Serial.println("Kontak 4 pasif, Led4 söndürüldü.");
}
else if(gelen_karakter=='4'){
digitalWrite(kontak3,HIGH);
Serial.println("kontak 3 aktif Led3 yakıldı.");
}
else if(gelen_karakter=='5'){
digitalWrite(kontak3,LOW);
Serial.println("Kontak 3 pasif, Led3 söndürüldü.");
}
else if(gelen_karakter=='2'){
digitalWrite(kontak2,HIGH);
Serial.println("Kontak 2 aktif, Led2 yakıldı.");
}
else if(gelen_karakter=='3'){
digitalWrite(kontak2,LOW);
Serial.println("Kontak 2 pasif, Led2 söndürüldü");
}
else if(gelen_karakter=='0'){
digitalWrite(kontak1,HIGH);
Serial.println("Kontak 1 aktif, Led1 yakıldı.");
}
else if(gelen_karakter=='1'){
digitalWrite(kontak1,LOW);
Serial.println("Kontak 1 pasif, Led1 söndürüldü.");
}
else if(gelen_karakter=='8'){
okunandeger=analogRead(lm35);
sicaklikgerilim = (5000.0/1023.0) * okunandeger;
sicaklik = sicaklikgerilim / 100.0;
Serial.print("Sıcaklık:");
Serial.println(sicaklik);
delay(1000);


if(sicaklik >= 27){
digitalWrite(led,HIGH);
digitalWrite(buzzer,HIGH);
Serial.print("Sıcaklık yüksek. Uyarı ışığı ve buzzer aktif.");


}


}

else if(gelen_karakter=='o'){
digitalWrite(led,LOW);
digitalWrite(buzzer,LOW);
Serial.print("Sıcaklık alarmı kapatıldı.");
}




else if(gelen_karakter=='9')
{
bool ldrdeger = digitalRead(ldrsensor);
if(ldrdeger == 1)
{
digitalWrite(ldrled,HIGH);
Serial.print("Işık seviyesi düşük.Işık açıldı");
}
else
{
digitalWrite(ldrled,LOW);
Serial.print("Işık seviyesi yeterli.Işık kapandı");
}
}
else if(gelen_karakter=='t')
{
bool sudeger = digitalRead(susensor);
if(sudeger == 1){
Serial.print("Su yetersiz");
}
else
{

Serial.print("Su yeterli");
}
}

}

}
 
C++:
bool sudeger = digitalRead(susensor);
if(sudeger == 1){
Serial.print("Su yetersiz");

Bunu loop fonksiyonun başına while(serial.available()) dan önceye yaz.
 
Hareket sensörü hangisi ?
Şu an istediğim şekilde çalıştıramadığım için devrede veya kodda yeri yok
C++:
bool sudeger = digitalRead(susensor);
if(sudeger == 1){
Serial.print("Su yetersiz");

Bunu loop fonksiyonun başına while(serial.available()) dan önceye yaz.
Cevabınız için teşekkür ederim. Daha önce buna benzer şekilde denedim, tekrar deneyerek sonucu sizinle paylaşacağım.
 
C++:
bool sudeger = digitalRead(susensor);
if(sudeger == 1){
Serial.print("Su yetersiz");

Bunu loop fonksiyonun başına while(serial.available()) dan önceye yaz.
Sizlerin ilettiği şekilde tekrardan çok dikkat ederek tekrar yaptım ve oldu. Umarım daha önceden bir kabloda veya başka bir şeyde hatam mevcuttu. Fakat su yetersiz mesajını sonsuza kadar veriyor bunu bir defa sadece durum değişti zaman vermesi için bir kod vardı şu an bulamıyorum biliyorsanız benim ile paylaşır mısınız?
Interrupt ile kullanılabilir belki
Sorun çözüldüğü için bu işlemi denemedim, cevabınız için teşekkür ederim.
 
Konudaki tüm sorunlarımı çözdüm. Son durum bu şekilde, herkese teşekkürler



char gelen_karakter;
const int kontak1=2,kontak2=3,kontak3=4,kontak4=5;
int buzzer = 6;
float sicaklikgerilim;
int okunandeger;
float sicaklik;
int lm35 = A0;
int led = 7;
int zaman =50;
int ldrsensor = 8;
int ldrled = 9;
int susensor = 10;
int pirpin = 11;
int hareket;
int lastpir = 0;
int lastsu = 0;


void setup() {
pinMode(kontak1,OUTPUT);
pinMode(kontak2,OUTPUT);
pinMode(kontak3,OUTPUT);
pinMode(kontak4,OUTPUT);
pinMode(buzzer,OUTPUT);
pinMode(led,OUTPUT);
pinMode(ldrsensor,INPUT);
pinMode(ldrled,OUTPUT);
pinMode(susensor,INPUT);
pinMode(pirpin,INPUT);

Serial.begin(9600);
}

void loop() {

bool sudeger = digitalRead(susensor);
if(sudeger != lastsu)
{
if(sudeger == 1)
{
Serial.print("Su yetersiz\n");
}
else
{

Serial.print("Su yeterli\n");
}
}
lastsu = sudeger;


hareket = digitalRead(pirpin);
if(hareket != lastpir)
{

if(hareket == HIGH)
{
Serial.println("Hareket var\n");
}
}
lastpir = hareket;


while(Serial.available()>0)
{
gelen_karakter=Serial.read();
if(gelen_karakter=='6'){
digitalWrite(kontak4,HIGH);
Serial.println("Kontak 4 aktif, Led4 yakıldı.");
}
else if(gelen_karakter=='7'){
digitalWrite(kontak4,LOW);
Serial.println("Kontak 4 pasif, Led4 söndürüldü.");
}
else if(gelen_karakter=='4'){
digitalWrite(kontak3,HIGH);
Serial.println("kontak 3 aktif Led3 yakıldı.");
}
else if(gelen_karakter=='5'){
digitalWrite(kontak3,LOW);
Serial.println("Kontak 3 pasif, Led3 söndürüldü.");
}
else if(gelen_karakter=='2'){
digitalWrite(kontak2,HIGH);
Serial.println("Led 2 yakıldı.");
}
else if(gelen_karakter=='3'){
digitalWrite(kontak2,LOW);
Serial.println("Led 2 söndürüldü");
}
else if(gelen_karakter=='0'){
digitalWrite(kontak1,HIGH);
Serial.println("Led 1 yakıldı.");
}
else if(gelen_karakter=='1'){
digitalWrite(kontak1,LOW);
Serial.println("Led 1 söndürüldü.");
}
else if(gelen_karakter=='8'){
okunandeger=analogRead(lm35);
sicaklikgerilim = (5000.0/1023.0) * okunandeger;
sicaklik = sicaklikgerilim / 100.0;
Serial.print("Sıcaklık:");
Serial.println(sicaklik);
delay(1000);


if(sicaklik >= 27){
digitalWrite(led,HIGH);
digitalWrite(buzzer,HIGH);
Serial.print("Sıcaklık yüksek. Uyarı ışığı ve buzzer aktif.");


}


}

else if(gelen_karakter=='o'){
digitalWrite(led,LOW);
digitalWrite(buzzer,LOW);
Serial.print("Sıcaklık alarmı kapatıldı.");
}




else if(gelen_karakter=='9')
{
bool ldrdeger = digitalRead(ldrsensor);
if(ldrdeger == 1)
{
digitalWrite(ldrled,HIGH);
Serial.print("Işık seviyesi düşük.Işık açıldı");
}
else
{
digitalWrite(ldrled,LOW);
Serial.print("Işık seviyesi yeterli.Işık kapandı");
}
}


}

}
 

Forum istatistikleri

Konular
127,952
Mesajlar
913,885
Kullanıcılar
449,600
Son üye
psychedelic

Yeni konular

Geri
Üst