সুচিপত্র:

একটি Arduino এবং একটি DAC এর সাথে অডিও সাউন্ড ফাইল (Wav) বাজানো: 9 টি ধাপ
একটি Arduino এবং একটি DAC এর সাথে অডিও সাউন্ড ফাইল (Wav) বাজানো: 9 টি ধাপ

ভিডিও: একটি Arduino এবং একটি DAC এর সাথে অডিও সাউন্ড ফাইল (Wav) বাজানো: 9 টি ধাপ

ভিডিও: একটি Arduino এবং একটি DAC এর সাথে অডিও সাউন্ড ফাইল (Wav) বাজানো: 9 টি ধাপ
ভিডিও: Servo Motor with Potentiometer and LCD with Arduino 2024, জুলাই
Anonim
একটি Arduino এবং একটি DAC দিয়ে অডিও সাউন্ড ফাইল (Wav) বাজানো
একটি Arduino এবং একটি DAC দিয়ে অডিও সাউন্ড ফাইল (Wav) বাজানো
একটি Arduino এবং একটি DAC দিয়ে অডিও সাউন্ড ফাইল (Wav) বাজানো
একটি Arduino এবং একটি DAC দিয়ে অডিও সাউন্ড ফাইল (Wav) বাজানো
একটি Arduino এবং একটি DAC দিয়ে অডিও সাউন্ড ফাইল (Wav) বাজানো
একটি Arduino এবং একটি DAC দিয়ে অডিও সাউন্ড ফাইল (Wav) বাজানো

আপনার অডিনো এসডি কার্ড থেকে wav ফাইল অডিও চালান। এই নির্দেশযোগ্য আপনাকে দেখাবে কিভাবে আপনার SdCard- এ একটি wav ফাইল একটি সাধারণ সার্কিটের মাধ্যমে স্পিকারে প্লে করা যায়।

Wav ফাইল 8 বিট মনো হতে হবে। 44 KHz ফাইল চালাতে আমার কোন সমস্যা হয়নি।

হাই-ফিডেলিটি না থাকলেও সাউন্ড কোয়ালিটি খুবই সন্তোষজনক।

সিরিয়াল মনিটরটি ফাইল নির্বাচন করতে ব্যবহৃত হয়। ফাইলগুলি অবশ্যই অ্যাডলগ নামে একটি ফোল্ডারে থাকতে হবে।

এই নির্দেশযোগ্য একটি পূর্ববর্তী প্রকল্প থেকে অনুসরণ করে যেখানে আমি SdCard- এ wav রেকর্ডিং সংরক্ষণ করেছি:

সার্কিট একটি সস্তা 8 বিট ডিজিটাল থেকে এনালগ কনভার্টার (DAC) এবং একটি একক চিপ অডিও পরিবর্ধক ব্যবহার করে।

বাধা স্থাপনের জন্য মূল বিভাগগুলি আমান্ডা ঘাসাইয়ের চমৎকার নিবন্ধ থেকে নেওয়া হয়েছিল:

ধাপ 1: প্রয়োজনীয়তা

প্রয়োজনীয়তা
প্রয়োজনীয়তা
প্রয়োজনীয়তা
প্রয়োজনীয়তা

Arduino- আমি মেগা ব্যবহার করি, তবে ইউনোর কাজ না করার কোন কারণ নেই।

SdCard রিডার- প্রোগ্রামটি এর জন্য কনফিগার করা হয়েছে: মাইক্রোএসডি ব্রেকআউট বোর্ড নিয়ন্ত্রিত যুক্তি রূপান্তর V2

SdCard সেটআপ বিবরণের জন্য এই নির্দেশাবলী দেখুন:

DAC0832 LCN- একটি চমৎকার 8 বিট ডিজিটাল থেকে এনালগ কনভার্টার- কয়েক পাউন্ড।

LM386 N-1 Op amp- চিপস হিসাবে সস্তা

20 উপায় চিপ সকেট

