Мазмуну:

Китепкана же сериялык функциялары жок Arduino Tone Generator (үзгүлтүктөр менен): 10 кадам
Китепкана же сериялык функциялары жок Arduino Tone Generator (үзгүлтүктөр менен): 10 кадам

Video: Китепкана же сериялык функциялары жок Arduino Tone Generator (үзгүлтүктөр менен): 10 кадам

Video: Китепкана же сериялык функциялары жок Arduino Tone Generator (үзгүлтүктөр менен): 10 кадам
Video: Как использовать ESP32 WiFi и Bluetooth с Arduino IDE, полная информация с примерами и кодом. 2024, Ноябрь
Anonim
Китепкана же сериялык функциялар жок Arduino Tone Generator (үзгүлтүктөр менен)
Китепкана же сериялык функциялар жок Arduino Tone Generator (үзгүлтүктөр менен)

Бул адатта мен үйрөтө турган нерсе эмес, мен металл иштеткенди жакшы көрөм, бирок мен электротехниканын студенти болгондуктан микроконтроллерлер боюнча сабак алышым керек (Embedded Systems Design), мен көрсөтмө берем деп ойлогом менин проектилеримнин бири. Мен башында бул класс үчүн долбоорду жана башкаларды түзгөндө, arduino китепканасынын функцияларын же сериялык функцияларын колдонбогон окуу куралдары өтө аз экенин таптым, бул дагы жакшы сабак болот деп ойлогом.

Бул код Atmega 2560 микроконтроллери үчүн иштелип чыккан, андыктан эгер сиз аны башка тактада колдонууну кааласаңыз, контроллерлериңиздин колдонуучусунун негизинде коддогу даректердин регистрлерин өзгөртүшүңүз керек болот. Коддун артында турган негизги идея, клавиатурадагы баскычты сериялык мониторго киргизгенде, ардуино мега сиз баскан кайсы бир баскычтын негизинде белгилүү бир жыштыкты чыгарат, аны "q" баштапкы абалга келтирет. Мен муну жасадым: "а" А тегиз жыштыкты чыгарат жана "А" А кескин жыштык чыгарат, "б" В жалпак чыгарат, "жалпак" үчүн "с", "кескин" үчүн "С" ж.б. Толук код аягында жүктөлөт, бирок ар бир кадам кодду бөлүктөргө бөлөт, андыктан түшүндүрүү оңой.

1 -кадам: Каттоо даректерин аныктоо

Реестр даректерин аныктоо
Реестр даректерин аныктоо

Бул кадам оңой, эгер сиз atmega 2560 колдонуп жатсаңыз, анда мен колдонгон даректерди колдонушуңуз керек, бирок эгер сиз башка чипи бар тактаны колдонсоңуз, анда бул регистрлердин ар биринин дарегин табышыңыз керек болот. чиптердин колдонмосу. Жогорудагы аныктамалар жөн гана туруктуу, алар кийин биздин функциялар үчүн колдонулат. Биз даректерди туруксуз кол коюлбаган катары көрсөтөбүз, анткени биз компилятордун алар менен чаташуусун каалабайбыз.

2 -кадам: Массивдер жана глобалдык өзгөрмөлөр

Массивдер жана глобалдык өзгөрмөлөр
Массивдер жана глобалдык өзгөрмөлөр
Массивдер жана глобалдык өзгөрмөлөр
Массивдер жана глобалдык өзгөрмөлөр
Массивдер жана глобалдык өзгөрмөлөр
Массивдер жана глобалдык өзгөрмөлөр

Бул жерде биз ар бир ачкыч чыгарышы керек болгон бардык жыштыктарды камтыган Жыштык массивин аныктагыбыз келет. Бул баалуулуктар иш жүзүндөгү ноталардын жыштыгынан эсептелинет жана чынын айтсам, мен аларды кантип алганымды унутуп калдым, бирок буларды туура текшерүү үчүн осциллографта сынап көрдүм. Биз ошондой эле ар бир тон үчүн басуу үчүн бардык баскычтарды камтыган ноталар массивин, ошондой эле кийинки функцияларыбыз үчүн керек болгон өзгөрмөлөрдү аныктап жатабыз.

