merhaba arkadaşlar arduino’ya yeni başladım.ad5206 dijital potansiyometre entegresini butonlar vasıtası ile kontrol etmek istiyorum elektronik bilgim iyi olmasına ramen yazılım bilgim plc ile sınırlı (örnek: 1 adet buton potansın degerini yükseltirken başka bir buton potansın degerini düşürecek 6 adet potans oldugu için 12 buton kullanıcam veya 8 buton kullanıp 2 adet butonu kanallar arasında gezmek için kullanıcam ) internette 15 gün aradım,ama daha önce arduino’da bu şekilde bir uygulamaya raslıyamadım. nasıl bir yol izlemeliyim
nasıl aradınız internette 15 gün çok merak ettim http://arduino.cc/en/Tutorial/SPIDigitalPot aramak için “ad5206 arduino” yazdım https://www.google.com.tr/search?q=ad5206+arduino&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:tr:official&client=firefox-a&channel=sb&gfe\_rd=cr&ei=SWtLU4KKB8qk8weex4C4BQ gelen 1730 sonuçtan ilk seçenek işinizi görüyor…
Buton ile kontrol edilemiyor o kaynakla yuruyen ışık gibi calisiyor benim amacim herbir kanali butonlar ile kontrol etmek
yukarıda verdiğim linkteki örnekteki digitalPortWrite kullanarak ve şurada http://arduino.cc/en/tutorial/button buton örneğinden faydalanarak aşağıdakine benzer birşey deneyebilirsin. zaten hayatta hiç bir zaman aklındakine uygun kodu bulamayacaksın benzer program kodlarını birleştirerek yaparsın projeni, daha sonra neyin ne olduğunu öğrenmeyi ihmal etme… if (buttonState == HIGH) { level=level+1 } else { level=level-1 } digitalPotWrite(channel, level);
Yardimin icin tesekkurler .
şu daha doğru olacak 2 buton kullanmak lazım (yukarıdaki örnek devamlı pot leveli aşağı çeker işe yaramaz bu projede) if (buttonUPState == HIGH) { level=level+1 digitalPotWrite(channel, level); } if (buttonDOWNState == HIGH) { level=level-1 digitalPotWrite(channel, level); }
Peki klavyede oldugu gibi butonlara basili tutma suresi atasam daha iyi olurmu Kademe kademe yukseltip alcalta bilir diye dusunuyorum
önce bunu yaptın çalıştırdın gördün tutma süresi mi eksik kaldı, bayağı hızlısın.
Bunu basardiktan sonra ekliyecegim ilk şey önce bunu yapmam gerekiyo.
Arduino daki debouncing without delay örneğinden de faydalanbilirsin.
birazcık üzerinde çalıştıktan sonra baya ilerleme kaydettim en azından neyin ne oldugunu ögrendim artık yavaş yavaş kontrol etmeye başladım.
Bu işler böyledir. Mühim olan adım adım ve sabırla devam etmek
Birinci adimi halettik sira ikinci adimda
buhale getire bildim include <spi.h>
const int slaveSelectPin = 10;
const int chbuttonpin = 4;
const int chdbuttonpin = 1;
const int vlbuttonpin = 2;
const int vldbuttonpin = 3;
int level;
int channel;
int buttonState = 0;
int responseDelay = 1;
void setup() {
pinMode(chbuttonpin, INPUT_PULLUP);
pinMode(chdbuttonpin, INPUT_PULLUP);
pinMode(vlbuttonpin, INPUT_PULLUP);
pinMode(vldbuttonpin, INPUT_PULLUP);
pinMode (slaveSelectPin, OUTPUT);
SPI.begin();
}
void loop() {
buttonState = digitalRead(chbuttonpin);
if (buttonState == LOW) {
delay(100);
level=level+1;
digitalPotWrite(channel, level);
}
buttonState = digitalRead(chdbuttonpin);
if (buttonState == LOW) {
delay(100);
level=level-1;
digitalPotWrite(channel, level);
}
buttonState = digitalRead(vlbuttonpin);
if (buttonState == LOW) {
delay(100);
channel=channel+1;
}
buttonState = digitalRead(vldbuttonpin);
if (buttonState == LOW) {
delay(1000);
channel=channel-1;
}
delay(responseDelay);
}
void digitalPotWrite(int address, int value) {
digitalWrite(slaveSelectPin, LOW);
SPI.transfer(address);
SPI.transfer(value);
digitalWrite(slaveSelectPin, HIGH);
}
ancak kanallar degiştigi zaman potans degerini degiştirmeye kalktıgında bir önceki potansın kaldıgı degerden başlıyor
</spi.h>
int channel; den başka int channel1; int channel2; int channel3; gibi değişkenler tanımla kodun içindeki cahannel=channel-1 gibi işlemleri tanımladığını channel1 channel2 içinde ama baştan hangi channeli seçiyorsan onun kodunun içinde yapacaksın
seçili olan channel kısmını tam olarak anlayamadım.
uykularımı kaçırdı buşekilde çözebildim if(channel==1){level=level+1; digitalPotWrite(channel, level); } if(channel==2){level1=level1+1; digitalPotWrite(channel, level1); } if(channel==3){level2=level2+1; digitalPotWrite(channel, level2); }