boolean UpdateADPins(void)
{

    //puts("Trying to update AD pins");
    short currentCountsToHighValue=ADS12_ReadADPin(0);
    short currentOffsetValue=ADS12_ReadADPin(1);

    if((currentCountsToHighValue-lastCountsToHighValue>PROP_THRESHOLD)||(lastCountsToHighValue-currentCountsToHighValue>PROP_THRESHOLD))
    {
        COUNTS_TO_HIGH=(char)(currentCountsToHighValue/10-50);
        lastCountsToHighValue=currentCountsToHighValue;
        printf("CTH:%d\n\r",COUNTS_TO_HIGH);
    }
    if((currentOffsetValue-lastOffsetValue>OFFSET_THRESHOLD)||(lastOffsetValue-currentOffsetValue>OFFSET_THRESHOLD))
    {
        HOPPER_OFFSET=(signed char)(currentOffsetValue/10-50);
        lastOffsetValue=currentOffsetValue;
        printf("HOF:%d\n\r",HOPPER_OFFSET);
    }



    return False;
}
Exemple #2
0
unsigned int getTapeVal(unsigned char pin)
{
//only works because tape0 is pin0, tape1 is pin1, tape2 is pin2
   
   return ADS12_ReadADPin(pin);
}
Exemple #3
0
void printTapeVals(void)
{
   printf("%*d %*d %*d\r", 5,(int) ADS12_ReadADPin(0),5, (int) ADS12_ReadADPin(1),5, (int) ADS12_ReadADPin(2));
}
Exemple #4
0
uchar Check4Drum(void)
{
   static uchar timePerDrumCheck=50;
   long currTime=ES_Timer_GetTime();
   static uchar state =0; //0 is noiseDataCollection, 1 is Drumming
   static int numPts=0;
   static uchar lastRevState;
   static uchar currRevState;
   static uint drum[2];
   static uint hits[2];
   static int i;
   static uchar recording=0;
   static uchar hitInc=0;
   if(! (currTime-lastDrumTime > timePerDrumCheck || currTime<lastDrumTime) )
      return 0; //exit immediately if not enough time has passed
      
   drum[LEFT]=(int) ADS12_ReadADPin(drumLPin);
   drum[RIGHT]=(int) ADS12_ReadADPin(drumRPin); 
   
   if(state==0) 
   {
      if(!recording) 
      {
         if(numPts>=NUM_IN_A_ROW)
         {
            recording=1;
            numPts=0;
            bg[0]=0;
            bg[1]=0;
         } 
         
         if(absDiff(drum[LEFT],bg[LEFT]) > 10 || absDiff(drum[RIGHT],bg[RIGHT]) > 10 || bg[LEFT]<300 || bg[RIGHT] < 300)
         {
            printf("discard %i %i\r\n",bg[LEFT],bg[RIGHT]);
            bg[LEFT]=drum[LEFT]; 
            bg[RIGHT]=drum[RIGHT];
             
         }
         else
         {
            numPts++; //uncommented below
         }
      } 
      if(recording)   //recording
      {
         bg[0]+=drum[0];
         bg[1]+=drum[1];
         bgSaves[numPts]=drum[LEFT]; //11 to 30 ->0 to 19
         bgSaves[numPts+NUM_SAMPLES]=drum[RIGHT]; //11 to 30 -> 20 -> 39
         printf("pts: %lu, %lu\r\n", bg[0], bg[1]);
         numPts++;
      }
      //numPts++;
      
      
      //------------CalcBGNoise----------------------
      
      if(numPts>=NUM_SAMPLES)//actually 20 points here because we ignore first 10 (see above) (2.5 seconds total because thsi is 20Hz function)
      {
         bg[LEFT]/=numPts; //calculate background noise
         bg[RIGHT]/=numPts; 
         printf("bg is: %lu, %lu\r\n",bg[LEFT],bg[RIGHT]);
         state=1;
         timePerDrumCheck=5;
         hits[LEFT]=0;
         hits[RIGHT]=0;
         lastRevState=revDown();
         bgDone=1;
      }
   }
      //-----------CalcBGNoiseComplete--------------
   
      //-------ReadAnalogDrumHit-------------
   
      else if(state==1)
      {
         currRevState=revDown();
         for(i=0;i<2;i++) //Check if we have any good analog readings
         {
            if(currRevState!=lastRevState)
            {
               currHit[i]=0; //change direction, immediately set currHit to 0 so it wont trigger.
            }
            //if(absDiff(drum[i],bg[i]) > NOISE_THRESHOLD) //noise thresholding
            if(absDiff(drum[i],600) > NOISE_THRESHOLD) //noise thresholding HARDCODE
            {
              
              //printf("%i-%i\r\n",i,drum[i]);
              if(!hitInc)
              {
               hitInc=1;
               classifyStartTime=currTime; //starting classification
              }
              hits[i]++;
            }
         }
      //-------ReadAnalogDrumHitComplete-----
      
      //----Classify hit---    
         if( ((currTime>classifyStartTime + CLASSIFY_TIME)||classifyStartTime>currTime) && hitInc) //timer expired
         {
             hitInc=0; //end classify period
             if(hits[0]>=MIN_HITS_PER_CLASSIFY || hits[1] >= MIN_HITS_PER_CLASSIFY) 
             {    //begin classifying
                printf("class ify %i,%i",hits[LEFT],hits[RIGHT]);
                if(hits[LEFT] > hits[RIGHT]) //if there are more lefts than rights, good we know what this is.
                {
                   registerHit(LEFT,currTime);
                   if(hits[RIGHT] > hits[LEFT]/2) //probably hit both at once
                   {
                      registerHit(RIGHT,currTime);
                   }
                   
                } 
                else
                {
                   registerHit(RIGHT,currTime);
                   if(hits[LEFT] > hits[RIGHT]/2) //probably hit both at once
                   {
                      registerHit(LEFT,currTime);
                   } 
                }
             }
             
             hits[LEFT]=0;
             hits[RIGHT]=0;
         }
       //----Classify Hit END---
      }
   lastRevState=currRevState; 
   lastDrumTime=currTime;
   return 0;
}
/***********************************************************************
Function
    int GetTapeValue(char sensor)
    
Description
    Returns the value of the requested tape sensor(0-1023)
 
***********************************************************************/
int GetTapeValue(char sensor)
{		

	 return ADS12_ReadADPin(sensor);

}