3 -кадам: "serial.begin" Функциясы

The
The

Биз U0init () "serial.begin" функциясын кайталаган биздин ыңгайлаштырылган функцияны чакырабыз. Бул керектүү болгон ылдамдыкты кириш катары алат жана сериялык портту ошол ылдамдыкта баштайт.

4 -кадам: "serial.available" Функциясы

The
The

Биз "serial.available" U0kbhit () туураган функцияны чакырабыз. Бул киргизүүнү талап кылбайт, тескерисинче RDA статусун колдонуп клавиатурада кандайдыр бир өзгөрүү болгонун аныктайт жана өзгөрүү аныкталганда чындыкты кайтарат.

5 -кадам: "serial.read" функциясы

The
The

Биз "serial.read" функциясын туураган функцияны U0getchar () деп атайбыз, ал эч кандай киргизбейт жана UDR0 реестринде сакталган клавиатурада кандай гана өзгөрүү болбосун чыгарат.

6 -кадам: "serial.write" функциясы

The
The

Биз "serial.write" окшоштурган функцияны U0putchar () деп атайбыз, ал UDR0 реестринен маалыматтарды таап, сактоодо жана кайра сериалдык мониторго кайра өзгөрүүлөрдү чыгарат.

7 -кадам: Орнотуу функциясы

Орнотуу функциясы
Орнотуу функциясы

Бул сериялык портту инициализациялоо үчүн биздин "serial.begin" имитациясын колдоно турган негизги орнотуу функциясы жана таймер регистрлери үчүн бит орнотууларыбызды инициализациялайт жана биздин обондорду чыгаруу үчүн PB6 орнотот.

8 -кадам: Loop жана ISR функциялары

Loop жана ISR функциялары
Loop жана ISR функциялары

Укурук мындай иштейт: эгер биздин "serial.available" функциясы менен өзгөрүү аныкталса, биздин "serial.read" функциясы ошол өзгөрүүнү сактайт жана биздин "serial.write" функциясы ал өзгөрүүнү сериялык мониторго коет. I өзгөрмөсү жыштык массивинин өлчөмүнөн азыраак болгондо, ал ошол жактагы жыштыктагы чыгууну ошол массивдеги i позициясы кылып коёт. ISR баштапкы абалга келтирүү функциясын аткарат, эгерде жыштык массивинин позициясы 0ге барабар болбосо (башкача айтканда "q" басылбаса), ал жыштыкту чыгарат, бирок "q" басылганда ал баштапкы абалга келет. бул код үзгүлтүктөрдү колдонот, бирок ал өчүрүлгөн өчүрүүлөр менен жасалышы мүмкүн. Эгерде мен кандайдыр бир суроо -талап алсам, кодду үзгүлтүксүз жайгаштырам, мен үзгүлтүккө түшүрүү версиясы кызыктуу деп ойлойм.

9 -кадам: Кабелдөө

Электр өткөргүчтөрү
Электр өткөргүчтөрү

Бул коддун өткөргүчтөрү өтө оңой, жөн эле PB6дан чыккан панелди панельге коюп, ызылдагычты же динамикти ошол менен катар туташтырып, кайра жерге туташтырыңыз. Эскертүү: эгер сиз динамикти колдонсоңуз, анда динамиктин алдына кичинекей резистор коюңуз. Эгерде сиз жөн гана чыгууну көргүңүз келсе, бирок укпасаңыз, анда PB6ны осциллографтын кызыл коргошун менен кара коргошун жерге туташтырыңыз.

10 -кадам: Бардыгын бириктирүү

Мен бул кадамга толук кодду коштум, анткени мен анын бардык бөлүктөрүн мурунку кадамдарда түшүндүргөм. Бул ар кандай жыштыктар үчүн клавиатура киргизүүсүн талап кылат жана бул жыштыкты PB6га чыгарат. Сизге IDE менен коддун башка жолун окуу жакты деп үмүттөнөбүз!

Ошондой эле, бул үчүн микроконтроллер конкурсуна добуш бериңиз: D

Сунушталууда: