Talaan ng mga Nilalaman:

Arduino 3-in-1 Pagpapakita ng Oras at Panahon: 11 Mga Hakbang
Arduino 3-in-1 Pagpapakita ng Oras at Panahon: 11 Mga Hakbang

Video: Arduino 3-in-1 Pagpapakita ng Oras at Panahon: 11 Mga Hakbang

Video: Arduino 3-in-1 Pagpapakita ng Oras at Panahon: 11 Mga Hakbang
Video: Ipinaliwanag ang function ng Arduino Millis na may 3 halimbawa 2024, Hulyo
Anonim

Sa pamamagitan ng Boomer48 Sundan ang Higit pa ng may-akda:

Gamit ang ATtiny85
Gamit ang ATtiny85
Gamit ang ATtiny85
Gamit ang ATtiny85
Ang Pi Powered Pie Partitioning at Polygon Pruning Tool
Ang Pi Powered Pie Partitioning at Polygon Pruning Tool
Pinapagana ng Pie Partitioning at Polygon Pruning Tool
Pinapagana ng Pie Partitioning at Polygon Pruning Tool
Mga Kontrol na Digital para sa isang Manu-manong Audio Amp
Mga Kontrol na Digital para sa isang Manu-manong Audio Amp
Mga Kontrol na Digital para sa isang Manu-manong Audio Amp
Mga Kontrol na Digital para sa isang Manu-manong Audio Amp

Gusto ko ang mga microcontroller ng PIC at gusto ko ng programa sa wika ng pagpupulong. Sa katunayan, sa nakaraang ilang taon, nag-post ako ng halos 40 mga proyekto sa aking website batay sa kombinasyon na iyon. Kamakailan-lamang ay nag-order ako ng ilang mga bahagi mula sa isa sa aking mga paboritong vendor ng US at nakita ko ang isang Arduino Nano, na may isang cable ng programa, sa halagang $ 1.20 lamang kaysa sa isang hubad na chip ng processor ng ATMEGA328. Kaya't binili ko ang ilan sa kanila. Pagkatapos ay na-download ko ang Arduino IDE at inalis ang aking memorya ng programang 'C ++'.

Ang proyektong ito ay isang mash-up ng isang orasan na gumagamit ng GPS para sa tiyempo at isang RF na tatanggap ng mga mensahe sa panahon mula sa isang karaniwang sensor ng AcuRite. Ang resulta ay isang maliit na antas ng oras at pagpapakita ng temperatura. Ang orasan ng GPS at mga gawain sa panahon ay naka-set up bilang magkahiwalay na isama ang mga file upang madaling pumunta sa pangunahing gawain at i-configure ito upang gawin lamang ang pag-andar ng orasan o pag-andar lamang ng panahon. I-uncment lamang ang naaangkop na "#define" sa tuktok ng pangunahing gawain kung nais mo lamang ang isa sa mga pag-andar.

Kung ang parehong mga pag-andar ay ginamit, pagkatapos ang tuktok na linya ng LCD ay nagpapakita ng lokal na oras at ang ilalim na linya ng LCD ay nagpapakita ng halumigmig at temperatura sa parehong Celsius at Fahrenheit. Kung ang pag-andar lamang sa orasan ay ginamit, pagkatapos ay ipinapakita sa tuktok na linya ang lokal na oras at ang ibabang linya ay nagpapakita ng UTC. Kung ang pag-andar lamang ng panahon ang ginamit, ipinapakita sa tuktok na linya ang unang natanggap na sensor at ipinapakita sa ilalim na linya ang anumang iba pang natanggap na sensor. Idinagdag ko ang kakayahang iyon dahil mayroon akong dalawang mga sensor ng panahon.

Hakbang 1: Weather Sensor

Weather Sensor
Weather Sensor
Weather Sensor
Weather Sensor
Weather Sensor
Weather Sensor

