...
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(); 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) { uint8_t msg[3]; NWK_DELAY(100); adc_msg = analogitulo(); adc1 = adc_msg>>8; adc2 = adc_msg&255; msg[0]=adc1; msg[1]=adc2; msg[2]=viestiLaskuri; 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; } |