8 উপায় চিপ সকেট

9 ভোল্ট পাওয়ার সাপ্লাই- একটি ব্যাটারি কাজ করবে।

LM336 2.5 V ভোল্টেজ রেফারেন্স

10uF ক্যাপাসিটর * 3 (9V এর বেশি কোন ভোল্টেজ)

10 ওহম প্রতিরোধক

50nF ক্যাপাসিটর- (অথবা কাছাকাছি কোথাও -47nF, 56nf, 68nf- করবে)

220uF ক্যাপাসিটর

64 ওহম স্পিকার

10K লিনিয়ার পটেনশিয়োমিটার

Arduino এবং সার্কিটের মধ্যে 8 টি ডাটা লাইন সংযুক্ত করতে কেবল-

ইউনোতে 8 টি সংযোগ লাইনে রয়েছে, মেগাতে তারা জোড়ায় জোড়ায় রয়েছে।

মেগাতে আমি 10 ওয়ে আইডিসি হেডারের সাথে 10 ওয়ে রিবন কেবল ব্যবহার করেছি। (2 টি তারের অতিরিক্ত)

0V, 9V এবং DAC আউট এর জন্য সকেট সংযোগকারী

কপার স্ট্রিপ বোর্ড, ঝাল, তার, কাটার ইত্যাদি

ধাপ 2: স্পেসিফিকেশন

স্পেসিফিকেশন
স্পেসিফিকেশন

সিরিয়াল সেট 115200 বড।

একটি মেগা ব্যবহার করে হবিট্রনিক্স মাইক্রোএসডি ব্রেকআউট বোর্ডের জন্য সমর্থন রয়েছে। চিপ নির্বাচন এবং অন্যান্য পোর্টগুলি মেগা এবং ইউনোর মধ্যে পরিবর্তিত হবে।

Wav ফাইলগুলিকে অবশ্যই অ্যাডলগ নামে একটি ডিরেক্টরিতে থাকতে হবে- নির্দ্বিধায় এটিকে অন্য কিছু নাম দিন এবং প্রয়োজনীয় কোডিং পুনরায় সাজান।

Wav ফাইল 8 বিট মনো হতে হবে। আমি 44KHz পর্যন্ত পরীক্ষা করেছি।

সিরিয়াল মনিটর অ্যাডলগ ফোল্ডারে wav ফাইল প্রদর্শন করে। ফাইলের নাম মনিটর আউটপুট লাইন থেকে পাঠানো হয়।

ফাইলের আকার শুধুমাত্র SdCard আকার দ্বারা সীমাবদ্ধ।

ধাপ 3: শুরু করা

শুরু হচ্ছে
শুরু হচ্ছে

এসডি কার্ড রিডার সংযুক্ত করুন। এই মেগা জন্য সংযোগ।

0, 5V

52 পিন করতে CLK

D0 থেকে 50 পিন করুন

D1 থেকে পিন 51

সিএস 53 পিন

(ইউনো পোর্ট সংযোগের জন্য সরবরাহকারীদের ওয়েবসাইট দেখুন)

আপনি পরীক্ষা করতে চান যে আপনার কার্ড এই পর্যায়ে কাজ করে- বিক্রেতার সরবরাহকৃত স্ক্রিপ্টগুলি ব্যবহার করুন।

আমাদের একটি ছোট সার্কিট তৈরি করতে হবে।

আমরা Arduino থেকে অডিও বাইটের একটি প্রবাহ পাঠাতে যাচ্ছি।

এই সংখ্যাগুলি 0 থেকে 255 এর মধ্যে। এগুলি ভোল্টেজের প্রতিনিধিত্ব করে।

নীরবতা 127-128।

255 স্পিকার শঙ্কু কঠিন এক উপায়।

0 অন্যভাবে স্পিকার শঙ্কু কঠিন।

