maulik_suthar
Junior Member level 1
i have this code built as i am not much used to programming with ADC's so plz suggest changes in code required. i want to get led glowing for 3 seconds wen it detects motion then should go off.
Use CODE Or SYNTAX Tags When Posting Your Code
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #include <msp430g2131.h> #define LED_OUT BIT6 // Bit location for LED #define THRESHOLD 10 // Threshold for motion static unsigned int result_old = 0; // Storage for last conversion void main(void) { WDTCTL = WDTPW+WDTHOLD; ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled, Sample Timer = /16 ADC10CTL1 = INCH_1; // select A1 for sampling P1DIR |= BIT6; // set LED to OUT P1IES &= BIT1; // high-low edge initially P1IFG &= ~BIT1; // prevent immediate interrupt P1IE |= BIT1; // enable interrupts on P1.1 _BIS_SR(LPM4_bits + GIE); // enable GPIO interrupts and send into LPM4 } // interrupt for P1 #pragma vector = PORT1_VECTOR __interrupt void P1_ISR() { unsigned int result_new; ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start __bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit result_new = ADC10MEM; if (result_new > result_old) // Get difference between samples result_old = result_new - result_old; else result_old = result_old - result_new; if (result_old > THRESHOLD) // If motion detected... P1OUT |= BIT6; // Turn LED on result_old = ADC10MEM; // Save last conversion } // ADC10 interrupt service routine #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) { __bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR) }
Use CODE Or SYNTAX Tags When Posting Your Code
Last edited by a moderator: