#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();
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
//msg0 = 1; // vastaan otin lukee sen vihreenä ledinä
while (1)
{
//if (viestiVastaanotettu)
//
{ uint8_t msg[3]; NWK_DELAY(100); //msg[1] = ++viestiLaskuri; // viestin toiseen alkioon viestien määrä adc_msg = analogitulo(); adc1 = adc_msg>>8; //adc1 = adc1>>8; adc2 = adc_msg&255; //adc3 = adc2; msg[0]=adc1; msg[1]=adc2; msg[2]=viestiLaskuri; //msg[2] = adc_msg; //msg[3] = adc_msg>>8; 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)))
{ viestiVastaanotettu = 1; viestiLaskuri++; BSP_TOGGLE_LED2(); // jos viestin vastaan otto onnistunut niin punanen ledi päälle return 1; }
}
return 0;
}
void initIO()
{
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
P2SEL |= BIT2; // Enable A/D channel A0
/* Initialize REF module */
// Enable 2.5V shared reference, disable temperature sensor to save power
REFCTL0 |= REFMSTR+REFVSEL_2+REFON+REFTCOFF;
/* Initialize ADC12 */
ADC12CTL0 = ADC12ON+ADC12SHT02; // Turn on ADC12, set sampling time
ADC12CTL1 = ADC12SHP; // Use sampling timer
ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_2; // Vr+=Vref+ and Vr-=AVss
__delay_cycles(75); // 75 us delay @ ~1MHz
ADC12CTL0 |= ADC12ENC; // Enable conversions
}
int analogitulo()
{
uint16_t adc_arvo=0;
ADC12CTL0 |= ADC12SC; // Start conversion-software trigger
while (!(ADC12IFG & BIT0));
//__no_operation(); // SET BREAKPOINT HERE
adc_arvo = ADC12MEM0;
return adc_arvo;
}
|