সুতরাং অডিও সংরক্ষিত সংখ্যা হিসাবে রেকর্ড করা হয়, যা বিভিন্ন ভোল্টেজ তৈরি করে, যা চলমান স্পিকার শঙ্কু তৈরি করে।

আমরা "পোর্ট" ব্যবহার করে একই সাথে Arduino এ 8 লাইনের মধ্যে সংখ্যা পাঠাতে পারি।

যদি আমরা 8 টি লাইনকে ডিজিটাল থেকে এনালগ কনভার্টারে খাওয়াই, এটি টিনে যা বলে তা করে এবং একটি এনালগ ভোল্টেজ তৈরি করে যা ডিজিটাল সংখ্যার সমানুপাতিক।

আমাদের তখন যা করতে হবে তা হল ভোল্টেজটি একটি ছোট অপারেশনাল এম্প্লিফায়ার এবং তারপর স্পিকারে প্যাক করা।

ধাপ 4: ছোট সার্কিট

ছোট সার্কিট
ছোট সার্কিট
ছোট সার্কিট
ছোট সার্কিট
ছোট সার্কিট
ছোট সার্কিট
ছোট সার্কিট
ছোট সার্কিট

DAC0832 LCN

এটি একটি দুর্দান্ত, সস্তা 8 বিট ডিজিটাল থেকে এনালগ রূপান্তরকারী। (DAC)

এটি ডেটা হোল্ড, ডেটা স্যাম্পল লাইনের অ্যারে দিয়ে পুরোপুরি নিয়ন্ত্রণ করা যায়।

অথবা "ফ্লো থ্রু অপারেশন" এ এটি স্বয়ংক্রিয়ভাবে করতে সেটআপ করা যেতে পারে।

ম্যানুয়াল উদ্ধৃত করতে:

কেবল CS, WR1, WR2, এবং XFER কে গ্রাউন্ড করা এবং ILE উচ্চ টাই করা উভয় অভ্যন্তরীণ রেজিস্টারগুলিকে প্রযোজ্য ডিজিটাল ইনপুট (ফ্লো-থ্রু) অনুসরণ করতে এবং সরাসরি DAC এনালগ আউটপুটকে প্রভাবিত করতে দেয়।

ঠিক আছে যে চিপ সেট চারটি সংযোগ কম এবং একটি সেট 9V - সহজ।

আমরা কোন নেতিবাচক ভোল্টেজ বের করতে চাই না তাই ম্যানুয়াল বলছে আমাদের "ভোল্টেজ সুইচিং মোড" ব্যবহার করা উচিত এবং তারা ডায়াগ্রাম সরবরাহ করে।

আমাদের যা করতে হবে তা হল একটি ছোট অডিও অ্যাম্পের পরিবর্তে তাদের প্রস্তাবিত একটি।

LM386-N অডিও এম্প

Amp এর ম্যানুয়াল একটি ন্যূনতম যন্ত্রাংশের চিত্র প্রদান করে- 20 এর একটি লাভ প্রদান করে (আমাদের জন্য অনেক বেশি- কিন্তু এটি একটি ভলিউম নিয়ন্ত্রণ আছে)।

আমাদের যা করতে হবে তা হল DAC এবং amp এর মধ্যে একটি ক্যাপাসিটর যুক্ত করা যাতে আমরা কেবল এসি সিগন্যালগুলিকে বাড়িয়ে তুলি।

আমাদের প্রতিটি চিপের সাপ্লাই পিনের কাছাকাছি কয়েকটি ক্যাপাসিটর যোগ করতে হবে অন্যথায় আমরা আমাদের 9V সরবরাহ থেকে হুম পেতে পারি।

ধাপ 5: সোল্ডারিং আয়রন বের করুন

সোল্ডারিং আয়রন বের করুন
সোল্ডারিং আয়রন বের করুন
সোল্ডারিং আয়রন বের করুন
সোল্ডারিং আয়রন বের করুন
সোল্ডারিং আয়রন বের করুন
সোল্ডারিং আয়রন বের করুন

