Სარჩევი:

Arduino ტონის გენერატორი ბიბლიოთეკის ან სერიული ფუნქციების გარეშე (შეფერხებებით): 10 ნაბიჯი
Arduino ტონის გენერატორი ბიბლიოთეკის ან სერიული ფუნქციების გარეშე (შეფერხებებით): 10 ნაბიჯი

ვიდეო: Arduino ტონის გენერატორი ბიბლიოთეკის ან სერიული ფუნქციების გარეშე (შეფერხებებით): 10 ნაბიჯი

ვიდეო: Arduino ტონის გენერატორი ბიბლიოთეკის ან სერიული ფუნქციების გარეშე (შეფერხებებით): 10 ნაბიჯი
ვიდეო: 10 საუკეთესო AI მარკეტინგის აპლიკაცია 2024, დეკემბერი
Anonim
Arduino ტონის გენერატორი ბიბლიოთეკის ან სერიული ფუნქციების გარეშე (შეფერხებებით)
Arduino ტონის გენერატორი ბიბლიოთეკის ან სერიული ფუნქციების გარეშე (შეფერხებებით)

ეს არ არის ის, რასაც ჩვეულებრივ ვაკეთებ ინსტრუქტაჟად, მე მირჩევნია ჩემი ლითონის სამუშაოები, მაგრამ რადგან მე ვარ ელექტროტექნიკის სტუდენტი და უნდა გავიარო კლასი მიკროკონტროლერებზე (ჩამონტაჟებული სისტემების დიზაინი), ვიფიქრე, რომ ინსტრუქტაჟს გავაკეთებდი ჩემი ერთ -ერთი პროექტი. როდესაც მე თავდაპირველად გავაკეთე პროექტი და სხვები ამ კლასისთვის, აღმოვაჩინე, რომ ძალიან ცოტაა გაკვეთილები, რომლებიც არ იყენებენ არდუინოს ბიბლიოთეკის ფუნქციებს ან სერიულ ფუნქციებს, რაც კიდევ ერთი მიზეზია იმისა, რომ მე ვფიქრობდი, რომ ეს იქნებოდა კარგი სასწავლო.

ეს კოდი განკუთვნილია Atmega 2560 მიკროკონტროლისთვის, ასე რომ, თუ მისი სხვა დაფაზე დანერგვა მოგიწევთ, თქვენ უნდა შეცვალოთ მისამართების რეგისტრები კოდში თქვენი კონტროლერების მომხმარებლის სახელმძღვანელოზე დაყრდნობით. კოდის ძირითადი იდეა იმაში მდგომარეობს, რომ როდესაც კლავიატურაზე კლავიშს შეიყვანთ სერიულ მონიტორში, arduino მეგა გამოუშვებს გარკვეულ სიხშირეს იმისდა მიხედვით, თუ რომელ ღილაკს დააჭერთ, "q" - ის გადატვირთვით. მე გავაკეთე ისე, რომ "a" გამოუშვებს A სიხშირეს და "A" გამოუშვებს A მკვეთრ სიხშირეს, "b" გამოსცემს B ბინას, "c" C ბინას, "C" C მკვეთრს და ა.შ. სრული კოდი აიტვირთება ბოლოს, მაგრამ ყოველი ნაბიჯი კოდს დაყოფს ნაწილებად, ასე რომ უფრო ადვილია ახსნა.

ნაბიჯი 1: რეგისტრაციის მისამართების განსაზღვრა

რეგისტრაციის მისამართების განსაზღვრა
რეგისტრაციის მისამართების განსაზღვრა

ეს ნაბიჯი ადვილია, თუ თქვენ იყენებთ atmega 2560 -ს, თქვენ უბრალოდ უნდა გამოიყენოთ ის მისამართები, რომლებიც მე გამოვიყენე, თუმცა თუ თქვენ იყენებთ დაფას სხვადასხვა ჩიპით, თქვენ უნდა იპოვოთ მისამართები თითოეული ამ რეგისტრისთვის თქვენს ჩიპსის მომხმარებლის სახელმძღვანელო. ზედა განმარტებები მხოლოდ მუდმივებია, რომლებიც შემდგომში გამოყენებული იქნება ჩვენი ფუნქციებისათვის. ჩვენ მივუთითებთ მისამართებს, როგორც არასტაბილურ ხელმოუწერელს, რადგან ჩვენ არ გვინდა, რომ შემდგენელმა შეაფერხოს ისინი.

ნაბიჯი 2: მასივები და გლობალური ცვლადები

მასივები და გლობალური ცვლადები
მასივები და გლობალური ცვლადები
მასივები და გლობალური ცვლადები
მასივები და გლობალური ცვლადები
მასივები და გლობალური ცვლადები
მასივები და გლობალური ცვლადები

აქ ჩვენ გვინდა განვსაზღვროთ სიხშირის მასივი, რომელიც შეიცავს ყველა იმ სიხშირეს, რაც თითოეულმა გასაღებმა უნდა გამოუშვას. ეს მნიშვნელობები გამოითვლება შენიშვნების რეალური სიხშირეებიდან და გულწრფელად რომ ვთქვა, დამავიწყდა როგორ მივიღე ისინი, მაგრამ ისინი სწორი მნიშვნელობებია, რადგან მე მათ ვამოწმებდი ოსცილოსკოპზე დავრწმუნდი. ჩვენ ასევე განვსაზღვრავთ ჩანაწერების მასივს, რომელიც შეიცავს ყველა ღილაკს, რომელიც უნდა დააჭიროთ თითოეულ ტონს, ასევე ცვლადებს, რომლებიც დაგვჭირდება ჩვენი შემდგომი ფუნქციებისთვის.

