Arama butonu
Bu konudaki kullanıcılar: 1 misafir
8
Cevap
1488
Tıklama
0
Öne Çıkarma
Arduino Delay sorunu
C
10 yıl
Er
Konu Sahibi

Merhabalar

Rgb ledle flasör devresi yaptım aradaki bekleme süresini potansiyometreden ayarlıyorum ama pot değerini değiştirince anlık tepki vermiyor ve bekleme süreleri bittikten sonra değeri değiştiriyor.Bekleme süresine takılmadan nasıl yapabilirim.


quote:



const int kirmizi =9;
const int yesil =10;
const int mavi =11;
int ayar;
int r,g,b;
int bekle;
void setup() {

  Serial.begin(9600);
}

void loop() {
  ayar= analogRead(A0);
  ayar=map(ayar,0,1023,0,255);
  bekle=ayar;
  Serial.println(bekle);
  
  
   
   for(int i=1;i<=3;i++){
    r=0;
    g=0;
    b=255;
    analogWrite(kirmizi,255-r);
    analogWrite(yesil,255-g);
    analogWrite(mavi,255-b);


    delay(bekle);
    r=0;
    g=0;
    b=0;
    analogWrite(kirmizi,255-r);
    analogWrite(yesil,255-g);
    analogWrite(mavi,255-b);

    delay(bekle);
  }



  for(int i=1;i<=3;i++){
    r=255;
    g=0;
    b=0;
    analogWrite(kirmizi,255-r);
    analogWrite(yesil,255-g);
    analogWrite(mavi,255-b);

    delay(bekle);
    r=0;
    g=0;
    b=0;
    analogWrite(kirmizi,255-r);
    analogWrite(yesil,255-g);
    analogWrite(mavi,255-b);

    delay(bekle);
  }

}


DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



1
10 yıl
Yüzbaşı

Hocam map komutunu illa 0-255 arası yapmak zorunda değilsin. 0-1023 okunan değeri oranlamak için o. Bununla en fazla 255ms yaparsın.O değeri kafanda belirlediğin maksimum değerle değiştir.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
C
10 yıl
Er
Konu Sahibi

Pwm çıkışa vermediğim için mi istediğim değer kadar yapabilirim.Benim bildiğim 10 bit giriş 8 bit çıkış.Birde sorduğum soruyla ilgili bir fikriniz varmı.Çok teşekkür ederim.





< Bu mesaj bu kişi tarafından değiştirildi c0zer -- 25 Mayıs 2015; 1:04:48 >
Bu mesaja 1 cevap geldi.
R
10 yıl
Onbaşı

bi' dener misin



quote:

const int kirmizi =9;
const int yesil =10;
const int mavi =11;
int ayar;
int r,g,b;
int bekle;

void Read() {
ayar= analogRead(A0);
ayar=map(ayar,0,1023,0,255);
bekle=ayar;

}

void setup() {

Serial.begin(9600);
}

void loop() {
Read();
Serial.println(bekle);



for(int i=1;i<=3;i++){
Read();
r=0;
g=0;
b=255;
analogWrite(kirmizi,255-r);
analogWrite(yesil,255-g);
analogWrite(mavi,255-b);


delay(bekle);
r=0;
g=0;
b=0;
analogWrite(kirmizi,255-r);
analogWrite(yesil,255-g);
analogWrite(mavi,255-b);

delay(bekle);
}



for(int i=1;i<=3;i++){
Read();
r=255;
g=0;
b=0;
analogWrite(kirmizi,255-r);
analogWrite(yesil,255-g);
analogWrite(mavi,255-b);

delay(bekle);
r=0;
g=0;
b=0;
analogWrite(kirmizi,255-r);
analogWrite(yesil,255-g);
analogWrite(mavi,255-b);

delay(bekle);
}

}


Bu mesaja 1 cevap geldi.
C
10 yıl
Er
Konu Sahibi

Bir şey değişmedi hala aynı çalışıyor.Teşekkür ederim.


Bu mesaja 1 cevap geldi.
R
10 yıl
Onbaşı

hocam benim elimden en fazla bu kadarı geliyor. sizin dediğiniz sistemde 2 fonksiyon aynı anda çalışması gerekiyor. arduino'da oluyor mu bilmiyorum

 
const int kirmizi =9;
const int yesil =10;
const int mavi =11;
int ayar;
int r,g,b;
int bekle;

void Read() {
ayar= analogRead(A0);
ayar=map(ayar,0,1023,0,255);
bekle=ayar;
Serial.println(bekle);
}

void setup() {

Serial.begin(9600);
}

void loop() {
for(int i=1;i<=3;i++){
Read();
r=0;
g=0;
b=255;
analogWrite(kirmizi,255-r);
analogWrite(yesil,255-g);
analogWrite(mavi,255-b);


delay(bekle);
Read();
r=0;
g=0;
b=0;
analogWrite(kirmizi,255-r);
analogWrite(yesil,255-g);
analogWrite(mavi,255-b);

delay(bekle);
}



for(int i=1;i<=3;i++){
Read();
r=255;
g=0;
b=0;
analogWrite(kirmizi,255-r);
analogWrite(yesil,255-g);
analogWrite(mavi,255-b);

delay(bekle);
Read();
r=0;
g=0;
b=0;
analogWrite(kirmizi,255-r);
analogWrite(yesil,255-g);
analogWrite(mavi,255-b);

delay(bekle);
}

}





< Bu mesaj bu kişi tarafından değiştirildi ryanmayne06_6 -- 25 Mayıs 2015; 9:15:15 >
Bu mesaja 1 cevap geldi.
C
10 yıl
Er
Konu Sahibi

İlgilendiğin için çok teşekkür ederim.


Bu mesaja 1 cevap geldi.
E
10 yıl
Çavuş

for döngülerinin içine

 ayar= analogRead(A0);  
ayar=map(ayar,0,1023,0,255);
bekle=ayar;
Serial.println(bekle);


eklemeyi dener misiniz?

döngüden çıkmadığı için değeri geç okuyor olabilir.


Bu mesaja 1 cevap geldi.
O
9 yıl
Yüzbaşı

Biraz eski bir konu ama arayanlar en azından cevaba ulaşır;

Çözüm millis fonksiyonu

https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay



* Blink without Delay

Turns on and off a light emitting diode (LED) connected to a digital
pin, without using the delay() function. This means that other code
can run at the same time without being interrupted by the LED code.

The circuit:
* LED attached from pin 13 to ground.
* Note: on most Arduinos, there is already an LED on the board
that's attached to pin 13, so no hardware is needed for this example.

created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen
modified 11 Nov 2013
by Scott Fitzgerald


This example code is in the public domain.

http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number :
const int ledPin = 13; // the number of the LED pin

// Variables will change :
int ledState = LOW; // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0; // will store last time LED was updated

// constants won't change :
const long interval = 1000; // interval at which to blink (milliseconds)

void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}

void loop() {
// here is where you'd put code that needs to be running all the time.

// check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;

// if the LED is off turn it on and vice-versa:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}

// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
}



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.