Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin
Lähetyskoodi

...

:
Code Block
#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 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	do
	{
   		if (BSP_BUTTON1()) // odotetaan etta nappia painetaan
      {
      break;
    }
  		{
			break;
   		}
  	} while (1);

     linkTo(); // linkin muodostaminen
      
   whilewhile (1) ;
   

}

static void linkTo() // linkin muodostaminen
{
  uint8  	uint8_t  msg msg[2];//, delay =0;

  while  	while (SMPL_SUCCESS != SMPL_Link(&sLinkID1)) // odotetaan että linkki on muodostettu
    	{
       	 	// ledit vilkkuu kunnes linkki on onnistunut
      		BSP_TOGGLE_LED1(); 
    BSP    		BSP_TOGGLE_LED2(); 
    NWK    		NWK_DELAY(50); // ledit vilkkuu 50ms valein
    	}

   	// kun linkki onnistunut laitetaan vihrea ledi paalle
   	BSP_TOGGLE_LED1();

    	// radion kaynnistys
  SMPL  	SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // valitaan radiocontrol ja action

    	// laitetaan viestin ensimmaiseen alkioon arvo 1
  msg  	msg[0] = 1;   // vastaan otin lukee sen vihreena ledina
  while  	while (1)
    	{
     		NWK_DELAY(100); // 100ms delay
     		msg[1] = ++viestiLaskuri; // viestin toiseen alkioon viestien maara
    SMPL    		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  	if (port == sLinkID1)
   	{
     
     		if ((SMPL_SUCCESS == SMPL_Receive(sLinkID1, msg, &len))) //
       		{
      
    BSP 			BSP_TOGGLE_LED2(); // jos viestin vastaan otto onnistunut niin punanen ledi paalle
      
       			return 1;
        		}
    	}
  
  return   	return 0;
}
Vastaanotto:
Code Block
#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               uint8uint8_t  viestiLaskuri viestiLaskuri = 0;
static               linkIDlinkID_t sLinkID2 = 0;
static volatile uint8_t   viestiVastaanotettuviestiVastaanotettu = 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  	return 0;
}

AD-luku ja lähetys
Code Block
#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
}