Testasimme 4 laitteen välisen yhteyden seuraavilla koodeilla. Yhdestä laudasta teimme masterin joka sai tiedon kolmelta slave laudalta. Slave lautassa laudassa nappia painamalla masterissa syttyi punanen/syttyy vihreä ledi. Slave lautojen ohjelman ainoana erona oli osoitteen vaihtaminen smpl_config.dat tiedostosta :
--define=THIS_DEVICE_ADDRESS="{0x93, 0x56, 0x34, 0x12}"
Masterin koodi:
Code Block |
---|
#include "bsp.h" #include "mrfi.h" #include "nwk_types.h" #include "nwk_api.h" #include "bsp_leds.h" #include "bsp_buttons.h" #include "nwk.h" // jos halutaan lähettää viestiä vastaanottimelta, poistetaan tämän kommentointi// static void linkFrom(void); void toggleLED(uint8_t); static uint8_t viestiLaskuri = 0; static volatile uint8_t t viestiVastaanotettu = 0; static uint8_t sRxCallback(linkID_t); void main (void) { BSPBSP_Init(); // laudan alustus SMPLSMPL_Init(sRxCallback); // radion ja SimpliTi alustus BSPBSP_TOGGLE_LED1(); // vihreä ledi päälle dodo { if if (BSP_BUTTON1()) // odotetaan että nappia painetaan { break; } { SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // radion käynnistys break; } } while (1); linkFrom // jos halutaan lähettää viestiä vastaanottimelta, poistetaan tämän kommentointi // linkFrom(); // linkin muodostaminen whilewhile (1) ; } // jos halutaan lähettää viestiä vastaanottimelta, poistetaan tämän kommentointi /* static void linkFrom() { uint8_t uint8_t msg[21]; SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // radion käynnistys msg msg[0] = 1; while while (1) { if if (viestiVastaanotettu) { msg[1] = ++viestiLaskuri; SMPL { SMPL_Send(SMPL_LINKID_USER_UUD, msg, sizeof(msg)); viestiVastaanotettu viestiVastaanotettu = 0; } } } } */ static uint8_t sRxCallback(linkID_t port) // viestin takaisin vastaanotto { uint8uint8_t msg[2], len; ifif (port == SMPL_LINKID_USER_UUD) // tarkisetaan vastaan otetavan viestin ID { if if (SMPL_SUCCESS == SMPL_Receive(SMPL_LINKID_USER_UUD, msg, &len)) { uint16 { uint16_t led=msg[0]; if if (led == 2) BSP_TOGGLE_LED2(); uint16 uint16_t led1=msg[1]; if if (led1 == 1) BSP_TOGGLE_LED1(); viestiVastaanotettu // jos halutaan lähettää viestiä vastaanottimelta, poistetaan tämän kommentointi // viestiVastaanotettu = 1; return return 1; } } } } return 0; } |
Slave koodi:
Code Block |
---|
#include "bsp.h" #include "mrfi.h" #include "nwk_types.h" #include "nwk_api.h" #include "bsp_leds.h" #include "bsp_buttons.h" #include "nwk.h" static void linkTo(void); static uint8_t viestiLaskuri=0; static linkID_t sLinkID1 = 0; static uint8_t sRxCallback(linkID_t); void main(void) // Pääohjelma alkaa tästä { BSP_Init(); // laudan alustus SMPL_Init(sRxCallback); // radion alustus BSP_TOGGLE_LED2(); // punanen ledi paalle do { if (BSP_BUTTON1()) // odotetaan etta nappia painetaan { break; } } while (1); linkTo(); // linkin muodostaminen while (1) ; } static void linkTo() // linkin muodostaminen { uint8_t msg[2];//, delay =0; /* while (SMPL_SUCCESS != SMPL_Link(&sLinkID1)) // odotetaan että linkki on muodostettu { // ledit vilkkuu kunnes linkki on onnistunut BSP_TOGGLE_LED1(); BSP_TOGGLE_LED2(); NWK_DELAY(50); // ledit vilkkuu 50ms valein } */ // kun linkki onnistunut laitetaan vihrea ledi paalle BSP_TOGGLE_LED1(); // radion kaynnistys SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // valitaan radiocontrol ja action // valitaan kumpi laitetaanviesti viestinlähetetään ensimmaiseentakaisin alkioonja arvokommentoidaan 1toinen msg[1] = 1; // vastaan otin lukee sen vihreena ledinaledinä msg[2] = 2; // vastaan otin lukee sen punasena ledinä while (1) { if(BSP_BUTTON1()) { NWK_DELAY(100); // 100ms delay //msg[1] = ++viestiLaskuri; // viestin toiseen alkioon viestien maara SMPL_Send(SMPL_LINKID_USER_UUD, msg, sizeof(msg)); // lahetetaan viesti } } } static uint8_t sRxCallback(linkID_t port) // viestin takaisin vastaanotto { uint8_t msg[2], len; // tarkisetaan vastaan otetavan viestin ID if (port == SMPL_LINKID_USER_UUD) { // tänne voi laittaan viestin vastaanottamisen.vastaanotto... } return 0; } |