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

Compare with Current View Page History

« Previous Version 16 Next »

Lähetyskoodi oma tekemä :
#include "bsp.h"
#include "mrfi.h"
#include "nwk_types.h"
#include "nwk_api.h"
#include "bsp_leds.h"
#include "bsp_buttons.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[0] = 1;  // vastaan otin lukee sen vihreena ledina
  while (1)
  {
   NWK_DELAY(100); // 100ms delay
    msg[1] = ++viestiLaskuri; // viestin toiseen alkioon viestien maara
    SMPL_Send(sLinkID1, 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 == sLinkID1)
  {
    
     if ((SMPL_SUCCESS == SMPL_Receive(sLinkID1, msg, &len))) //
     {
    
    BSP_TOGGLE_LED2(); // jos viestin vastaan otto onnistunut niin punanen ledi paalle
     
       return 1;
     }
  }
  
  return 0;
}
Vastaanotto:
#include "bsp.h"
#include "mrfi.h"
#include "nwk_types.h"
#include "nwk_api.h"
#include "bsp_leds.h"
#include "bsp_buttons.h"

static void linkFrom(void);

void toggleLED(uint8_t);

static          uint8_t  viestiLaskuri = 0;
static          linkID_t sLinkID2 = 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];

 /* listen for link forever... */
 while (1)
   {
    BSP_TOGGLE_LED2();
 if (SMPL_SUCCESS == SMPL_LinkListen(&sLinkID2)) // kuuntelee niin kauan kunnes linkki on valmis
 {
 break;
 }
    }



   // radion käynnistys
   SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // valitaan "radiocontrol ja action"
   
   msg[0] = 2;

   while (1)
   {
 if (viestiVastaanotettu)
 {
 msg[1] = ++viestiLaskuri; // laitaan viestilaskuri +1 viestin ensimmäiseen alkioon
 SMPL_Send(sLinkID2, msg, sizeof(msg)); // lähetetään viesti
 viestiVastaanotettu = 0;
 }
 }
}

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

  // tarkisetaan vastaan otetavan viestin ID
 if (port == sLinkID2)
 {
 if (SMPL_SUCCESS == SMPL_Receive(sLinkID2, msg, &len)) // jos viestin vastaanotto onnistunut niin vihreä ledi päälle
 {
 BSP_TOGGLE_LED1();
 viestiVastaanotettu = 1;
 return 1;
 }
 }
  return 0;
}

AD-luku ja lähetys
#include "bsp.h"
#include "mrfi.h"
#include "nwk_types.h"
#include "nwk_api.h"
#include "bsp_leds.h"
#include "bsp_buttons.h"


void toggleLED(uint8_t);


static void linkTo(void);


static uint8_t viestiLaskuri=0;
static linkID_t sLinkID1 = 0;


static uint8_t sRxCallback(linkID_t);
void initIO();
int analogitulo();
int viestiVastaanotettu=1;
void main(void)


{


initIO(); // IO alustus
BSP_Init(); // laudan alustus
SMPL_Init(sRxCallback); // radion alustus


BSP_TOGGLE_LED2(); // punanen ledi päälle


do {
if (BSP_BUTTON1()) // odotetaan että nappia painetaan
{ break; }

} while (1);


linkTo(); // linkin muodostaminen


while (1) ;



}


static void linkTo()
{


uint16_t adc_msg;
uint8_t adc1;
uint8_t adc2;
//uint8_t adc3;
while (SMPL_SUCCESS != SMPL_Link(&sLinkID1)) // ledit vilkkuu kunnes linkki on onnistunut
{
BSP_TOGGLE_LED1();
BSP_TOGGLE_LED2();
NWK_DELAY(50); // ledit vilkkuu 50ms välein
}


// kun linkki onnistunut laitetaan vihreä ledi päälle
BSP_TOGGLE_LED1();


// radion käynnistys
SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0);
// laitetaan viestin ensimmäiseen alkioon arvo 1
while (1)
{
uint8_t msg[3];
NWK_DELAY(100); // 100ms delay
adc_msg = analogitulo(); // luetaan saatu jännitteen tieto muuttujaan

// adc_msg on 16bit ja lähetetty viesti voi olla vain 8bit, joten jaetaan adc_msg kahteen 8bit muuttujaan
adc1 = adc_msg>>8;
adc2 = adc_msg&255;

msg[0]=adc1; // viestin ensimmäiseen alkioon eniten merkitsevät bitit
msg[1]=adc2; // toiseen vähiten merkitsevät
msg[2]=viestiLaskuri; // tieto viestien määrästä

SMPL_Send(sLinkID1, msg, sizeof(msg)); // lähetetään viesti
viestiVastaanotettu = 0;

}
}
static uint8_t sRxCallback(linkID_t port) // viestin takaisin vastaanotto
{
uint8_t msg2, len;


// tarkisetaan vastaan otetavan viestin ID
if (port == sLinkID1)
{


if ((SMPL_SUCCESS == SMPL_Receive(sLinkID1, msg, &len))) // jos viestin vastaanotto onnistunut punanen ledi päälle
{
viestiVastaanotettu = 1;
viestiLaskuri++;
BSP_TOGGLE_LED2();
return 1;
}

}


return 0;
}
void initIO()
{
WDTCTL = WDTPW+WDTHOLD; // sammuta watchdog timer


P2SEL |= BIT2; // avaa portin 2 bitti 3


// ref moduulin alustus
// Mahdollista 2.5V jaettu referenssi, poista lämpöanturi käytöstä virran säästämiseksi
REFCTL0 |= REFMSTR+REFVSEL_2+REFON+REFTCOFF;


// alusta ADC12
ADC12CTL0 = ADC12ON+ADC12SHT02; // käynnistä ADC12 ja aseta näytteenoton aika
ADC12CTL1 = ADC12SHP; // käytä näytteenoton timeriä
ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_2; // Vr+=Vref+ and Vr-=AVss ADC12 Input Channel 2 ADC12 Select Reference 1


__delay_cycles(75); // 75 us delay @ ~1MHz


ADC12CTL0 |= ADC12ENC; // ottaa käyttöön muunnoksen
}


int analogitulo()
{
uint16_t adc_arvo=0;
ADC12CTL0 |= ADC12SC; // aloita muunnos
while (!(ADC12IFG & BIT0));
//__no_operation(); // aseta breakpoint tähän
adc_arvo = ADC12MEM0; // AD muunnos tallettuu ADC muisti paikkaan ADC12MEM0
return adc_arvo; // palautetaan arvo adc_arvo
}
  • No labels
You must log in to comment.