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" void toggleLED(uint8_t); 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 p‰‰llepaalle do { do { if if (BSP_BUTTON1()) // odotetaan ett‰etta nappia painetaan { break; } break; } } while (1); linkTo(); // linkin muodostaminen while while (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 v‰leinvalein } // kun linkki onnistunut laitetaan vihre‰vihrea ledi p‰‰llepaalle BSP_TOGGLE_LED1(); // radion k‰ynnistys SMPLkaynnistys SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_RXON, 0); // valitaan radiocontrol ja action // laitetaan viestin ensimm‰iseenensimmaiseen alkioon arvo 1 msg msg[0] = 1; // vastaan otin lukee sen vihreen‰vihreena ledin‰ whileledina while (1) { NWK_DELAY(100); // 100ms delay msg[1] = ++viestiLaskuri; // viestin toiseen alkioon viestien m‰‰r‰maara SMPL SMPL_Send(sLinkID1, msg, sizeof(msg)); // l‰hetet‰‰nlahetetaan 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 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 uint8_t viestiLaskuri = 0; static linkID_t sLinkID2 = ledi p‰‰lle return 1; } } return 0;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]; 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
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=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;
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);
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
}
|