Ang sensor ng panahon ng AcuRite na ginamit dito ay nagpapadala ng impormasyon sa temperatura at halumigmig bawat 16 segundo. Sa likuran ito ay nagpapakita ng isang bilang ng modelo ng 000592TXR ngunit karaniwang ito ay na-advertise bilang modelo 06002M. Ang sensor na ito ay ginagamit ng maraming iba't ibang mga modelo ng istasyon ng panahon kaya madali itong makahanap at nakuha ko sila sa eBay sa ilalim ng $ 20. Nagbebenta ang AcuRite ng mga katulad na naghahanap ng mga sensor para sa ilan sa kanilang mga istasyon ng panahon ngunit maaari o hindi sila sumunod sa parehong protocol ng komunikasyon. Mayroong ilang pahiwatig sa web na ang sensor na may temperatura lamang na 00606 ay gumagamit ng parehong format ng mensahe ngunit may isang hindi wastong byte ng kahalumigmigan.

Tulad ng nakikita sa unang porma ng alon na ipinakita sa itaas, ang mga mensahe sa lagay ng panahon ay ipinapadala sa mga pagsabog na may 2ms agwat sa pagitan ng sunud-sunod na mga mensahe. Ang pangalawang form ng alon na ipinakita sa itaas ay nagpapalawak ng bahagi ng isang mensahe upang makita ang kaunting mga tagal at pattern. Mayroong apat na mga piraso ng pag-sync na halos 600us mataas na sinusundan ng 600us na mababa. Ang mga bits ng data ay kinakatawan ng 400us mataas na sinusundan ng 200us mababa (1) o 200us mataas na sinusundan ng 400us mababa (0).

Ang format ng mensahe ay binubuo ng 7 bytes ng data. Ang unang dalawang byte ay ang sensor ID at ang mga ito ay hindi nagbabago (ibig sabihin: hindi ito gumagamit ng isang rolling code). Ang huling byte ay isang simpleng additive checkum ng unang anim na byte. Ang pangatlong byte ay isang tagapagpahiwatig ng antas ng baterya at dapat palaging magiging 44 hex kung ang baterya ay mabuti. Ang ika-apat na byte ay ang halumigmig at ito ay isang hindi naka-scale na halaga sa pagitan ng 0 at 99. Mahalagang tandaan na ang pinaka-makabuluhang piraso ng bytes 4, 5, at 6 ay isang parity bit at hindi bahagi ng pagsukat halaga Ang bytes 5 at 6 ay ang scale na temperatura (Celsius) na may mas mababang 4 na piraso ng byte 5 na pinagsama sa mas mababang 7 piraso ng byte 6 upang mabuo ang isang 11-bit na halaga. Ang temperatura ay palaging kinakatawan bilang isang positibong numero at nagiging negatibo lamang kapag inilapat ang pag-scale. Ang pag-scale ay (C / 10) - 100. Ang paghati sa 10 ay kinakailangan dahil ang resolusyon ng temperatura ay nasa ikasampu ng isang degree. Kinakailangan ang pagbabawas dahil ang 100 ay idinagdag ng sensor upang mapanatili ang positibong ipinadala na halaga.

Hakbang 2: RF Receiver

Tagatanggap ng RF
Tagatanggap ng RF
Tagatanggap ng RF
Tagatanggap ng RF

Ang RF module na ginagamit ko para sa proyektong ito ay ang RXB6. Ito ay isang sobrang heterodyne na tatanggap na taliwas sa hindi gaanong kanais-nais na super regenerative receivers. Kung titingnan mo ang murang mga module ng RF doon, mahahanap mo na ang mga transmiter at receiver board ay madalas na magkakasama. Karamihan sa mga bundle na tatanggap na iyon ay sobrang mga makabagong uri upang ang mga ito ay may posibilidad na magkaroon ng mas mababang mga katangian sa pagganap (kabilang ang saklaw) kaysa sa mga sobrang heterodyne na tatanggap. Kailangan lang namin ang module ng tagatanggap para sa proyektong ito dahil makakakuha kami ng mga signal mula sa isang transmiter ng sensor ng panahon.

Hakbang 3: Mga RF Antena

Mga RF Antena
Mga RF Antena

Ang RXB6 ay hindi kasama ng isang antena. Maaari kang bumili ng ilang mga helical na medyo mura ngunit madali din itong gumawa ng iyong sariling antena. Sa katunayan, ang isang breadboard jumper cable ay maaaring madulas sa pin ng antena ng module kung hindi mo nais na masyadong magarbong. Sa isip, ang isang tuwid na antena ng kawad ay magiging 1/4 haba ng daluyong na gumagana hanggang sa mga 6.8 pulgada. Una kong ginawa ang bagay na jumper wire at walang problema sa pagkuha ng aking panlabas na sensor kahit na ang aking electronics workshop ay nasa aking basement.

Ang isa pang posibilidad ay upang gumawa ng iyong sariling helical antena. Mayroong iba't ibang mga plano para sa web ngunit ang ipinakita sa larawan sa itaas ay ang ginawa ko. Gumamit ako ng ilang solidong kawad na core mula sa isang piraso ng scrap ng Ethernet cable at sinaktan ito sa paligid ng makinis na shank ng isang 5/32 inch drill bit. Iwanan ang pagkakabukod maliban sa tip na ibinebenta ng mga RF board. Kakailanganin mo ng 20 liko. Maaari mo ring gamitin ang isang 7/32 inch drill bit at balutin ang 17 na liko sa halip. Ang alinman sa mga ito ay maaaring gumana lamang para sa mga saklaw na malamang na mayroon ka para sa iyong mga sensor. Ang totoong susi ay ang pagkakaroon ng isang mahusay na RF receiver upang magsimula sa. Ang mga sensor ng AcuRite ay mayroon ding medyo malakas na mga transmiter.

Hakbang 4: RF Communication Protocol

Mayroong ilang iba't ibang mga diskarte sa modulasyon para sa paglilipat ng data ngunit ang mga sensor na ito ay gumagamit ng pinakasimpleng Alok (on-off-keying) o ASK (amplitude-shift-keying). Dahil nakikipag-usap kami sa 0/1 data bits sa halimbawang ito, ang amplitude ay buo o buo. Kaya, para sa aming mga hangarin, ang OOK at ASK ay pareho dahil ang ibig sabihin ng OOK na ang RF carrier ay puno o puno na. Ang format ng mensahe sa pangkalahatan ay tinukoy ng tagagawa ng nagpapadala ng aparato at maaari silang gumamit ng halos anumang rate ng paghahatid, anumang istilo ng pag-format ng kaunti, at anumang haba ng mensahe. Ang bandang 433-MHz ay naka-jam na puno ng mga pagpapadala para sa mga bagay tulad ng matalinong metro, atbp. Kaya kailangang i-tono ang software upang mai-filter para lamang sa format ng mensahe na nais nating gamitin.

Hakbang 5: Data ng Oras

Data ng Oras
Data ng Oras

Gumagamit ako ng isang murang yunit ng GPS upang makakuha ng tumpak na data ng oras na awtomatikong i-restart pagkatapos ng isang pagkawala ng kuryente. Mayroon akong maraming mga yunit ng GPS (walang ipinapakita) na naglalabas ng karaniwang mga pangungusap ng NMEA ngunit ang pinakamaliit at pinakamura ng mga yunit na mayroon ako ay ang NEO-6M. Ang NEO-6M module ay madaling i-interface sa Arduino dahil gumagamit ito ng isang serial port na TTL-level. Ang tanging pagkakaiba lamang ay ang pamantayan ng NMEA ay tumutukoy sa isang serial baud rate na 4800 ngunit ang NEO-6M ay nagde-default sa 9600 baud. Maaari mong patakbuhin ang libreng program na "u-center" upang baguhin ang rate ng baud ngunit naiwan ko lang ito sa default ng pabrika. Mayroon ding isang libreng programa ng utility na tinatawag na GPSInfo (inilabas ng Globalsat) na napaka-madaling gamiting para sa pagtingin ng impormasyon ng GPS sa PC. Maaari mong i-hook up ang yunit ng GPS sa isang karaniwang USB sa TTL cable para sa pag-check out nito o para sa pag-set up nito gamit ang isang PC. Tandaan na ang GPS chip sa module ay talagang tumatakbo sa 3.3 volts (sa pamamagitan ng isang on-board voltage regulator) kaya kung nais mong kumonekta sa RXD port dapat mong i-level ang shift mula sa 5 volts. Ang port ng TXD ay maaaring kumonekta nang direkta sa Arduino o sa PC.

Hakbang 6: Mga Time Zone

Ang pagpapakita ng oras ng GPS ay isang madaling gawin hangga't nais mo lamang ipakita ang UTC (Universal Coordinated Time). Ang mga pangungusap na NMEA ay binubuo ng mga character na ASCII na maaaring direktang output sa LCD. Ang bahaging oras ay nasa format ng HHMMSS. FF (oras, minuto, segundo, at praksyonal na segundo). Para sa aming orasan ang praksyonal na bahagi ay hindi kapaki-pakinabang kaya ang kailangan lang nating harapin ay anim na character. Ang problema ay kailangan mong mag-convert sa iyong lokal na oras at sa isang 12 oras na AM / PM format kung nais mo iyon. Ngunit kung minsan ang mga problema ay kung bakit nakakainteres ang buhay kaya't ganoon talaga ang bahagi ng software na iyon.

Tulad ng para sa mga time zone, maaari mong isipin na magkakaroon lamang ng 24 sa kanila na may 12 sa kanila sa silangan ng lokasyon ng UTC (+ mga zone) at 12 sa mga ito sa kanluran ng lokasyon ng UTC (- mga zone). Sa katunayan, maraming mga kakaibang mga oras na praksyonal at isang pares na lumampas sa 12 oras na "limit". Kung nakatira ka sa isa sa mga lugar na iyon humihingi ako ng paumanhin dahil ang aking software ay account lamang para sa 24 buong oras na mga zone. Mayroon ding ilan sa atin na gumagamit ng Daylight Savings Time na bahagi ng taon ngunit hindi iyon awtomatikong nai-account sa software. Mangangailangan iyon ng isang talahanayan ng paghahanap ng mga petsa sa hinaharap, labis na pagiging kumplikado sa software, at ang pangangailangan na i-update ang software kung nagbago ang mga linggo ng taon para sa switchover. Sa halip, ang hardware ay gumagamit ng isang pansamantalang switch ng contact upang payagan ang madaling setting ng time zone (offset ng UTC).

Hakbang 7: Skematika

Skematika
Skematika

Ang eskematiko ay ipinapakita sa itaas at may kasamang mga koneksyon para sa isang 4-bit 1602 LCD interface. Ang serial data mula sa RF receiver ay nasa mga antas ng digital na lohika kaya't direktang konektado ito sa isa sa mga pin ng input ng data ng Arduino. Ang pin ay naka-configure sa software upang magsagawa ng isang nakakagambala na pagpapaandar upang masukat namin ang mga lapad ng pulso. Ang output ng GPS TXD ay direktang konektado sa input ng Arduino RX.

Mayroong dalawang switch na ginamit. Tulad ng nabanggit kanina, pinapayagan ng isang pansamantalang switch ng contact para sa pagtatakda ng offset ng UTC. Maaaring mapindot ang switch sa anumang oras upang ipasok ang itinakdang mode. Sa una, magpapakita ang display ng isang hindi wastong offset ng UTC ng “+77”. Sumangguni sa seksyong "Clock Software" para sa mga tagubilin sa setting ng offset ng UTC.

Ang pangalawang switch ay isang simpleng on / off switch. Sa posisyon na "off" ang oras ay ipapakita sa format na 12 oras (AM / PM) at sa posisyon na "on" ang oras ay ipapakita sa 24 na oras na format. Ang switch na ito ay maaaring mabago anumang oras upang magpalipat-lipat sa pagitan ng mga format.

