ARDUİNO İLE FARKLI ADC KULLANIMI

Başlatan karatekeli, 04 Ocak 2017, 05:34:06

karatekeli

04 Ocak 2017, 05:34:06 Son düzenlenme: 04 Ocak 2017, 14:55:44 karatekeli
Arkadaşlar ARDUİNO ile adcden okuduğum veriyi buzzerden çalmak yani gelen verinin büyüklüğüne göre sesin azalması yada artması birde bu sese eşik değeri atamam gerek bunuda bir pot ile ayarlamam lazım yani potla ayarladığım değer kadar tıkırdayacak adcden gelen veri pot verisinden büyük ise adcnin verisi kadar ötecek birde adcden okunan veri 0/-1024 arası olduğunda bir led 0/1024 arası olduğunda başka bir led yakmam gerek yazdığım kodu aşağıda paylaşıyorum ŞİMDİDEN YARDIMLARINIZ İÇİN ÇOK TEŞEKKÜRLER...

int led1 = 2; //2.digital pini led1 değişkenine atadık
int led2 = 3; //3.digital pini led2 değişkenine atadık
int buzzer = 9; //9. digital pini buzzer değişkenine atadık
int pot = A0; //A0 analog pini pot değişkenine atadık
int potdeger; //Kodlarımız içerisinde kullanacağımız potdeger değişkenini oluşturduk
int potesik = A1; //A1 analog pini potesik değişkenine atadık
int potesikdeger; //Kodlarımız içerisinde kullanacağımız potdegeresik değişkenini oluşturduk






void setup() {
  pinMode(led1, OUTPUT); //led1 i çıkış olarak ayarladık
  pinMode(led2, OUTPUT); //led2 yi çıkış olarak ayarladık
  pinMode(pot, INPUT);   //pot u giriş olarak ayarladık
  pinMode(buzzer,OUTPUT); // Buzzer ın bulunduğu pin çıkış olarak tanımlandı.
  Serial.begin(9600); // seripotun hızı 9600 baud yapılır

}

void loop() {
  potesikdeger = analogRead(potesik);//potesik değişkenine atadağımız A1 pinini dinliyoruz ve değerini potesikdeger değişkenine atıyoruz
  potdeger= analogRead(pot); //pot değişkenine atadağımız A0 pinini dinliyoruz ve değerini potdeger değişkenine atıyoruz
{
  if (potdeger>-1){ //potdeger -1 den büyükse sadece led1 i yak
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);

}
{
  if (potdeger>1){ //potdeger 1 den büyükse sadece led2 i yak
    digitalWrite(led1, LOW); 
    digitalWrite(led2, HIGH);
}
{
 
  if (potdeger >= potesikdeger) {
    tone(buzzer,(analogRead(potesikdeger))); //Potansiyometre ile okuduğumuz değere göre farklı tonlarda buzzer ötecek.
    tone(buzzer,(analogRead(potdeger))); //A0 ile okuduğumuz değere göre farklı tonlarda buzzer ötecek.
    Serial.println(potdeger);
  }
}

karatekeli

05 Ocak 2017, 05:20:21 #1 Son düzenlenme: 05 Ocak 2017, 18:33:52 karatekeli
kodlar tamam denedim çalışıyor sadece adc'den okunan veri - değere dönünce yakmam gereken ledi yakamadım yardımcı olursanız sevinirim

Kod Seç
#include <SoftwareSerial.h>



int led1 2//2.digital pini led1 değişkenine atadık
int led2 3//3.digital pini led2 değişkenine atadık
int buzzer 9//9. digital pini buzzer değişkenine atadık
int pot A0//A0 analog pini pot değişkenine atadık
int potdeger//Kodlarımız içerisinde kullanacağımız potdeger değişkenini oluşturduk
int potesik A1//A1 analog pini potesik değişkenine atadık
int potesikdeger//Kodlarımız içerisinde kullanacağımız potdegeresik değişkenini oluşturduk
int butondurumu=0;
int Start=0;




void setup() {
  
pinMode(led1OUTPUT); //led1 i cikis olarak ayarladik
  
pinMode(led2OUTPUT); //led2 yi cikis olarak ayarladik
  
pinMode(potINPUT);   //pot u giris olarak ayarladik
  
pinMode(potesikINPUT);   //potesik i giris olarak ayarladik
  
pinMode(buzzerOUTPUT); // Buzzer in bulunduğu pin cikis olarak tanimlandi.
  
digitalWrite(led1LOW); //led1 sondurduk
  
digitalWrite(led2LOW); //led2 sondurduk
  
Serial.begin(9600); // seripotun hizi 9600 baud yapilir

}

void loop() {
potesikdeger analogRead(potesik);//potesik degiskenine atadigimiz A1 pinini dinliyoruz ve degerini potesikdeger degiskenine atiyoruz
potdeger analogRead(pot); //pot degiskenine atadigimiz A0 pinini dinliyoruz ve degerini potesikdeger degiskenine atiyoruz
Start digitalRead(A2); //A2 girisine bagli butonu dinliyoruz ve degerini starta atiyoruz
tone(buzzer, (analogRead(potdeger))); //Potansiyometre ile okudugumuz degere göre farkli tonlarda buzzer otecek.
{
if (
potesikdeger > -1) { //potesikdeger -1 den buyukse sadece led1 i yak /burasını planladığım gibi olmadı yani - değere düşünce led yanmadı
      
digitalWrite(led1HIGH);
      
digitalWrite(led2LOW);

    
  }
if (
potesikdeger potdeger) { //potesikdeger potdeger den buyukse sadece led2 i yak
    
digitalWrite(led1LOW);
    
digitalWrite(led2HIGH);

  }
if (
potesikdeger >= potdeger) {
    
    
tone(buzzer, (analogRead(potesikdeger))); //A1 ile okudugumuz degere gore farkli tonlarda buzzer otecek.
    
if (Start == LOW) { butondurumu=1; }
if (
Start == HIGH) {butondurumu=0;  }
    
Serial.println(potesikdeger);
    
Serial.print(",");
    
Serial.println(butondurumu);
    }
    
delay(100);
  }
 } 

mehmet

Kodlarınızı kod bloğu içinde yayınlayınız...
Kod Seç
Örnek...
nothing

bocek

analogRead() fonksiyonu 0 ile 1023 arası değer döndürür. (-) olmaz.
karşılaştırma yaparken analog değerleri değerleri değil de aradaki farkı kontrol etmelisin.
mesela
Kod Seç

int fark 
potdeger potesikdeger;
if (
fark > -1// sadece led1'i yak 
...
if(
fark 1// sadece led2'yi yak
...

şeklinde..
1 ya da 0. işte 'bit'ün mesele..

karatekeli

05 Ocak 2017, 18:31:01 #4 Son düzenlenme: 05 Ocak 2017, 18:37:55 karatekeli
Sağolasın bocek deneyip bildireceğim

karatekeli

sayın bocek ok oldu tek sorun ses devamlı ötüyor adcden giren gerilime veriye göre azalıp çoğalmıyor onu nasıl ayarlarız

karatekeli

iki potunda değerleri eşit iken hiç bir ledin yanmaması ve buzzerin ötmemesi gerek potdeger arttıkça tıkırdaması gerek pot değer eşik değerim oluyor potesikdeger potdeger den büyük olunca yeşilin yanması lazım o tamam çalışıyor ama kırmızı led potlar eşitken neden yanıyor buzzer neden ötüyor





ayrıca yeni kodlarım son hali
Kod Seç
#include <SoftwareSerial.h>



int led1 2//2.digital pini led1 değişkenine atadık
int led2 3//3.digital pini led2 değişkenine atadık
int buzzer 9//9. digital pini buzzer değişkenine atadık
int pot A0//A0 analog pini pot değişkenine atadık
int potdeger//Kodlarımız içerisinde kullanacağımız potdeger değişkenini oluşturduk
int potesik A1//A1 analog pini potesik değişkenine atadık
int potesikdeger//Kodlarımız içerisinde kullanacağımız potdegeresik değişkenini oluşturduk
int butondurumu=0;
int Start=0;




void setup() {
  
pinMode(led1OUTPUT); //led1 i cikis olarak ayarladik
  
pinMode(led2OUTPUT); //led2 yi cikis olarak ayarladik
  
pinMode(potINPUT);   //pot u giris olarak ayarladik
  
pinMode(potesikINPUT);   //potesik i giris olarak ayarladik
  
pinMode(buzzerOUTPUT); // Buzzer in bulunduğu pin cikis olarak tanimlandi.
  
digitalWrite(led1LOW); //led1 sondurduk
  
digitalWrite(led2LOW); //led2 sondurduk
  
digitalWrite(buzzerLOW); //buzzer i sondurduk
  
Serial.begin(9600); // seripotun hizi 9600 baud yapilir

}

void loop() {
potesikdeger analogRead(potesik);//potesik degiskenine atadigimiz A1 pinini dinliyoruz ve degerini potesikdeger degiskenine atiyoruz
potdeger analogRead(pot); //pot degiskenine atadigimiz A0 pinini dinliyoruz ve degerini potesikdeger degiskenine atiyoruz
Start digitalRead(A2); //A2 girisine bagli butonu dinliyoruz ve degerini starta atiyoruz
tone(buzzer, (analogRead(potdeger))); //Potansiyometre ile okudugumuz degere göre farkli tonlarda buzzer otecek.
{
if (
potesikdeger > -9) { //potdeger -10 den buyukse sadece led1 i yak
      
digitalWrite(led1HIGH);
      
digitalWrite(led2LOW);

    
  }
if (
potesikdeger potdeger) { //potesikdeger potdeger den buyukse +10 fazlasi olunca sadece led2 i yak
    
digitalWrite(led1LOW);
    
digitalWrite(led2HIGH);

  }
if (
potesikdeger >= potdeger) {
    
    
tone(buzzer, (analogRead(potesikdeger))); //A1 ile okudugumuz degere gore farkli tonlarda buzzer otecek.
    
if (Start == LOW) { butondurumu=1; }
if (
Start == HIGH) {butondurumu=0;  }
    
Serial.println(potesikdeger);
    
Serial.print(",");
    
Serial.println(butondurumu);
    }
    
delay(100);
  }
 }
 

bocek

Alıntı yapılan: karatekeli - 06 Ocak 2017, 00:31:23
ama kırmızı led potlar eşitken neden yanıyor buzzer neden ötüyor


if (potesikdeger >= potdeger) {
buradaki >= 'ten dolayı olabilir mi?


bir de
Kod Seç

 tone
(buzzer, (analogRead(potesikdeger))); //A1 ile okudugumuz degere gore farkli tonlarda buzzer otecek.

değil de

 tone
(buzzer, (analogRead(potesik))); //A1 ile okudugumuz degere gore farkli tonlarda buzzer otecek.

ya da 
 tone
(buzzer, (potesikdeger)); //A1 ile okudugumuz degere gore farkli tonlarda buzzer otecek.


olmalı gibi.
1 ya da 0. işte 'bit'ün mesele..

karatekeli

çok sağol bocek usta yardımların için ben kendimce çözdüm herşey tamam çalışıyor ama ses bir türlü benim istediğim gibi çıkmıyor ben adc den gelen değere göre sesin azalması yada artmasını istiyorum yani adc den okunan veri azalınca sesde azalacak veri artınca sesde artacak yeni kodlarımı aşağıda veriyorum şimdiden çok ama çok teşekkürler

Kod Seç
#include <SoftwareSerial.h>



int led1 2//2.digital pini led1 değişkenine atadık
int led2 3//3.digital pini led2 değişkenine atadık
int buzzer 9//9. digital pini buzzer değişkenine atadık
int pot A0//A0 analog pini pot değişkenine atadık
int potdeger//Kodlarımız içerisinde kullanacağımız potdeger değişkenini oluşturduk
int potesik A1//A1 analog pini potesik değişkenine atadık
int potesikdeger//Kodlarımız içerisinde kullanacağımız potdegeresik değişkenini oluşturduk
int butondurumu=0;
int Start=0;




void setup() {
  
pinMode(led1OUTPUT); //led1 i cikis olarak ayarladik
  
pinMode(led2OUTPUT); //led2 yi cikis olarak ayarladik
  
pinMode(potINPUT);   //pot u giris olarak ayarladik
  
pinMode(potesikINPUT);   //potesik i giris olarak ayarladik
  
pinMode(buzzerOUTPUT); // Buzzer in bulunduğu pin cikis olarak tanimlandi.
  
digitalWrite(led1LOW); //led1 sondurduk
  
digitalWrite(led2LOW); //led2 sondurduk
  
digitalWrite(buzzerLOW); //buzzer i sondurduk
  
Serial.begin(9600); // seripotun hizi 9600 baud yapilir

}

void loop() {
potesikdeger analogRead(potesik);//potesik degiskenine atadigimiz A1 pinini dinliyoruz ve degerini potesikdeger degiskenine atiyoruz
potdeger analogRead(pot); //pot degiskenine atadigimiz A0 pinini dinliyoruz ve degerini potesikdeger degiskenine atiyoruz
Start digitalRead(A2); //A2 girisine bagli butonu dinliyoruz ve degerini starta atiyoruz

{
if (
potesikdeger == potdeger) { // potesikdeger potdeger e esit ise ledleri ve buzzeri sustur
     
digitalWrite(led1LOW); //led1 sondurduk
     
digitalWrite(led2LOW); //led2 sondurduk 
     
digitalWrite(buzzerLOW); //buzzer i sondurduk


}
if (
potesikdeger != potdeger && potesikdeger > -9) { // potesikdeger potdeger e esit degilse ve potesikdeger -9 dan buyukse led1 i yak led2 yi sondur potesikder i buzzer e gonder
      
digitalWrite(led1HIGH);
      
digitalWrite(led2LOW);
      
tone(buzzer, (analogRead(potesikdeger))); //A1 ile okudugumuz degere gore farkli tonlarda buzzer otecek.

    
}  
if (
potesikdeger != potdeger && potesikdeger potdeger) { // potesikdeger potdeger e esit degilse ve potesikdeger potdeger den buyukse led1 i sondur led2 yi yak potesikder i buzzer e gonder
    
digitalWrite(led1LOW);
    
digitalWrite(led2HIGH);
    
tone(buzzer, (analogRead(potesikdeger))); //A1 ile okudugumuz degere gore farkli tonlarda buzzer otecek.

  
}    
if (
Start == LOW) { butondurumu=1; } //buton a basilmadiysa 1 gonder
if (Start == HIGH) {butondurumu=0; } //buton a basildiysa 0 gonder
    
Serial.println(potesikdeger); //potesikdeger i gonder
    
Serial.print(","); //araya virgul koy
    
Serial.println(butondurumu); //butondurumu nu gonder
    
}
    
delay(100); //degerler i her 100ms yede bir oku ve gonder
   
}
  

bocek

analogRead(potesikdeger)
burada analogRead fonksiyonuna parametre olarak yine adc'den okuduğun değeri giriyorsun. Halbuki adc kanal no girmen lazım.
analogRead(potesik) olmalı.
1 ya da 0. işte 'bit'ün mesele..

karatekeli

Onuda denedim ses gene istenilen şekilde çıkmıyor herhâlde bu tone yi değiştirmek gerek ne yazmak lazım bir türlü bulamadım

karatekeli

adcden giren verinin haritasını çıkarmak gerekmiş şimdi oldu ama bir sorun daha çıktı sistem çalışınca misal veri artar ses çoğalır yeşil led yanarken adc potdeger ile potesikdeger tekrar eşit olunca led sönüyor ama ses ötmeye devam ediyor acaba nedendir yeni kodlarım

Kod Seç
#include <SoftwareSerial.h>



int led1 2//2.digital pini led1 değişkenine atadık
int led2 3//3.digital pini led2 değişkenine atadık
int buzzer 9//9. digital pini buzzer değişkenine atadık
int pot A0//A0 analog pini pot değişkenine atadık
int potdeger//Kodlarımız içerisinde kullanacağımız potdeger değişkenini oluşturduk
int potesik A1//A1 analog pini potesik değişkenine atadık
int potesikdeger//Kodlarımız içerisinde kullanacağımız potdegeresik değişkenini oluşturduk
int butondurumu=0;
int Start=0;




void setup() {
  
pinMode(led1OUTPUT); //led1 i cikis olarak ayarladik
  
pinMode(led2OUTPUT); //led2 yi cikis olarak ayarladik
  
pinMode(potINPUT);   //pot u giris olarak ayarladik
  
pinMode(potesikINPUT);   //potesik i giris olarak ayarladik
  
pinMode(buzzerOUTPUT); // Buzzer in bulunduğu pin cikis olarak tanimlandi.
  
digitalWrite(led1LOW); //led1 sondurduk
  
digitalWrite(led2LOW); //led2 sondurduk
  
digitalWrite(buzzerLOW); //buzzer i sondurduk
  
Serial.begin(9600); // seripotun hizi 9600 baud yapilir

}

void loop() {
potesikdeger analogRead(potesik);//potesik degiskenine atadigimiz A1 pinini dinliyoruz ve degerini potesikdeger degiskenine atiyoruz
potdeger analogRead(pot); //pot degiskenine atadigimiz A0 pinini dinliyoruz ve degerini potesikdeger degiskenine atiyoruz
Start digitalRead(A2); //A2 girisine bagli butonu dinliyoruz ve degerini starta atiyoruz
potdeger map(potdeger0102312500);
potesikdeger map(potesikdeger0102312500);


{
if (
potesikdeger == potdeger) { // potesikdeger potdeger e esit ise ledleri ve buzzeri sustur
     
digitalWrite(led1LOW); //led1 sondurduk
     
digitalWrite(led2LOW); //led2 sondurduk 
     
digitalWrite(buzzerLOW); //buzzer i sondurduk


}
if (
potesikdeger != potdeger && potesikdeger > -9) { // potesikdeger potdeger e esit degilse ve potesikdeger -9 dan buyukse led1 i yak led2 yi sondur potesikder i buzzer e gonder
      
digitalWrite(led1HIGH);
      
digitalWrite(led2LOW);
      
tone(buzzerpotesikdeger); //A1 ile okudugumuz degere gore farkli tonlarda buzzer otecek.
      
delay (10);
    
}  
if (
potesikdeger != potdeger && potesikdeger potdeger) { // potesikdeger potdeger e esit degilse ve potesikdeger potdeger den buyukse led1 i sondur led2 yi yak potesikder i buzzer e gonder
    
digitalWrite(led1LOW);
    
digitalWrite(led2HIGH);
    
tone(buzzerpotesikdeger); //A1 ile okudugumuz degere gore farkli tonlarda buzzer otecek.
    
delay (10);
  
}    
if (
Start == LOW) { butondurumu=1; } //buton a basilmadiysa 1 gonder
if (Start == HIGH) {butondurumu=0; } //buton a basildiysa 0 gonder
    
Serial.println(potesikdeger); //potesikdeger i gonder
    
Serial.print(","); //araya virgul koy
    
Serial.println(butondurumu); //butondurumu nu gonder
    
}
    
delay(100); //degerler i her 100ms yede bir oku ve gonder
   
}
  

karatekeli

şöyle bir şey buldum ama istediğim gibi çıkıyor ses videosunda ama ben çalıştıramadım yardımcı olursanız sevinirim adc3 e 10k pot bağladım denedim olmadı ayrıca butona her basılışta çıkış sesini 1 arttırması lazım arttırmadı neyi yanlış yapıyorum

Kod Seç
 // Arduino based metal detector
// (C)Dzl july 2013
// http://dzlsevilgeniuslair.blogspot.dk/

// Connect search coil oscillator (20-200kHz) to pin 5
// Connect piezo between pin 13 and GND
// Connect NULL button between pin 12 anf GND

// REMEMBER TO PRESS NULL BUTTON AFTER POWER UP!!


#define SET(x,y) (x |=(1<<y))            //-Bit set/clear macros
#define CLR(x,y) (x &= (~(1<<y)))         // |
#define CHK(x,y) (x & (1<<y))             // |
#define TOG(x,y) (x^=(1<<y))              //-+

unsigned long t0=0;         //-Last time
int t=0;                    //-time between ints
unsigned char tflag=0;      //-Measurement ready flag

//-Generate interrupt every 1000 oscillations of the search coil
SIGNAL(TIMER1_COMPA_vect)
{
  
OCR1A+=1000;
  
t=micros()-t0;
  
t0+=t;
  
tflag=1;
}
int analogpin 3;
int val=0;
void setup()
{
  
Serial.begin(9600);
  
pinMode(13,OUTPUT);    //-piezo pin
  
digitalWrite(12,HIGH); //-NULL SW. pull up
  //-Set up counter1 to count at pin 5
  
TCCR1A=0;
  
TCCR1B=0x07;
  
SET(TIMSK1,OCF1A);
}
//-Float ABS
float absf(float f)
{
  if(
f<0.0)
    return -
f;
  else
    return 
f;
}

int   v0=0;  //-NULL value
float f=0;   //-Measurement value
unsigned int FTW=0;    //-Click generator rate
unsigned int PCW=0;    //-Click generator phase
unsigned long timer=0//-Click timer
void loop()
{
  if(
tflag)
  {
    if(
digitalRead(12)==LOW)  //-Check NULL SW.
      
v0=t;                   //-Sample new null value
    
f=f*0.9+absf(t-v0)*0.1;   //-Running average over 10 samples
    
tflag=0;                  //-Reset flag
int sensorValue analogRead(A3);
float voltage sensorValue * (5.0/1023.0);
Serial.println(voltage);
    
float clf=f*voltage;  //-Convert measurement to click frequency
    
if(clf>voltage)            
      
clf=voltage;
    
FTW=clf;
    
val analogRead(3);
    
Serial.println(voltage);
  }
  
  
//-Click generator
  
if(millis()>timer)
  {
    
timer+=10;
    
PCW+=FTW;
    if(
PCW&0x8000)
    {
      
digitalWrite(13,HIGH);
      
PCW&=0x7fff
    }
    else
      
digitalWrite(13,LOW);
  }
}


karatekeli