যেহেতু সার্কিটটি সহজ তাই আমি ব্লো একাউন্ট দ্বারা ধাক্কা দেওয়ার ইচ্ছা করি না।

এখানে কিছু পয়েন্টার আছে:

  • কপার স্ট্রিপ বোর্ডের একটি টুকরো কমপক্ষে 28 বাই 28 গর্ত প্রস্তুত করুন। (হ্যাঁ আমি জানি মস্তিষ্কের সার্জনরা এটিকে ছোট করতে পারে)
  • আপনি যদি স্ক্রু দিয়ে এটি মাউন্ট করার ইচ্ছা করেন তবে শুরুতে তাদের জন্য অনুমতি দিন!
  • সকেটে চিপস মাউন্ট করুন। সবকিছু চেক করা হলেই চিপস ertোকান।
  • ইনপুট তারগুলি আউটপুট থেকে দূরে রাখুন।
  • ক্যাপাসিটরের সঠিক পোলারিটি পর্যবেক্ষণ করুন।
  • LM336 ভোল্টেজ রেফারেন্সের বেস ভিউ এর জন্য ডায়াগ্রাম দেখুন। অ্যাডজাস্ট লেগ ব্যবহার করা হয় না এবং কাটা যায়।
  • DAC এর 8 পিনের সাথে সরাসরি সংযোগ নোট করুন- এটি পরীক্ষার জন্য খুবই উপকারী।
  • আমি ফিতা তারের এবং একটি 10 উপায় IDC সংযোগকারী সঙ্গে Audino সংযুক্ত।
  • ইউনোতে সংযোগগুলি একটি সরল রেখায় রয়েছে - আপনি দেখতে পাবেন যে একটি একক সরলরেখায় 8 টি ইনপুট সংযোগ আপনাকে একটি ক্রয়কৃত, প্রস্তুত 8 -উপায় সংযোগকারী দিয়ে Arduino এর সাথে সংযুক্ত করতে দেয়,

যখন এটি সম্পন্ন হয়- সোল্ডারিং পরীক্ষা করুন এবং তামার ট্র্যাকগুলির মধ্যে ফাঁকগুলি পরীক্ষা করুন।

আমি একটি 36 টিপিআই জুনিয়র হ্যাক দেখেছি ব্লেড ধ্বংসাবশেষ পরিষ্কার করার জন্য খুব দরকারী। আমি ব্লেডের লোকেটিং পিনগুলি সরিয়ে ফেলি এবং ব্লেডের ডগাটিকে ট্র্যাকের মধ্যে স্লাইড করি- স্পষ্টতই ব্লেডটি একটি ফ্রেমে নেই।

ধাপ 6: DAC পরীক্ষা করা

DAC পরীক্ষা করা হচ্ছে
DAC পরীক্ষা করা হচ্ছে

সার্কিট এবং Arduino বন্ধ সংযোগ বন্ধ করুন।

মাঝপথে আপনার সার্কিটে ভলিউম নিয়ন্ত্রণ সেট করুন।

আপনার নতুন সার্কিটে 9V ডিসি পাওয়ার চালু করুন।

সার্কিট ঠিক আছে কিনা চেক করুন- আমি আপনার সার্কিটের জন্য কোন দায় গ্রহণ করতে পারি না!

যন্ত্র বন্ধ

আপনার সার্কিটটিকে আরডুইনোতে সংযুক্ত করুন।

মেগায় 22-29 পিন ব্যবহার করুন। (PORTA) উপরের দুটি 5V পিন ভুল করবেন না!

ইউনোতে পিন 0-7 ব্যবহার করুন। এটা হল PORTD

আপনার বিদ্যুৎ সরবরাহের 0V আরডুইনোতে 0V এর সাথে সংযুক্ত করুন।

চালু কর.

এই টেস্ট প্রোগ্রাম DAC_TEST খুলুন

