Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:communication:zigbee [2012/04/05 15:07] illoet:examples:communication:zigbee [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +<pagebreak>
 ====== ZigBee ====== ====== ZigBee ======
  
-//Vajalikud teadmised: [HW] [[et:hardware:homelab:controller]], [AVR] [[et:avr:usart]], [LIB] [[et:software:homelab:library:usart]], \\ [LIB] [[et:software:homelab:library:module:lcd_graphic]]//+//Vajalikud teadmised:  
 +[HW] [[et:hardware:homelab:controller]], [HW] [[et:hardware:homelab:combo]],  
 +[AVR] [[et:avr:usart]],  
 +[LIB] [[et:software:homelab:library:usart]], \\  
 +[LIB] [[et:software:homelab:library:module:lcd_graphic]]//
  
 ===== Teooria ===== ===== Teooria =====
Line 23: Line 28:
 //Lisame ZigBee mooduli toe //Lisame ZigBee mooduli toe
 #include <homelab/module/zigbee.h> #include <homelab/module/zigbee.h>
 +#include <homelab/xmega/clksys_driver.h>
  
 // USART liidese määramine // USART liidese määramine
-usart port = USART(1);+static usart port = USART(1);
  
 // LEDid ja nupud määrata // LEDid ja nupud määrata
-pin leds[3] = { PIN(C, 5), PIN(C, 4), PIN(C, 3) }; +pin leds[3] = { PIN(H, 5), PIN(H, 4), PIN(H, 3) }; 
-pin buttons[3] = { PIN(C, 0), PIN(C, 1), PIN(C, 2) };+pin buttons[3] = { PIN(H, 0), PIN(H, 1), PIN(H, 2) };
  
 // ZigBee moodulite max arv võrgus + broadcast aadress + 1 // ZigBee moodulite max arv võrgus + broadcast aadress + 1
Line 42: Line 48:
 int main(void) int main(void)
 { {
-    uint8_t adr = 0; //ühendatava mooduli jrk. nimekirjas + uint8_t adr = 1; //ühendatava mooduli jrk. nimekirjas
-  +
-    // seadista LEDide ja nuppude I/O pordid +
-    for (int i=0; i<3; i++) +
-    { +
-        pin_setup_output(leds[i]); +
-        pin_setup_input(buttons[i]); +
-    }+
  
-    // USART liidese seadistamine ZigBee side jaoks + // seadista LEDide ja nuppude I/O pordid 
-    usart_init_async(port, + for (int i=0; i<3; i++) 
-                     USART_DATABITS_8, + { 
-                     USART_STOPBITS_ONE, + pin_setup_output(leds[i]); 
-                     USART_PARITY_NONE, + pin_setup_input(buttons[i]); 
-                     USART_BAUDRATE_ASYNC(9600));+ }
  
-    // LCD ekraani algseadistamine + // USART liidese seadistamine ZigBee side jaoks 
-    lcd_gfx_init();+ usart_init_async(port, 
 +                  USART_DATABITS_8, 
 +                  USART_STOPBITS_ONE, 
 +                  USART_PARITY_NONE, 
 +                  USART_BAUDRATE_ASYNC(57600));
  
-    // Ekraani puhastamine + // LCD ekraani algseadistamine 
-    lcd_gfx_clear();+ lcd_gfx_init();
  
-    // Taustavalgustuse tööle lülitamine + // Ekraani puhastamine 
-    lcd_gfx_backlight(true);+ lcd_gfx_clear();
  
-    //Oota kuni teisi ZigBee mooduleid otsitakse läbiümbrusest + // Taustavalgustuse tööle lülitamine 
-    lcd_gfx_clear(); + lcd_gfx_backlight(true);
-    lcd_gfx_goto_char_xy(0, 0); +
-    lcd_gfx_write_string("  ZigBee demo");+
  
-    lcd_gfx_goto_char_xy(0, 1); + //Oota kuni teisi ZigBee mooduleid otsitakse läbiümbrusest 
-    lcd_gfx_write_string("Otsin...");+ lcd_gfx_goto_char_xy(0, 0); 
 + lcd_gfx_write_string("  ZigBee demo");
  
-    // Otsib ümbrusest teisiZigBee mooduleid + lcd_gfx_goto_char_xy(01); 
-    // täidab nodelist massiivi leitud moodulite infoga. + lcd_gfx_write_string("Otsin...");
-    zigbee_find_nodes(portnodelist, ZIGBEE_MAX_NODES);+
  
-    //lcd_gfx_clear(); + // Otsib ümbrusest teisiZigBee mooduleid 
-    lcd_gfx_goto_char_xy(0, 1); + // täidab nodelist massiivi leitud moodulite infoga. 
-    lcd_gfx_write_string("Leitud:  ");+ zigbee_find_nodes(port, nodelist, ZIGBEE_MAX_NODES);
  
-    // Kuvab ekraanil leitud moodulite nimekirja + //lcd_gfx_clear(); 
-    // (mis reale kirjutab, kust võtab adr, mitu tk max) + lcd_gfx_goto_char_xy(0, 2); 
-    zigbee_lcd_show_nodes(2, nodelist, ZIGBEE_MAX_NODES);  + lcd_gfx_write_string("Leitud:  ");
-    hw_delay_ms(3000); +
-    lcd_gfx_clear(); +
-  +
-    // Kuvab ekraanil ühendamise teate +
-    lcd_gfx_goto_char_xy(0, 0); +
-    lcd_gfx_write_string("Yhendan..."); +
-    lcd_gfx_goto_char_xy(0, 1); +
-    //kuvab ainult aadressi tagumise osa (8 tähemärki) +
-    lcd_gfx_write_string((nodelist + adr)->address64l); +
-  +
-    // Seadista ZigBee saatma infot valitud ZigBee nodele, +
-    // antud juhul esimesele [0] +
-    // (mis porti kasutab, kust võtab adr) +
-    zigbee_set_destination(port, &nodelist[adr]);+
  
-    // Joonistab ekraanile infot + // Kuvab ekraanil leitud moodulite nimekirja 
-    lcd_gfx_goto_char_xy(00); + // (mis reale kirjutabkust võtab adr, mitu tk max) 
-    lcd_gfx_write_string( ZigBee demo");+ zigbee_lcd_show_nodes(48, nodelist, ZIGBEE_MAX_NODES); 
 + hw_delay_ms(3000); 
 + lcd_gfx_clear();
  
-    lcd_gfx_goto_char_xy(0, 1); + // Kuvab ekraanil ühendamise teate 
-    lcd_gfx_write_string("Nupp1: LED1");+ lcd_gfx_goto_char_xy(0, 0); 
 + lcd_gfx_write_string("Yhendan..."); 
 + lcd_gfx_goto_char_xy(0, 1); 
 + //kuvab ainult aadressi tagumise osa (8 tähemärki) 
 + lcd_gfx_write_string((nodelist + adr)->address64l);
  
-    lcd_gfx_goto_char_xy(0, 2); + // Seadista ZigBee saatma infot valitud ZigBee nodele, 
-    lcd_gfx_write_string("Nupp2: LED2");+ // antud juhul esimesele [0
 + // (mis porti kasutabkust võtab adr
 + zigbee_set_destination(port, &nodelist[adr]);
  
-    // Hoia meeles eelmist nuppu selleks, et vältida olukorda, + lcd_gfx_clear(); 
-    // kus nuppu all hoides tuleb sada nupuvajutusi järjest. + // Joonistab ekraanile infot 
-    // Algatuseks olgu see -1 ehk ükski nupp pole all. + lcd_gfx_goto_char_xy(0, 0); 
-    int8_t previousButton = -1;+ lcd_gfx_write_string("  ZigBee demo");
  
-    // Lõputu tsükkel moodulite andmetevahetuse näitamiseks + lcd_gfx_goto_char_xy(0, 1); 
-    while (true+ lcd_gfx_write_string("Nupp1: LED1");
-    { +
-        int8_t button; //muutuja nupuvajutuse registreerimiseks+
  
-        // Oota nuppu 1 millisekund + lcd_gfx_goto_char_xy(0, 2); 
-        button = wait_button(1);+ lcd_gfx_write_string("Nupp2: LED2");
  
-        // Kui eelmises tsüklis oli nupp üleval ja nüüd on all + // Hoia meeles eelmist nuppu selleks, et vältida olukorda, 
-        if (previousButton == -1 && button != -1) + // kus nuppu all hoides tuleb sada nupuvajutusi järjest. 
-        { + // Algatuseks olgu see -1 ehk ükski nupp pole all. 
-            // teisenda nupu indeks liites A täht + int8_t previousButton = -1;
-     // ja saada teisele moodulile +
-            // A täht on esimene nupp, B täht teine nupp jne +
-            usart_send_char(port, 'A' + button); +
-        }+
  
-        // Loe USART'st + // Lõputu tsükkel moodulite andmetevahetuse näitamiseks 
-        if (usart_has_data(port)+ while (true
-        +
-            // loe bait, teisenda leds massiivi indeksiks + int8_t button; //muutuja nupuvajutuse registreerimiseks
-     //ja muuda väljundit. +
-            pin_toggle(leds[usart_read_char(port) - 'A']); +
-        }+
  
-        // Jäta meelde mis nupp oli hetkel alla vajutatud + // Oota nuppu 1 millisekund 
-        previousButton = button; + button = wait_button(1); 
-    }+ 
 + // Kui eelmises tsüklis oli nupp üleval ja nüüd on all 
 + if (previousButton == -1 && button != -1) 
 +
 + // teisenda nupu indeks liites A täht 
 + // ja saada teisele moodulile 
 + // A täht on esimene nupp, B täht teine nupp jne 
 + usart_send_char(port, 'A' + button); 
 +
 + 
 + // Loe USART'st 
 + if (usart_has_data(port)) 
 +
 + // loe bait, teisenda leds massiivi indeksiks 
 + //ja muuda väljundit. 
 + pin_toggle(leds[usart_read_char(port) - 'A']); 
 +
 + 
 + // Jäta meelde mis nupp oli hetkel alla vajutatud 
 + previousButton = button; 
 + }
 } }
  
Line 150: Line 156:
 int8_t wait_button(uint16_t ms) int8_t wait_button(uint16_t ms)
 { {
-    // Vaikimisi -1 tähendab, et ükski nupp pole vajutatud. + // Vaikimisi -1 tähendab, et ükski nupp pole vajutatud. 
-    int8_t button_nr = -1; + int8_t button_nr = -1; 
-    uint16_t counter = 0; + uint16_t counter = 0; 
-    do + do 
-    +
-        // vaata kas mõni nupp on all + // vaata kas mõni nupp on all 
-        for (uint8_t i=0; i<3; i++) + for (uint8_t i=0; i<3; i++) 
-        +
-            if (!pin_get_value(buttons[i])) + if (!pin_get_value(buttons[i])) 
-            +
-                button_nr = i; + button_nr = i; 
-                break; + break; 
-            +
-        }+ }
  
-        // oota 1 millisekund + // oota 1 millisekund 
-        hw_delay_ms(1); + hw_delay_ms(1);
- +
-        // suurenda millisekundi loendurit +
-        counter++; +
-    } while (button_nr == -1 && (counter < ms)); +
- +
-    return button_nr; +
-+
-</code> +
- +
- +
-==== TH Suvekool ==== +
- +
-<code c> +
-#include <homelab/usart.h> +
-#include <homelab/delay.h> +
-#include <homelab/pin.h> +
-  +
-//Lisame ZigBee mooduli toe +
-#include <homelab/module/zigbee.h> +
-  +
-// USART liidese määramine ZigBee jaoks +
-usart port = USART(1); +
-  +
-// LEDid ja nupud määrata +
-pin leds[3] = { PIN(C, 5), PIN(C, 4), PIN(C, 3) }; +
-pin buttons[3] = { PIN(C, 2), PIN(C, 1), PIN(C, 0) }; +
-  +
-// Teiste leitavate zigbee moodulite aadresside massiiv +
-zigbee_node_t nodelist[6]; // 1 + broadcast aadress + varu(1) +
-  +
-  +
-int main(void) +
-+
-     int8_t button = -1; //muutuja nupuvajutuse registreerimiseks +
-  +
-    // seadista LEDide ja nuppude I/O pordid +
-    for (int i=0; i<3; i++) +
-    { +
-        pin_setup_output(leds[i]); +
-        pin_setup_input(buttons[i]); +
-    } +
-  +
-    // USART liidese seadistamine ZigBee side jaoks +
-    usart_init_async(port, +
-                     USART_DATABITS_8, +
-                     USART_STOPBITS_ONE, +
-                     USART_PARITY_NONE, +
-                     USART_BAUDRATE_ASYNC(9600)); +
-  +
-  +
-    // Otsib ümbrusest teisiZigBee mooduleid +
-    // täidab nodelist massiivi leitud moodulite aadressidega +
-    pin_set(leds[0]);     +
  
-    zigbee_find_nodes(port, nodelist, 6); //millist USART-it kasutab, kuhu salvestab aadressid, mitu mahub võrku + // suurenda millisekundi loendurit 
-    // võtab aega + counter++
-    pin_set(leds[1])+ } 
-    // Seadista ZigBee saatma infot valitud ZigBee nodele, + while (button_nr == -1 && (counter < ms));
-    // (mis porti kasutab, kust võtab adr) +
-    zigbee_set_destination(port, &nodelist[0]); //esimesega ühenda +
-    //zigbee_set_destination(port, 0xFFFFFFFFFFFFFFFFFF); //esimesega ühenda+
  
- //Kustuta LED-id -> ühendus olemas + return button_nr;
- pin_set(leds[2]); +
-  +
-    // Lõputu tsükkel moodulite andmetevahetuse näitamiseks +
-    while (true) +
-    { +
- // vaata kas mõni nupp on alla vajutatud +
-        for (uint8_t i=0; i<3; i++) if (!pin_get_value(buttons[i])) button = i; +
-  +
-        // kui nuppu on vajutatud +
-        if (button != -1) +
-        { +
-////////////////////   SISU  //////////////////////// +
-        } +
-    }+
 } }
 </code> </code>
  
et/examples/communication/zigbee.1333638434.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0