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);
}
}
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
#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(led1, OUTPUT); //led1 i cikis olarak ayarladik
pinMode(led2, OUTPUT); //led2 yi cikis olarak ayarladik
pinMode(pot, INPUT); //pot u giris olarak ayarladik
pinMode(potesik, INPUT); //potesik i giris olarak ayarladik
pinMode(buzzer, OUTPUT); // Buzzer in bulunduğu pin cikis olarak tanimlandi.
digitalWrite(led1, LOW); //led1 sondurduk
digitalWrite(led2, LOW); //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(led1, HIGH);
digitalWrite(led2, LOW);
}
if (potesikdeger > potdeger) { //potesikdeger potdeger den buyukse sadece led2 i yak
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
}
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);
}
}
Kodlarınızı kod bloğu içinde yayınlayınız...
Örnek...
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
int fark = potdeger - potesikdeger;
if (fark > -1) // sadece led1'i yak
...
if(fark > 1) // sadece led2'yi yak
...
şeklinde..
Sağolasın bocek deneyip bildireceğim
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
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
(https://s28.postimg.cc/fikmckxnd/Ekran_Al_nt_s.jpg) (https://postimg.cc/image/fikmckxnd/)
(https://s30.postimg.cc/cpkaae86l/Ekran_Al_nt_s_1.jpg) (https://postimg.cc/image/cpkaae86l/)
ayrıca yeni kodlarım son hali
#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(led1, OUTPUT); //led1 i cikis olarak ayarladik
pinMode(led2, OUTPUT); //led2 yi cikis olarak ayarladik
pinMode(pot, INPUT); //pot u giris olarak ayarladik
pinMode(potesik, INPUT); //potesik i giris olarak ayarladik
pinMode(buzzer, OUTPUT); // Buzzer in bulunduğu pin cikis olarak tanimlandi.
digitalWrite(led1, LOW); //led1 sondurduk
digitalWrite(led2, LOW); //led2 sondurduk
digitalWrite(buzzer, LOW); //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(led1, HIGH);
digitalWrite(led2, LOW);
}
if (potesikdeger > potdeger) { //potesikdeger potdeger den buyukse +10 fazlasi olunca sadece led2 i yak
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
}
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);
}
}
Alıntı yapılan: karatekeli - 05 Ocak 2017, 21: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
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.
ç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
#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(led1, OUTPUT); //led1 i cikis olarak ayarladik
pinMode(led2, OUTPUT); //led2 yi cikis olarak ayarladik
pinMode(pot, INPUT); //pot u giris olarak ayarladik
pinMode(potesik, INPUT); //potesik i giris olarak ayarladik
pinMode(buzzer, OUTPUT); // Buzzer in bulunduğu pin cikis olarak tanimlandi.
digitalWrite(led1, LOW); //led1 sondurduk
digitalWrite(led2, LOW); //led2 sondurduk
digitalWrite(buzzer, LOW); //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(led1, LOW); //led1 sondurduk
digitalWrite(led2, LOW); //led2 sondurduk
digitalWrite(buzzer, LOW); //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(led1, HIGH);
digitalWrite(led2, LOW);
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(led1, LOW);
digitalWrite(led2, HIGH);
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
}
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ı.
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
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
#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(led1, OUTPUT); //led1 i cikis olarak ayarladik
pinMode(led2, OUTPUT); //led2 yi cikis olarak ayarladik
pinMode(pot, INPUT); //pot u giris olarak ayarladik
pinMode(potesik, INPUT); //potesik i giris olarak ayarladik
pinMode(buzzer, OUTPUT); // Buzzer in bulunduğu pin cikis olarak tanimlandi.
digitalWrite(led1, LOW); //led1 sondurduk
digitalWrite(led2, LOW); //led2 sondurduk
digitalWrite(buzzer, LOW); //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(potdeger, 0, 1023, 1, 2500);
potesikdeger = map(potesikdeger, 0, 1023, 1, 2500);
{
if (potesikdeger == potdeger) { // potesikdeger potdeger e esit ise ledleri ve buzzeri sustur
digitalWrite(led1, LOW); //led1 sondurduk
digitalWrite(led2, LOW); //led2 sondurduk
digitalWrite(buzzer, LOW); //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(led1, HIGH);
digitalWrite(led2, LOW);
tone(buzzer, potesikdeger); //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(led1, LOW);
digitalWrite(led2, HIGH);
tone(buzzer, potesikdeger); //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
}
şö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
// 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);
}
}
Yardımcı olabilir misiniz