UNO- এর জন্য, PORTA থেকে PORTD- এর সমস্ত রেফারেন্স প্রতিস্থাপন করুন

DDRA- কে DDRD- এর সাথে প্রতিস্থাপন করুন- এই নির্দেশনা সমস্ত 8 লাইনগুলিকে একসাথে আউটপুট করার জন্য সেট করে। এটি ডেটা দিকনির্দেশনা নিবন্ধন।

আপনার সিরিয়াল মনিটর 115200 এ সেট করুন।

DAC আউট এবং OV এর মধ্যে একটি ভোল্টমিটার সংযুক্ত করুন

প্রোগ্রাম আউটপুট সেট করবে 255- সব লাইন অন - সর্বোচ্চ ভোল্টেজ।

আউটপুট 128- অর্ধেক সর্বোচ্চ ভোল্টেজ।

আউটপুট 0- শূন্য ভোল্টেজ (অথবা সম্ভবত প্রায় শূন্য)।

এটি তখন বিটওয়াইজে ধাপে ধাপে যাবে: 1, 2, 4, 8, 16, 32, 64, 128

ভোল্টেজ ক্রমাগত বৃদ্ধি করা উচিত।

যদি ভোল্টেজটি হ্রাস পায় যখন সংখ্যা বৃদ্ধি পায় তবে সম্ভবত দুটি আন্তconসংযুক্ত তারের বিপরীত।

ভোল্টেজ পরিবর্তনের সাথে সাথে আপনার স্পিকারকে চুপচাপ ক্লিক করাও শুনতে হবে

ধাপ 7: Wav হেডার পড়া

ওয়াভ হেডার পড়া
ওয়াভ হেডার পড়া

Wav ফাইল একটি নির্দিষ্ট ফ্রিকোয়েন্সি এবং ডেটা সাইজ দিয়ে সেভ করা হয়।

এই তথ্যটি একটি wav ফাইলের শুরুতে 44 বাইট হেডারে রয়েছে।

যদিও কিছু সফ্টওয়্যার হেডার প্রসারিত করে (বাইট 35 এর পরে), ডেটা সাইজের অবস্থান সনাক্ত করা আরও কঠিন করে তোলে।

হেডার পড়ার জন্য আমরা একটি বাফার তৈরি করি এবং ফাইলের শুরু কপি করি।

ফ্রিকোয়েন্সিটি ফাইলে 24 বাইট থেকে শুরু করে 4 বাইটে সংরক্ষণ করা হয়।

// wav ফাইল হেডারে নির্দিষ্ট ফ্রিকোয়েন্সি

বাইট হেডবফ [60]

tempfile.seek (0);

tempfile.read (headbuf, 60);

retval = headbuf [27];

retval = (retval << 8) | হেডবফ [26];

retval = (retval << 8) | হেডবফ [25];

retval = (retval << 8) | হেডবফ [24];

Serial.print (F ("File Frequency"));

Serial.print (retval);

ডেটা সাইজের তথ্য খোঁজার সবচেয়ে ভালো উপায় হল হেডারে "ডাটা" শব্দটি অনুসন্ধান করা।

তারপর এটি অনুসরণ করে 4 বাইট নিষ্কাশন করুন, যা দীর্ঘ মান তৈরি করে

স্বাক্ষরবিহীন দীর্ঘ প্রতিদান;

int mypos = 40;

জন্য (int i = 36; i <60; i ++) {

যদি (headbuf == 'd') {

if (headbuf [i+1] == 'a') {

if (headbuf [i+2] == 't') {

যদি (হেডবফ [i+3] == 'a') {

// শেষ পর্যন্ত আমাদের কাছে আছে

mypos = i+4;

আমি = 60;

}

}

}

}

}

tempfile.seek (mypos);

retval = headbuf [mypos+3];

retval = (retval << 8) | হেডবফ [mypos+2];

retval = (retval << 8) | হেডবফ [mypos+1];

