Interrupts with analog values


okay. so, i'm kind of stuck.  i need able generate interrupt , go isr when value on analog input changes.  i have signal tied analog pin 0 which, depending on value of it, sends commands usb keyboard controller chip.  my problem way have program set now, i'm having poll analog value @ beginning of loop function.  this causes me have push , hold various buttons generate analog value program picks up.  i need program detect when value changes , start handling it.  the analog value stays @ 0~1 until button pushed.  below code have...hopefully question makes sense....

int presscount = 0;
int analogval = 0;
int val = 0;

void setup()
{
 pinmode(1, output); // output clock
 
 pinmode(2, output); // output character pins
 pinmode(3, output);
 pinmode(4, output);
 pinmode(5, output);
 pinmode(6, output);
 pinmode(7, output);
 pinmode(8, output);
 pinmode(9, output);
 
 digitalwrite(2, high); // make sure no characters sent on usb bus when program begins
 
}

void loop()
{
  val = analogread(0);
  if(val > 2 && val < 50)
  {
    delay(500);
    val = analogread(0);
    if(val > 2 &&  val < 50)
    {
      printchar(4);
      clocksingle();
    }
  }
  else
  {
    printchar(0);
    while(val > 50)
    {
       clockmult();
       val = analogread(0);
    }
    presscount = 0;
  }
}

void clockmult()
{
   digitalwrite(1,low);
   delay(.128);
   digitalwrite(1,high);
   
   if(presscount < 3)
   {
     ++presscount;
     delay(200);
   }
   else if(presscount < 10)
   {
     ++presscount;
     delay(100);
   }
   else
   {
     delay(.128);
   }
}

void clocksingle()
{
 digitalwrite(1,low);
 delay(.128);
 digitalwrite(1,high);
 delay(500);
}

void printchar(int x)
{
 if(x == 0) // down
 {
   digitalwrite(2, high);
   digitalwrite(3, low);
   digitalwrite(4, low);
   digitalwrite(5, high);
   digitalwrite(6, high);
   digitalwrite(7, low);
   digitalwrite(8, low);
   digitalwrite(9, low);
 }
 else if(x == 1) // up
 {
   digitalwrite(2, low);
   digitalwrite(3, low);
   digitalwrite(4, low);
   digitalwrite(5, high);
   digitalwrite(6, high);
   digitalwrite(7, low);
   digitalwrite(8, low);
   digitalwrite(9, low);
 }
 else if(x == 2) // enter
 {
   digitalwrite(2, high);
   digitalwrite(3, low);
   digitalwrite(4, high);
   digitalwrite(5, high);
   digitalwrite(6, low);
   digitalwrite(7, low);
   digitalwrite(8, low);
   digitalwrite(9, low);
 }
 else if(x == 3) // esc
 {
   digitalwrite(2, low);
   digitalwrite(3, low);
   digitalwrite(4, low);
   digitalwrite(5, low);
   digitalwrite(6, low);
   digitalwrite(7, low);
   digitalwrite(8, low);
   digitalwrite(9, low);
 }
 else if(x == 4) // right
 {
   digitalwrite(2, low);
   digitalwrite(3, high);
   digitalwrite(4, low);
   digitalwrite(5, high);
   digitalwrite(6, high);
   digitalwrite(7, low);
   digitalwrite(8, low);
   digitalwrite(9, low);
 }
 else if(x == 5) // left
 {
   digitalwrite(2, high);
   digitalwrite(3, high);
   digitalwrite(4, low);
   digitalwrite(5, high);
   digitalwrite(6, high);
   digitalwrite(7, low);
   digitalwrite(8, low);
   digitalwrite(9, low);
 }
}

macdub, summarise want program should do.  describing functionality desire make easier suggest alternative implementations solve problem.

its little difficult see posted implementation sketch supposed do.


Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > Interrupts with analog values


arduino

Comments

Popular posts from this blog

CAN'T INSTALL MAMBELFISH 1.5 FROM DIRECTORY - Joomla! Forum - community, help and support

error: expected initializer before 'void'

CPU load monitoring using GPIO and leds - Raspberry Pi Forums