ნაბიჯი 3: ფუნქცია "serial.begin"

ის
ის

ჩვენ მოვუწოდებთ ჩვენს ჩვეულ ფუნქციას, რომელიც იმეორებს "serial.begin" ფუნქციას U0init (). იგი იღებს სასურველ ბაუდრატს შეყვანის სახით და იწყებს სერიულ პორტს ამ ბაუდრატზე.

ნაბიჯი 4: ფუნქცია "serial.available"

ის
ის

ჩვენ მოვუწოდებთ იმ ფუნქციას, რომელიც ბაძავს "serial.available" U0kbhit (). მას არ სჭირდება შეყვანა, მაგრამ პირიქით ამოიცნობს, არის თუ არა კლავიატურაზე ცვლილება RDA სტატუსის ბიტის გამოყენებით და ბრუნდება true როდესაც ცვლილება გამოვლინდება.

ნაბიჯი 5: ფუნქცია "serial.read"

ის
ის

ჩვენ მოვუწოდებთ იმ ფუნქციას, რომელიც ბაძავს "serial.read" ფუნქციას U0getchar (), რომელიც არ იღებს შეყვანს და გამოაქვს ნებისმიერი ცვლილება კლავიატურაზე, რომელიც ინახება UDR0 რეესტრში.

ნაბიჯი 6: ფუნქცია "serial.write"

ის
ის

ჩვენ გამოვიძახებთ იმ ფუნქციას, რომელიც ბაძავს "serial.write" U0putchar (), რომელიც იღებს მონაცემებს UDR0 რეესტრიდან ცვლილების გამოვლენისა და შენახვისას და ამონაწერებს, რომლებიც იცვლება სერიულ მონიტორზე.

ნაბიჯი 7: დაყენების ფუნქცია

დაყენების ფუნქცია
დაყენების ფუნქცია

ეს არის ძირითადი კონფიგურაციის ფუნქცია, რომელიც გამოიყენებს ჩვენს "serial.begin" იმიტაციას სერიული პორტის ინიციალიზაციისთვის და ინიციალიზებს ჩვენს ბიტ პარამეტრებს ტაიმერის რეგისტრატორებისთვის და დააყენებს PB6 ჩვენს ტონებს.

ნაბიჯი 8: მარყუჟის და ISR ფუნქციები

მარყუჟის და ISR ფუნქციები
მარყუჟის და ISR ფუნქციები

მარყუჟი ფუნქციონირებს ასე: თუ ცვლილებები გამოვლენილია ჩვენი "serial.available" ფუნქციით, ჩვენი "serial.read" ფუნქცია ინახავს ცვლილებებს და ჩვენი "serial.write" ფუნქცია აყენებს ამ ცვლილებას სერიულ მონიტორში. სანამ ცვლადი i ნაკლებია სიხშირის მასივის ზომაზე, ის ადგენს გამომავალს i- ის პოზიციას ამ მასივში და გამოაქვს სიხშირე ამ პოზიციაზე. ISR ფუნქციონირებს როგორც გადატვირთვა, სადაც თუ სიხშირის მასივის პოზიცია არ არის ტოლი 0 (სხვა სიტყვებით რომ ვთქვათ თუ "q" არ არის დაჭერილი), ის გამოუშვებს სიხშირეს, მაგრამ როდესაც "q" დაჭერილია ის გადატვირთულია. გთხოვთ გაითვალისწინოთ: ეს კოდი იყენებს შეფერხებებს, მაგრამ ეს შეიძლება გაკეთდეს გამორთული წყვეტებით. მე გამოვაქვეყნებ კოდს შეფერხების გარეშე, თუკი მივიღებ მასზე რაიმე მოთხოვნას, მე უბრალოდ ვფიქრობ, რომ შეფერხების ვერსია უფრო სახალისოა.

ნაბიჯი 9: გაყვანილობა

გაყვანილობა
გაყვანილობა

ამ კოდის გაყვანილობა უკიდურესად მარტივია, უბრალოდ PB6– დან გამომავალი მავთული მოათავსეთ პურის დაფაზე, დაუკავშირეთ ზუზერს ან დინამიკს სერიაში და მიაბრუნეთ იგი მიწასთან. შენიშვნა: თუ თქვენ იყენებთ დინამიკს, ჩასვით პატარა რეზისტორი დინამიკის წინ. თუ თქვენ უბრალოდ გსურთ ნახოთ გამომავალი, მაგრამ არ მოუსმინოთ მას, უბრალოდ დაუკავშირეთ PB6 ოსცილოსკოპის წითელ ტყვიას და შავ მიწას მიწასთან.

ნაბიჯი 10: შეაჯამეთ ეს ყველაფერი ერთად

მე დავამატე სრული კოდი ამ ნაბიჯს, ვინაიდან მე ავხსენი მისი ყველა ნაწილი წინა ნაბიჯებში. ის უბრალოდ იღებს კლავიატურის შეყვანას სხვადასხვა სიხშირეზე და ამ სიხშირეს გამოსცემს PB6- ში. ვიმედოვნებთ, რომ მოგეწონათ IDE– ით კოდირების სხვა გზით კითხვა!

ასევე, გთხოვთ მიეცით ხმა მიკროკონტროლერის კონკურსში: D

გირჩევთ: