Society of Robots - Robot Forum
Software => Software => Topic started by: ram aravind on July 17, 2012, 10:59:21 AM
-
i need to do this:
whenever i press button ,power goes to d0 input pin and i must carry the task given in if loop:
#include <avr/io.h>
#include <avr/interrupt.h>
int main (void)
{
PORTD &= ~(1 << 0); //set port d0 as input
DDRE |= (1 << 2); // Set LED1 as output
DDRG |= (1 << 0); // Set LED2 as output
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Set ADC prescaler to 128 - 125KHz sample rate @ 16MHz
ADMUX |= (1 << REFS0); // Set ADC reference to AVCC
ADMUX |= (1 << ADLAR); // Left adjust ADC result to allow easy 8 bit reading
// No MUX values needed to be changed to use ADC0
ADCSRA |= (1 << ADFR); // Set ADC to Free-Running Mode
if(PIND==0b00000001)// D0 gets 5v when button is pressed
{
ADCSRA |= (1 << ADEN); // Enable ADC
ADCSRA |= (1 << ADIE); // Enable ADC Interrupt
sei(); // Enable Global Interrupts
ADCSRA |= (1 << ADSC); // Start A2D Conversions
}
for(;;) // Loop Forever
{
}
}
ISR(ADC_vect)
{
if(ADCH < 128)
{
PORTE |= (1 << 2); // Turn on LED1
PORTG &= ~(1 << 0); // Turn off LED2
}
else
{
PORTE &= ~(1 << 2); // Turn off LED1
PORTG |= (1 << 0); // Turn on LED2
}
}
but its showing error that ::
error - static declaration of vector_4 follows non static declaration.
plz help me in this..
-
Why don't you use a while(1) loop instead of a for loop?
-
Are you doing this in an 'h' or 'c' file?
What chip are you using?
-
if(PIND==0b00000001)// D0 gets 5v when button is pressed
{
ADCSRA |= (1 << ADEN); // Enable ADC
ADCSRA |= (1 << ADIE); // Enable ADC Interrupt
sei(); // Enable Global Interrupts
ADCSRA |= (1 << ADSC); // Start A2D Conversions
}
This needs to be in your interrupt or your infinite loop. As written, you are only polling the button as soon as the program starts.
This wont fix your current problem, but I'd hate for you to bump into another headache as soon as you solve this one.