Kung nais lamang ang pagpapaandar ng orasan, kung gayon ang module ng RF receiver ay hindi kailangang ikonekta. Kung nais lamang ang pagpapaandar ng panahon, kung gayon ang GPS at ang dalawang switch ay hindi kailangang ikonekta.

Hakbang 8: LCD Software

May posibilidad akong gumamit ng isa sa dalawang uri ng mga interface ng LCD. Ang isa ay ang karaniwang interface na 4-bit at ang iba pa ay isang interface na 3-wire na gumagamit ng isang rehistro sa paglilipat. Dinisenyo ko ang interface na iyon kapag nagtatrabaho ako sa maliit na mga microcontroll ng PIC na may isang limitadong bilang ng mga I / O na pin. Ginamit ko ang 4-bit interface para sa proyektong ito ngunit may sarili akong LCD na isama ang file sa halip na gamitin ang generic na Arduino LCD library. Binabawasan nito ang pagkonsumo ng memorya at pagiging kumplikado ng code at pinapayagan din akong i-tweak ang code para sa mga tukoy na proyekto tulad nito.

Hakbang 9: Clock Software

Ang yunit ng GPS ay naglalabas ng karaniwang NMEA-0183 pangungusap na mga ASCII string na naglalaman ng iba't ibang impormasyon. Para sa application na ito pinili ko ang pangungusap na GGA upang makuha ang impormasyon sa oras dahil iyon ang pangungusap na ginamit ko para sa isang nakaraang proyekto sa GPS. Ang mga patlang ng impormasyon sa mga pangungusap ng NMEA ay pinaghihiwalay ng mga kuwit kaya, pagkatapos ng napansin ang header ng pangungusap ng GGA, ang software ay karaniwang bibibilang ng mga kuwit at tawagan ang naaangkop na gawain para sa bawat nais na larangan ng impormasyon ng GPS. Ang impormasyon lamang sa oras ang kinakailangan dito at nasa patlang iyon pagkatapos ng unang kuwit kaya't hindi na kailangan ng pagbibilang.

Ang anim na time digit (HHMMSS) ay buffered at pagkatapos ay iproseso pagkatapos matanggap ang lahat. Ang GPS ay maaaring maglabas ng ilang mga hindi kumpletong mensahe nang maaga upang maipalabas ng regular na pag-buffer na ang bawat character ay isang ASCII na bilang na bilang. Kung natanggap ang isang hindi magandang character, ang mensahe ay itinapon. Maaari rin itong mangyari sa mga bihirang okasyon sa panahon ng normal na operasyon, partikular kung bumagsak nang kaunti ang komunikasyon sa serial port. Minsan ko lang ito nakita at lahat ng nangyari ay ang oras na huminto nang isang segundo at pagkatapos ay tumalon ng dalawang segundo sa halip na isa.

Kung ang software ay naka-configure upang ipakita lamang ang oras, pagkatapos ang unang linya ng LCD ay magpapakita ng lokal na oras at ang pangalawang linya ay ipapakita ang UTC. Para sa UTC ipinapadala lamang ng software ang mga character na ASCII nang direkta sa display routine, na may mga colon (:) naisingit nang naaangkop.

Upang mai-convert ang UTC sa lokal na oras, dapat ilapat ang offset ng UTC (time zone). Sapagkat ang oras ng UTC mula sa GPS ay nasa format na ASCII, binago ng software ang mga character na ASCII na oras sa decimal at pagkatapos ay idinagdag ang offset ng UTC. Ang offset ng UTC ay naka-imbak bilang isang positibong halaga ng BCD na may isang bit bit sa gayon ito ay unang na-convert sa isang halaga ng integer at pagkatapos ay negated kung ang bit ng pag-sign ay nakatakda. Kapag kinakalkula ang halaga ng lokal na oras na oras, ginagamit ang isang talahanayan ng paghahanap upang i-convert ito sa BCD, at pagkatapos ang BCD ay ibinalik pabalik sa ASCII para ipakita. Kailangang hawakan ng talahanayan ng paghahanap ang format na 24 oras na UTC pati na rin ang +/- 12 na mga time zone. Upang magawa ito, ang mga oras ng UTC mula 0000 hanggang 2300 ay sakupin ang gitnang 24 na mga entry sa talahanayan na may 12 mga entry bago at 12 na mga entry pagkatapos ay account para sa mga time zone. Ang isang mesa ay nasa 12 oras na format kaya nagdagdag din ako ng isang lookup table para sa bahagi ng AM / PM ng display. Ang iba pang talahanayan ay nasa 24 na oras na format. Tulad ng nabanggit kanina, pinapayagan ng isang on / off switch para sa pagpili ng format na 12 oras o 24 na oras.