retval = (retval << 8) | headbuf [mypos];

ঠিক আছে আমাদের ডেটার দৈর্ঘ্য এবং ফ্রিকোয়েন্সি আছে!

অডিও ডেটা 4 বাইট অনুসরণ করে যা ডেটার দৈর্ঘ্য মান তৈরি করে।

ধাপ 8: বাধা, বাধা …

বাধা, বাধা …।
বাধা, বাধা …।

আমরা প্রয়োজনীয় ফ্রিকোয়েন্সি এ বা কাছাকাছি একটি সফটওয়্যার বাধা তৈরি করতে ফ্রিকোয়েন্সি তথ্য ব্যবহার করি।

বাধা সবসময় সঠিকভাবে সেট করা যায় না, তবে এটি যথেষ্ট। ফাইল থেকে পড়া ফ্রিকোয়েন্সি নির্ধারিত সাবরুটিনে পাঠানো হয়।

void setintrupt (float freq) {float bitval = 8; // 8 8 বিট টাইমার 0 এবং 2, 1024 টাইমার 1 বাইটের জন্য

setocroa = (16000000/(freq*bitval)) - 0.5;

// setocroa মান -1 এর একটি বিয়োগ প্রয়োজন। তবে 0.5 রাউন্ডকে নিকটতম 0.5 এ যোগ করুন

// টাইমারের রেজোলিউশন সীমিত

// শেষ পর্যন্ত বিটভালের মাত্রা দ্বারা নির্ধারিত হয়

cli (); // নিষ্ক্রিয় বাধা // সেট টাইমার 2 বাধা

TCCR2A = 0; // সম্পূর্ণ TCCR2A রেজিস্টার 0 এ সেট করুন

TCCR2B = 0; // TCCR2B এর জন্য একই

TCNT2 = 0; // কাউন্টার মান 0 এ শুরু করুন

// সেট ফ্রিকোয়েন্সি (এইচজেড) বৃদ্ধির জন্য তুলনা ম্যাচ রেজিস্টার

OCR2A = সেটোক্রোয়া; // = (16*10^6) / (ফ্রিকোয়েন্সি*8) - 1 (অবশ্যই <256)

// সিটিসি মোড চালু করুন

TCCR2A | = (1 << WGM21); // 8 prescaler জন্য CS21 বিট সেট করুন

TCCR2B | = (1 << CS21); // সক্ষম টাইমার তুলনা বিরতি

// TIMSK2 | = (1 << OCIE2A); // এটি নিম্নলিখিত লাইন হিসাবে কাজ করে

sbi (TIMSK2, OCIE2A); // টাইমার 2 এ বাধা সক্ষম করুন

sei (); // বাধা সক্ষম করুন

বিচক্ষণ পাঠকগণ এসবিআই দেখতে পাবেন (TIMSK2, OCIE2A)

আমি রেজিস্টার বিট সেটিং এবং ক্লিয়ার করার জন্য কয়েকটি (ইন্টারনেট অর্জিত) ফাংশন সেটআপ করেছি:

// রেজিস্টার বিট#ifndef cbi সাফ করার জন্য সংজ্ঞায়িত করে

#cbi (sfr, bit) (_SFR_BYTE (sfr) & = ~ _BV (bit)) নির্ধারণ করুন

#যদি শেষ

// রেজিস্টার বিট সেট করার জন্য সংজ্ঞায়িত করে

#ifndef sbi

#সংজ্ঞায়িত sbi (sfr, bit) (_SFR_BYTE (sfr) | = _BV (বিট))

#যদি শেষ

এই ফাংশনগুলি বাধা সেট বা পরিষ্কার করার জন্য একটি সহজ কল প্রদান করে।

তাই বাধা চলছে, আমরা এটা কি করতে পারি?

ধাপ 9: বাধা এবং ডবল বাফারিং

বাধা এবং ডবল বাফারিং
বাধা এবং ডবল বাফারিং
বাধা এবং ডাবল বাফারিং
বাধা এবং ডাবল বাফারিং

22 Khz এ প্রতি 0.045 ms তে অডিও ডেটার একটি বাইট আউটপুট হয়

512 বাইট (বাফার সাইজ) 2.08 ms এ পড়া হয়।

সুতরাং একটি লেখার চক্রে SDCard থেকে বাফার পড়া যাবে না।

যাইহোক 512 বাইটগুলি 23.22ms এ বন্দরে লেখা আছে।

তাই আমাদের যা করতে হবে তা হল প্রতিবার বাফার খালি করার জন্য একটি নতুন ফাইল সেটআপ করা এবং নতুন ডেটা ব্লকের প্রয়োজন হওয়ার আগে ডেটা পাওয়ার জন্য আমাদের যথেষ্ট সময় আছে … ধরে নেওয়া যাক আমরা দুটি বাফার ব্যবহার করি, একটিকে অন্যটি পূরণ করার সময় খালি করে।

এটি ডাবল বাফারিং।

ফাইল পড়া বারবার বাধা দ্বারা ধীর হবে, কিন্তু এটি সম্পন্ন করা হবে।

আমি বুফা এবং বুফ নামে দুটি 512 বাইট বাফার সেটআপ করেছি।

যদি পতাকাটি সত্য হয় তবে আমরা পোর্টা থেকে পড়ি অন্যথায় আমরা পোর্টব থেকে পড়ি

যখন বাফার পজিশন (bufcount) বাফার সাইজে পৌঁছায় (BUF_SIZE 512) আমরা একটি পতাকা সেট করি যাকে রিডিট ট্রু বলে।

অকার্যকর লুপ রুটিন এই পতাকাটির সন্ধান করে এবং একটি ব্লক পড়া শুরু করে:

if (readit) {if (! aready) {

// বুফাকে পড়া SDCard ব্লক শুরু করুন

tempfile.read (বুফা, BUF_SIZE);

} অন্য {

// bufb এ পড়া SDCard ব্লক শুরু করুন

tempfile.read (bufb, BUF_SIZE);

}

readit = মিথ্যা;

}

যখন এটি রুটিন পতাকা সমাপ্ত করে readit = false।

বিঘ্নিত রুটিনের মধ্যে আমাদের অবশ্যই পরীক্ষা করতে হবে যে অকার্যকর লুপটি চেক করে শেষ হয়েছে কিনা readit == false।

এই ক্ষেত্রে আমরা সংকেত দিচ্ছি যে আরেকটি পড়ার প্রয়োজন এবং বাফারগুলি স্যুইচ করার জন্য অ্যার্যাডি পতাকা টগল করুন।

যদি SDcard এখনও পড়ছে তাহলে আমাদের একটি রিডিং (কাউন্টার--; bufcount--;) ট্র্যাক করতে হবে এবং পরে আবার চেষ্টা করার জন্য বাধা থেকে বেরিয়ে আসতে হবে। (অডিও আউটপুট সিগন্যালে ক্লিকগুলি বোঝায় যে এটি ঘটেছে।)

যখন সমস্ত ডেটা পড়া হয় তখন বাধা বাতিল করা হয়, পোর্টটি 128 এর মধ্য ভোল্টেজ ভ্যালুতে পুনরায় সেট হয় এবং অডিও ফাইল বন্ধ হয়ে যায়।

প্রথমবার dac2.ino স্ক্রিপ্ট চালানোর আগে, আপনার ভলিউম 50%সেট করুন। এটি খুব জোরে হবে, তবে এটি 100%এর চেয়ে ভাল!

যদি আপনার ভলিউম কন্ট্রোল রিভার্স সোয়াপে কাজ করে তাহলে 10K পোটেন্টিওমিটারের বিপরীত প্রান্তে লিডগুলি পরিবর্তন করুন।

কেমন লাগছে আমাকে জানাবেন।

প্রস্তাবিত: