You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

Testasimme 4 laitteen välisen yhteyden seuraavilla koodeilla. Yhdestä laudasta teimme masterin joka sai tiedon kolmelta slave laudalta. Slave laudassa nappia painamalla masterissa syttyy vihreä ledi. Slave lautojen ohjelman ainoona erona oli osoitteen vaihtaminen smpl_config.dat tiedostosta :

--define=THIS_DEVICE_ADDRESS="{0x93, 0x56, 0x34, 0x12}"

Masterin koodi:

 #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 linkFrom(void);

void toggleLED(uint8_t);

static          uint8_t  viestiLaskuri = 0;
static volatile uint8_t  viestiVastaanotettu = 0;

static uint8_t sRxCallback(linkID_t);

void main (void)
{
    BSP_Init(); // laudan alustus
    SMPL_Init(sRxCallback); // radion ja SimpliTi alustus
    BSP_TOGGLE_LED1(); // vihreä ledi päälle
    do {
        if (BSP_BUTTON1()) // odotetaan että nappia painetaan
        {
            break;
        }
    } while (1);
    linkFrom(); // linkin muodostaminen
    while (1) ;
}

static void linkFrom()
{
    uint8_t     msg[2];

    SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // radion käynnistys
   
    msg[0] = 1;
    
    while (1)
    {
        if (viestiVastaanotettu)
        {
            msg[1] = ++viestiLaskuri;
            SMPL_Send(SMPL_LINKID_USER_UUD, msg, sizeof(msg));
            viestiVastaanotettu = 0;
        }
    }
}


static uint8_t sRxCallback(linkID_t port) // viestin takaisin vastaanotto
{
    uint8_t msg[2], len;

    if (port == SMPL_LINKID_USER_UUD) // tarkisetaan vastaan otetavan viestin ID
    {
        if (SMPL_SUCCESS == SMPL_Receive(SMPL_LINKID_USER_UUD, msg, &len))
        {
            uint16_t led=msg[0];
            if (led == 2) BSP_TOGGLE_LED2();
            
            uint16_t led1=msg[1];
            if (led1 == 1) BSP_TOGGLE_LED1();

            viestiVastaanotettu = 1;
            
            return 1;
        }
    }
  return 0;
}

Slave koodi:

 #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
 
    // laitetaan viestin ensimmaiseen alkioon arvo 1
    msg[1] = 1;  // vastaan otin lukee sen vihreena ledina
    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....
    }
    return 0;
}
  • No labels
You must log in to comment.