Ang time zone ay nakuha mula sa EEPROM sa panahon ng pagsisimula at maikling ipinakita. Kung hindi ito naitakda kahit isang beses pagkatapos ay ang setting ng gawain ay tinatawag. Ang setting ng gawain ay maaari ding tawagan sa anumang oras sa pamamagitan ng pagpindot sa pansamantalang switch ng contact. Sisimulan ng setting ng gawain ang pagpapakita sa "UTC OFFSET +77". Ang isang maikling pindutin ng switch ay babaguhin ang halaga sa "-00". Kung ang isang positibong time zone ay kinakailangan, pagkatapos ng isa pang maikling pindutin ay babaguhin ang halaga sa "+00". Ang isang mahabang pindutin (> 1 segundo) ay ilipat ang setting mode sa susunod na hakbang. Sa puntong ito ang bawat maikling pindutin ay magdaragdag ng halaga ng oras hanggang sa isang maximum ng 12. Matapos maabot ang nais na time zone, pindutin nang matagal ang switch para sa higit sa 1 segundo at pagkatapos ay bitawan ito. Pagkatapos ay mai-save ng software ang halaga ng UTC sa EEPROM at maipapakita ang "OFFSET SAVED". Kung nakagawa ka ng pagkakamali sa panahon ng pagpasok, lumabas lamang at pagkatapos ay pindutin muli ang switch upang i-reset ito.

Ang NEO-6M ay hindi nangangailangan ng isang mahusay na pag-aayos ng posisyon upang ma-output ang oras kaya dapat itong maglabas ng mga mensahe sa lalong madaling makakuha ng isang satellite. Hanggang sa oras na ang display ay basahin ang "WALANG DATA".

Hakbang 10: Weather Software

Ang PIC microcontroller ay may kakayahang mag-gate ng / on ng timer gamit ang isang panlabas na pulso. Ang parehong input pulse ay maaari ding magamit bilang isang panlabas na makagambala upang magsenyas ng isang nabasa ng tagal ng pulso. Ang Arduino ay walang eksaktong kakayahan na iyon kaya ginamit ko ang pagpapaandar na nakakaabala-sa-pagbabago. Sa isang gilid ng mensahe ng pulso ng RF ang kasalukuyang oras ng microsecond ay nai-save ng makagambala na handler. Sa kabaligtaran gilid ang lumipas na oras ay kinakalkula upang matukoy ang lapad ng pulso.

Ang software ay may isang tinukoy na "DEBUG" na nagbibigay-daan sa pagpapakita ng format ng hilaw na data ng mga natanggap na mensahe. Mayroon ding isang tukuyin upang tukuyin ang Arduino input pin para sa serial stream mula sa RF receiver. Ang software ay naka-set up upang makalkula ang naaangkop na mga setting ng rehistro ng abala-sa-pagbabago batay sa tinukoy na ito. Gumagawa lamang ang pagkalkula para sa mga digital na pin ng Arduino. Maaaring gamitin ang isang analog pin sa halip ngunit mangangailangan ito ng matitigas na pag-coding ng mga halaga ng rehistro.

