This is an old revision of the document!
Seotud mooduliga: [HW] Kontrollermoodul
See teegi osa sisaldab Kodulabori etherneti kasutamise funktsioone.
Termistori temperatuuri arvutamine Celsiuse kraadides ADC muunduri väärtusest. Funktsioon põhineb teisendustabelil. Parameetrid:
IR kaugusanduri väljundpinge ADC väärtuse sentimeetriteks ümberarvutamise funktsioon. Parameetrid:
Ultraheli-kaugusanduri mõõtmise teostamise funktsioon. Funktsioon tekitab SRF04 kaugusmõõdiku päästikuimpulsi ja mõõdab kajaimpulsi saabumise aega. Aja põhjal arvutatakse objekti kaugus. Mõõtmine võtab aega kuni 36 ms. Funktsioon eeldab 14.7456 MHz mikrokontrolleri taktsagedust. Parameetrid:
// html stringide salvestamiseks programmimälusse #include <avr/pgmspace.h> // Ethernelt funktsioonid #include "ip_arp_udp_tcp.h" #include "enc28j60.h" #include "net.h" #include "ethernet.h" #include <homelab/delay.h> #include <homelab/pin.h> // Veebilehe koostamiseks eraldi funktsioon uint16_t ethernet_load_webpage(uint8_t *buf,uint8_t on_off); // MAC ja IP peavad olema unikaalsed oma kohtvõrgus, // kahte ühesugust aadressi ei saa olla seadmetel. // See MAC on suvaliselt võetud (üldjuhul pole vaja muuta) static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}; // IP vastavalt kohtvõrgule (viimane number valida ise) static uint8_t myip[4] = {192,168,1,100}; // andmete puhvri suurus static uint8_t buf[BUFFER_SIZE+1]; // LED PB7 muutuja määramine pin debug_led = PIN(B, 7); int main(void) { uint16_t plen = 0; //andmejada pikkus uint16_t dat_p; //url-i alguse aadress int8_t cmd; // Etherneti initseerimine vastavalt etteantud aadressidele ethernet_init(mymac,myip); // LED PB7 on väljund pin_setup_output(debug_led); while(1) { // Võtab vastu pakette, kuni saab endale määratud andmetega paketi ethernet_get_packet(buf); // Vaatab, mis url-is sisaldub dat_p = ethernet_analyse_url(buf); // Leiab vastuvõetud jadast url-i esimese tähemärgi cmd = buf[dat_p]; // Kui sümbol on asciis '0' if (cmd == '0') { // LED kustutada pin_set(debug_led); // Lae veebilehet vastavalt LED-i olekule // Vajalik on jälgida andmejada lõppu plen = ethernet_load_webpage(buf,pin_get_value(debug_led)); } else if (cmd == '1') //sümbol on '1' { // LED põlema pin_clear(debug_led); plen = ethernet_load_webpage(buf,pin_get_value(debug_led)); } // Muul juhul lae veebileht vastavalt LED olekule else plen = ethernet_load_webpage(buf,pin_get_value(debug_led)); // Kuva varem valmis laetud veebileht ethernet_print_webpage(buf,plen); } } // Veebileht laetakse kuvamiseks kirjutades andmed TCP saatmise puhvrisse uint16_t ethernet_load_webpage(uint8_t *buf,uint8_t on_off) { uint16_t plen; // Laeb html koodi saatmiseks puhvrisse // Need suured stringid on salvestatud PSTR makro abil programmimälusse, // et mitte raisata liigselt töömälu plen = ethernet_load_data(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n")); plen = ethernet_load_data(buf,plen,PSTR("<center><p>Homelab PB7 LED: ")); // Kui LED ei põle if (on_off) { plen = ethernet_load_data(buf,plen,PSTR("<font color=\"#FF0000\"> ON</font>")); plen = ethernet_load_data(buf,plen,PSTR("<p><a href=\"./0\">Switch off</a><p>")); } // Kui LED põleb else { plen = ethernet_load_data(buf,plen,PSTR("<font color=\"#00FF00\"> OFF</font>")); plen = ethernet_load_data(buf,plen,PSTR("<p><a href=\"./1\">Switch on</a><p>")); } // Väljasta andmete lõpu aadress puhvris return(plen); }