Merhaba ben tinkercad üzerinden potonsiyometreyi çevirince hem servo motorun döndüğü hemde ledlerin yandığı bir proje yaptım.Fakat potansiyometreyi kapattığımda ilk led hala yanık kalıyor

#include <Servo.h> 
Servo servoM;
int deger=0;
int aci=0;
void setup()
{
servoM.attach(9);  
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
pinMode(5,OUTPUT);
pinMode(4,OUTPUT);
}
void loop()
{
int deger=analogRead(A0);
int aci=map(deger,0,1023,0,180);
servoM.write(aci);
delay(50); 
  if(deger>10){
    digitalWrite(7,HIGH);
    digitalWrite(6,LOW);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);
    if(deger>400){
       digitalWrite(7,HIGH);
       digitalWrite(6,HIGH);
       digitalWrite(5,LOW);
       digitalWrite(4,LOW);
      if(deger>600){
        digitalWrite(7,HIGH);
        digitalWrite(6,HIGH);
        digitalWrite(5,HIGH);
        digitalWrite(4,LOW);
       if(deger>800){
          digitalWrite(7,HIGH);
          digitalWrite(6,HIGH);
          digitalWrite(5,HIGH);
          digitalWrite(4,HIGH);  
        
  }       
  }
  }
  }
}

yapmak istediğim projenin linki:HGFL ROBOTİK KODLAMA 2 DÖNEM 2 SINAV - YouTube
yaptığım devrenin fotoğrafı gerekli mi?

C++ bilmiyorum fakat bilenlerin daha rahat yardımcı olabilmesi için şu gönderiyi okuyup sorunuzu düzeltmenizi tavsiye ederim

2 Beğeni
if(deger>10 && değer <= 399)
{
...
}
else if(deger > 400 && değer <= 599)
{
...
}
....

gibi olmalı…

Yanık kalan 7. pindeki led ise.

Hiç bir koşulda bu pini şu an kodunda LOW a çektiğini görmüyorum.

Mesela koda bir koşu daha ekleyip, bu dört pini de LOW’a çektiğin bir koşul yazmalısın.

Potansiyometreyi kapattığında: okuduğun, A0 pininden gelen değer kaç ise onu koşul olarak vermen gerekir.

Yani pot kapalı iken

da kaç değeri okunuyorsa onu da koşul olarak verip;

mesela kapalı değer 0 ise;

if(deger==0){
    digitalWrite(7,LOW);
    digitalWrite(6,LOW);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);

Yada okuduğun değerden emin değilsen, en azından 10’dan küçükse LOW a çektriebilirsin.

if(deger<10){
    digitalWrite(7,LOW);
    digitalWrite(6,LOW);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);

Gibi seçenekleri deneyebilrsin.

Semasi daha onemli.

Potansiyometre kapandiginda bu deger kac?

Kacla kac arasinda degisiyor?

potonsiyometre kapandığında değere nasıl bakacağım ki

ADC 10-bit olduğundan 0 - 1023 arasında değişir.

1 Beğeni

if(deger<10) kodunu en başa yazınca bu sefer hiçbiri yanmadı

Süslü parantezlerine dikkat ederek yazar mısın? Yada düzelttiğin kodu at buraya bakalım.

Her if ayrı ayrı olmalı. Parantezi yanlış yerde
kapatıyorsunuz. Ayrıca aralık vermelisiniz.
10-399, 400-600, vs…

mehmehB adlı kişinin önerisi üzerine kodu:

if(deger>341){
  if(deger<682){
  Serial.println(deger_ntc);
  if(deger_ntc>=165){
  	digitalWrite(mavi_taraf,LOW);
    digitalWrite(kirmizi_taraf,LOW);	
  	digitalWrite(yesil_taraf,HIGH);
    }
	else{
	digitalWrite(kirmizi_taraf,LOW);	
  	digitalWrite(yesil_taraf,LOW);
	digitalWrite(mavi_taraf,LOW);
}
}
}

bu şekilde yapmak için bir kısmını sildim yapacağım halinde bir sıkıntı olursa yine size ve diğerlerine ulaşırım:)

Tamam öneriniz için teşekkür ederim

#include <Servo.h> 
Servo servoM;
int deger=0;
int aci=0;
void setup()
{
servoM.attach(9);  
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
pinMode(5,OUTPUT);
pinMode(4,OUTPUT);
}
void loop()
{
int deger=analogRead(A0);
int aci=map(deger,0,1023,0,180);
servoM.write(aci);
delay(50); 
  if(deger>100){
    if(deger<399){
  		digitalWrite(7,HIGH);
    	digitalWrite(6,LOW);
    	digitalWrite(5,LOW);
    	digitalWrite(4,LOW);
		}
        else{
			digitalWrite(7,LOW);	
  			digitalWrite(6,LOW);
			digitalWrite(5,LOW);
			digitalWrite(4,LOW);


}
}     
}

böyle yaptım ama hala potonsiyometreyi sıfırlayınca 1.led yanık kalıyor

Burayı

if(deger>341){
  if(deger<682){
if(deger>341 && deger<682){

olarak tek satırda yazabilirsiniz.

ilk verdiğin kod bu yukarıdaki;

Bu koda sadece;

if(deger<10){
    digitalWrite(7,LOW);
    digitalWrite(6,LOW);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);

eklermisin dedim;

Eklersek :

#include <Servo.h> 
Servo servoM;
int deger=0;
int aci=0;
void setup()
{
servoM.attach(9);  
pinMode(7,OUTPUT);
pinMode(6,OUTPUT);
pinMode(5,OUTPUT);
pinMode(4,OUTPUT);
}
void loop()
{
int deger=analogRead(A0);
int aci=map(deger,0,1023,0,180);
servoM.write(aci);
delay(50); 


if(deger<10){
    digitalWrite(7,LOW);
    digitalWrite(6,LOW);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);
  if(deger>10){
    digitalWrite(7,HIGH);
    digitalWrite(6,LOW);
    digitalWrite(5,LOW);
    digitalWrite(4,LOW);
    if(deger>400){
       digitalWrite(7,HIGH);
       digitalWrite(6,HIGH);
       digitalWrite(5,LOW);
       digitalWrite(4,LOW);
      if(deger>600){
        digitalWrite(7,HIGH);
        digitalWrite(6,HIGH);
        digitalWrite(5,HIGH);
        digitalWrite(4,LOW);
       if(deger>800){
          digitalWrite(7,HIGH);
          digitalWrite(6,HIGH);
          digitalWrite(5,HIGH);
          digitalWrite(4,HIGH);  
        
  }       
  }
  }
  }
 }
}

Olur.

kodu yapıştırdım ve hiçbir led yanmadı bu sefer

Verdiğin videodaki dört ledi kullanıyoruz değil mi?

En azından videodaki gibi dört led yaktığımızı varsayıyorum ona göre kodunu düzelteceğim de.

1 Beğeni

evet videodakinin aynısı

Pin bağlantılarını kontrol edebilir misin?

1 Beğeni

7.pin 1.lede
6.pin 2.lede
5.pin 3. lede
4.pin 4.lede bağlı