Tinutukoy ng gumagambala na tagabantay kung ang nakuha na bilang ay sapat na haba upang maging isang panimulang pulso. Tulad ng nabanggit kanina, ang puwang sa pagitan ng maraming mga mensahe ay 2ms kaya't iyon ang hinahanap ng software. Dahil sa lahat ng trapiko na 433-MHz, tinitiyak ng paunang pag-screen sa software na ang sinusukat na oras ay hindi bababa sa 1.8ms ngunit hindi hihigit sa 2.4ms. Matapos makita ang pagsisimula ang software ay naghahanap ng mga sync bits (600us) at binibilang upang matiyak na tatanggap ang apat sa kanila. Kapag naipasa na ang mga pagsubok na ito, hahanapin ng software ang tamang oras ng 200us at 400us.

Ang mga natanggap na piraso ay nabuo sa mga byte at ang bawat byte ay nai-save. Matapos matanggap ang pitong byte ang mensahe sa checkum ay napatunayan bago payagan ang karagdagang pagproseso. Kung ang mga hilaw na byte ay dapat na output (debug mode), pagkatapos ang mga byte ay na-convert sa ASCII character at ipinadala sa LCD. Kung nais ang mga output ng halumigmig at temperatura, pagkatapos ay isinasagawa ang naaangkop na mga conversion.

Ang dalawang byte ng data ng Centigrade sa mensahe ng RF ay pinagsama upang mabuo ang isang 11-bit na halaga. Ang mas mababang bahagi ay inilipat sa kaliwang isang piraso upang maalis ang pagkakatulad at upang ihanay ito sa mga piraso sa itaas na bahagi. Ang dalawang byte ay nabuo sa isang 16-bit na variable ng salita at pagkatapos ang buong bagay ay tama na inilipat ng kaunti upang makuha ang pangwakas na pagkakahanay ng bit. Ang salitang variable ay nai-convert sa isang lumulutang variable ng point para sa mga kalkulasyon ng matematika.

Ang isang malaking kalamangan sa paggamit ng C ++ sa Arduino kumpara sa wika ng pagpupulong sa PIC ay pinapasimple nito ang mga kalkulasyon sa matematika. Tulad ng nabanggit kanina ang pag-convert ng Centigrade ay (C / 10) -100. Ang resulta ay na-convert sa isang string at ipinadala sa LCD para ipakita. Ang pagkalkula ng Fahrenheit ay (C * 1.8) + 32. Ang resulta ay muling na-convert sa isang string at ipinadala sa LCD para ipakita. Sa parehong kaso, kasama sa conversion ng String ang negatibong pag-sign (kung naaangkop) at ang decimal point. Ginagawa ang isang tseke para sa decimal point upang matiyak na ang isang character lamang pagkatapos ng decimal ay ipinadala sa display. Kailangan ang tseke na iyon dahil ang string ay maaaring mula 3 hanggang 5 character ang haba.

Mayroon akong dalawang mga sensor ng AcuRite kaya nagdagdag ako ng isang pag-check sa software upang matiyak na ang data para sa isa ay hindi ma-o-overlap ang data para sa iba pa kung ang software ay nakatakda na gawin lamang ang pagpapaandar ng panahon. Ang unang sensor na natanggap pagkatapos ng power up ay ipinapakita sa linya 1 at ang iba ay ipinakita sa linya 2. Sa pamamagitan ng paggamit ng mode ng pag-debug, nakikita ko kung ano ang ID para sa bawat sensor upang makagawa ako ng isang simpleng tseke sa code kung ako lamang nais na maproseso ang data mula sa isa sa mga ito.

Sinusubaybayan ng software ang katayuan ng baterya (byte3) at ipinapakita ang isang mensahe kung ito ay nagpapahiwatig ng isang mababang baterya. Ang mensahe na ito ay nai-o-overtake ang lahat ng iba pang data para sa sensor na iyon.

Hakbang 11: Ipinapakita

Nagpapakita
Nagpapakita
Nagpapakita
Nagpapakita
Nagpapakita
Nagpapakita

Narito ang ilang halimbawang ipinapakita para sa iba't ibang mga pag-andar. Mayroon akong ilang iba pang Mga Tagubilin ngunit ang karamihan sa aking mga proyekto ng PIC microcontroller ay matatagpuan sa aking website sa: www.boomerrules.wordpress.com

Inirerekumendang: