Arduino Pottan okunan değere göre led ışık şiddeti

Gokrtl

Gökhan Kartal (TeknoDay)
Staff member
Katılım
27 Şubat 2019
Mesajlar
12,941
Bir arkadaşa yardımcı olmaya çalışıyorum. 3 tane ledi var. Pottan okunan 0-350 değerine kadar led_1'i yavaştan tam yanmaya kadar ayarlayacak.
pot değeri 351 olduğunda led_1'i söndürüp 351-700 arası led_2 yi yakacak ve son kalan kısımla led_3'ü yakacak.
Kodu belli bir seviyeye getyirdim ama azdan çoğa doğru yakamıyorum.

Kod:
#define Pot A0
#define LED_Red 9
#define LED_Green 10
#define LED_Blue 11

int pot_okuma = 0;
void setup() {
  Serial.begin(115200);

  pinMode(A0, INPUT);
  pinMode(LED_Red, OUTPUT);
  pinMode(LED_Green, OUTPUT);
  pinMode(LED_Blue, OUTPUT);

 digitalWrite(LED_Red, LOW);
 digitalWrite(LED_Green, LOW);
 digitalWrite(LED_Blue, LOW);

}

void loop() {
pot_okuma = analogRead(Pot);
int pot =map(pot_okuma,0,350,0,255);
Serial.print("Pottan Okunan Değer");
Serial.println(pot_okuma);
digitalWrite(LED_Red, pot);
digitalWrite(LED_Green, LOW);
digitalWrite(LED_Blue, LOW);

delay(100);

}
 
Aşağıdaki kod yapısı ile çözdüm işi ama diğer lede geçtiğinde önceki led sürekli pır pır edip duruyor.
Neden öyle yaparki?

Kod:
#define Pot A0
#define LED_Red 9
#define LED_Green 10
#define LED_Blue 11
int pot;
int pot_okuma = 0;
void setup() {
  Serial.begin(115200);
}

void loop() {
pot_okuma = analogRead(Pot);
if(pot_okuma >= 0){
pot =map(pot_okuma,0,350,0,255);
Serial.print("Pottan Okunan Değer");
Serial.println(pot_okuma);
analogWrite(LED_Red, pot);
analogWrite(LED_Green, LOW);
analogWrite(LED_Blue, LOW);
}
if(pot_okuma >= 351){
pot =map(pot_okuma,351,700,0,255);
analogWrite(LED_Red, LOW);
analogWrite(LED_Green, pot);
analogWrite(LED_Blue, LOW);
}
if(pot_okuma >= 700){
pot =map(pot_okuma,700,1023,0,255);
analogWrite(LED_Red, LOW);
analogWrite(LED_Green, LOW);
analogWrite(LED_Blue, pot);
}
delay(100);

}
 
Testi ters sıradan yap ( >= 700 kontrolü en önce ). Ayrıca bir sonraki testi else if ile yap. Bu senin yaptığın şekilde >= 0 şartı her zaman doğru oluyor.
 
Testi ters sıradan yap ( >= 700 kontrolü en önce ). Ayrıca bir sonraki testi else if ile yap. Bu senin yaptığın şekilde >= 0 şartı her zaman doğru oluyor.
else if yapısını ekledim ve && ile ikili if blokları oluşturdum. Senin dediğin gibi ters yazınca pot ters çalıştı.


Kod:
#define Pot A0 // A0 anolog pinin ismini Pot yap
#define LED_Red 9 // 9 pwm pinin ismini LED_Red yap
#define LED_Green 10 // 10 pwm pinin ismini LED_Green yap
#define LED_Blue 11 // 11 pwm pinin ismini LED_Blue yap

int pot; // pot değişkeni tanımla
int pot_okuma = 0; //A0 pininden okunan değeri atamak için değişken tanımla
void setup() {
  Serial.begin(115200);
}

void loop() {
pot_okuma = analogRead(Pot); //A0 pinindeli pottan gelen değeri pot_okuma değişkenine at
if((pot_okuma >= 0) && (pot_okuma <=350)){ // Eğer pot_okuma değişkeni içindeki değer  0 dan büyük veya eşitse ve 350 den küçük veya eştse bu bloğu çalıştır.
pot =map(pot_okuma,0,350,0,255); // A0 pinden okunan 0-1023 değeri 0-255'e çevir pot değişkenine at.
Serial.print("Pottan Okunan Değer");
Serial.println(pot_okuma);
analogWrite(LED_Red, pot); // Kırmızı ledi pot değişkenindeki değere göre yak
analogWrite(LED_Green, LOW); // Yeşil ledi söndür
analogWrite(LED_Blue, LOW); // Mavi ledi söndür
}
else if((pot_okuma >= 351) && (pot_okuma <=699)){ // Öyle değilde böyle ise (pot_okumadan gelen değer 351 den büyük veya eşitse ve 699 dan küçük veya eşitse) bu bloğu çalıştır.
pot =map(pot_okuma,351,700,0,255);
analogWrite(LED_Red, LOW); // Kırmızı ledi söndür
analogWrite(LED_Green, pot); // Yeşil ledi pot değişkenindeki değere göre yak
analogWrite(LED_Blue, LOW); // Mavi ledi söndür
}
else if(pot_okuma >= 700){ // Öyle değilde böyle ise (pot_okumadan gelen değer 700 den büyük veya eşitse) bu bloğu çalıştır.
pot =map(pot_okuma,700,1023,0,255);
analogWrite(LED_Red, LOW); // Kırmızı ledi söndür
analogWrite(LED_Green, LOW); // Yeşil ledi söndür
analogWrite(LED_Blue, pot); // Mavi ledi pot değişkenindeki değere göre yak
}
delay(100); // 100ms bekle

}
 

Forum istatistikleri

Konular
8,919
Mesajlar
145,047
Üyeler
3,592
Son üye
Osman1661

Son kaynaklar

Back
Top