Thread: Unwanted delay in output

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User
    Join Date
    Dec 2010
    Location
    Iceland
    Posts
    9

    Unwanted delay in output

    I'm building a project with Arduino duemilanove and sparkfun usb host shield. I'm basicly driving two stepper motors with a wireless keyboard. I've got the code working except for one thing, it seems like there's a delay between output repeats when a button is pressed so there are unwanted pauses in the motor spin. I was wondering if anyone here can help me smooth out the spin of the motors. I'm not an advanced programmer so there might be unnecessary effort in the code.

    The code below:

    Code:
    /* Lokaverkefni */
    
    /* Kóðabankar innfelldir */
    #include <Spi.h> //Kóðabanki fyrir Serial Peripheral Interface
    #include <Max3421e.h> //Kóðabanki fyrir kubbinn á USB Host Shield
    #include <Usb.h> //Kóðabanki fyrir Universal Serial Bus
    
    /* Útgangspinnar skrefmótora skilgreindir */
    int motorPin1 = 3;
    int motorPin2 = 4;
    int motorPin3 = 5;
    int motorPin4 = 6;
    int motorPin5 = 14;
    int motorPin6 = 15;
    int motorPin7 = 16;
    int motorPin8 = 17;
    
    int Delay = 20; //Seinkun í millisekúndum
    
    /*Takkar á lyklaborði skilgreindir*/
    #define buttonUp (0x52)
    #define buttonDown (0x51)
    #define buttonLeft (0x50)
    #define buttonRight (0x4f)
     
    /* keyboard data taken from configuration descriptor */
    #define KBD_ADDR  1
    #define KBD_EP    1
    #define EP_MAXPKTSIZE  8
    #define EP_POLL        0x0a
    /**/
    EP_RECORD ep_record[ 2 ];  //endpoint record structure for the keyboard
     
    void setup();
    void loop();
     
    MAX3421E Max;
    USB Usb;
     
    void setup()
    {
        Serial.begin( 9600 );
        Serial.println("Start");
        Max.powerOn();
        delay( 200 );
        
        /*Pinnar skilgreindir sem útgangar*/
        pinMode( motorPin1, OUTPUT);
        pinMode( motorPin2, OUTPUT);
        pinMode( motorPin3, OUTPUT);
        pinMode( motorPin4, OUTPUT);
        pinMode( motorPin5, OUTPUT);
        pinMode( motorPin6, OUTPUT);
        pinMode( motorPin7, OUTPUT);
        pinMode( motorPin8, OUTPUT);
    }
     
    void loop()
    {
        Max.Task();
        Usb.Task();
        if( Usb.getUsbTaskState() == USB_STATE_CONFIGURING ) {  //wait for addressing state
            kbd_init();
            Usb.setUsbTaskState( USB_STATE_RUNNING );
        }
        if( Usb.getUsbTaskState() == USB_STATE_RUNNING ) {  //poll the keyboard
            kbd_poll();
        }
    }
    /* Initialize keyboard */
    void kbd_init( void )
    {
      byte rcode = 0;  //return code
    /**/
        /* Initialize data structures */
        ep_record[ 0 ] = *( Usb.getDevTableEntry( 0,0 ));  //copy endpoint 0 parameters
        ep_record[ 1 ].MaxPktSize = EP_MAXPKTSIZE;
        ep_record[ 1 ].Interval  = EP_POLL;
        ep_record[ 1 ].sndToggle = bmSNDTOG0;
        ep_record[ 1 ].rcvToggle = bmRCVTOG0;
        Usb.setDevTableEntry( 1, ep_record );              //plug kbd.endpoint parameters to devtable
        /* Configure device */
        rcode = Usb.setConf( KBD_ADDR, 0, 1 );
        if( rcode ) {
            Serial.print("Error attempting to configure keyboard. Return code :");
            Serial.println( rcode, HEX );
            while(1);  //stop
        }
        /* Set boot protocol */
        rcode = Usb.setProto( KBD_ADDR, 0, 0, 0 );
        if( rcode ) {
            Serial.print("Error attempting to configure boot protocol. Return code :");
            Serial.println( rcode, HEX );
            while( 1 );  //stop
        }
        
        delay(2000);
        Serial.println("Lyklabord virkt");
    }
    /* Poll lyklaborð og virkjar útgangspinna með eftirfarandi skilyrðum */
    void kbd_poll( void )
    {
      char i, j;
      char buf[ 8 ] = { 0 };      //keyboard buffer
      static char old_buf[ 8 ] = { 0 };  //last poll
      byte rcode = 0;     //return code
        /* poll keyboard */
        rcode = Usb.inTransfer( KBD_ADDR, KBD_EP, 8, buf );
        if( rcode != 0 ) {
            return;
        }
        for( i = 0; i < 8; i++ ) {
            if( buf[ i ] != old_buf[ i ] ) {
                for( j = 0; j < 8; j++ ) {
                  do {
                switch( buf[ j ] ) {
                case buttonUp:
              digitalWrite(motorPin1, HIGH);
              digitalWrite(motorPin5, HIGH);
              digitalWrite(motorPin2, HIGH);
              digitalWrite(motorPin6, HIGH);
              digitalWrite(motorPin3, LOW);
              digitalWrite(motorPin7, LOW);
              digitalWrite(motorPin4, LOW);
              digitalWrite(motorPin8, LOW);
              delay(Delay);
              digitalWrite(motorPin1, LOW);
              digitalWrite(motorPin5, LOW);
              digitalWrite(motorPin2, HIGH);
              digitalWrite(motorPin6, HIGH);
              digitalWrite(motorPin3, HIGH);
              digitalWrite(motorPin7, HIGH);
              digitalWrite(motorPin4, LOW);
              digitalWrite(motorPin8, LOW);
              delay(Delay);       
              digitalWrite(motorPin1, LOW);
              digitalWrite(motorPin5, LOW);
              digitalWrite(motorPin2, LOW);
              digitalWrite(motorPin6, LOW);
              digitalWrite(motorPin3, HIGH);
              digitalWrite(motorPin7, HIGH);
              digitalWrite(motorPin4, HIGH);
              digitalWrite(motorPin8, HIGH);
              delay(Delay);
              digitalWrite(motorPin1, HIGH);
              digitalWrite(motorPin5, HIGH);
              digitalWrite(motorPin2, LOW);
              digitalWrite(motorPin6, LOW);
              digitalWrite(motorPin3, LOW);
              digitalWrite(motorPin7, LOW);
              digitalWrite(motorPin4, HIGH);
              digitalWrite(motorPin8, HIGH);
              delay(Delay);
             break;
                }
                  }
                  while( buttonUp == HIGH );              
                  do {
                switch( buf[ j ] ) {              
                case buttonDown:
              delay(Delay);
              digitalWrite(motorPin1, HIGH);
              digitalWrite(motorPin5, HIGH);
              digitalWrite(motorPin2, LOW);
              digitalWrite(motorPin6, LOW);
              digitalWrite(motorPin3, LOW);
              digitalWrite(motorPin7, LOW);
              digitalWrite(motorPin4, HIGH);
              digitalWrite(motorPin8, HIGH);
              delay(Delay);
              digitalWrite(motorPin1, LOW);
              digitalWrite(motorPin5, LOW);
              digitalWrite(motorPin2, LOW);
              digitalWrite(motorPin6, LOW);
              digitalWrite(motorPin3, HIGH);
              digitalWrite(motorPin7, HIGH);
              digitalWrite(motorPin4, HIGH);
              digitalWrite(motorPin8, HIGH);
              delay(Delay);
              digitalWrite(motorPin1, LOW);
              digitalWrite(motorPin5, LOW);
              digitalWrite(motorPin2, HIGH);
              digitalWrite(motorPin6, HIGH);
              digitalWrite(motorPin3, HIGH);
              digitalWrite(motorPin7, HIGH);
              digitalWrite(motorPin4, LOW);
              digitalWrite(motorPin8, LOW);
              delay(Delay);
              digitalWrite(motorPin1, HIGH);
              digitalWrite(motorPin5, HIGH);
              digitalWrite(motorPin2, HIGH);
              digitalWrite(motorPin6, HIGH);
              digitalWrite(motorPin3, LOW);
              digitalWrite(motorPin7, LOW);
              digitalWrite(motorPin4, LOW);
              digitalWrite(motorPin8, LOW);          
             break;
                }
                  }
                  while( buttonDown == HIGH );              
                  do {
                switch( buf[ j ] ) {              
                case buttonLeft:
              delay(Delay);
              digitalWrite(motorPin1, HIGH);
              digitalWrite(motorPin5, HIGH);
              digitalWrite(motorPin2, HIGH);
              digitalWrite(motorPin6, LOW);
              digitalWrite(motorPin3, LOW);
              digitalWrite(motorPin7, LOW);
              digitalWrite(motorPin4, LOW);
              digitalWrite(motorPin8, HIGH);
              delay(Delay);
              digitalWrite(motorPin1, LOW);
              digitalWrite(motorPin5, LOW);
              digitalWrite(motorPin2, HIGH);
              digitalWrite(motorPin6, LOW);
              digitalWrite(motorPin3, HIGH);
              digitalWrite(motorPin7, HIGH);
              digitalWrite(motorPin4, LOW);
              digitalWrite(motorPin8, HIGH);
              delay(Delay);
              digitalWrite(motorPin1, LOW);
              digitalWrite(motorPin5, LOW);
              digitalWrite(motorPin2, LOW);
              digitalWrite(motorPin6, HIGH);
              digitalWrite(motorPin3, HIGH);
              digitalWrite(motorPin7, HIGH);
              digitalWrite(motorPin4, HIGH);
              digitalWrite(motorPin8, LOW);
              delay(Delay);
              digitalWrite(motorPin1, HIGH);
              digitalWrite(motorPin5, HIGH);
              digitalWrite(motorPin2, LOW);
              digitalWrite(motorPin6, HIGH);
              digitalWrite(motorPin3, LOW);
              digitalWrite(motorPin7, LOW);
              digitalWrite(motorPin4, HIGH);
              digitalWrite(motorPin8, LOW);
             break;
                }
                  }
                  while( buttonLeft == HIGH );              
                  do {
                switch( buf[ j ] ) {              
                case buttonRight:
              delay(Delay);
              digitalWrite(motorPin1, HIGH);
              digitalWrite(motorPin5, HIGH);
              digitalWrite(motorPin2, LOW);
              digitalWrite(motorPin6, HIGH);
              digitalWrite(motorPin3, LOW);
              digitalWrite(motorPin7, LOW);
              digitalWrite(motorPin4, HIGH);
              digitalWrite(motorPin8, LOW);
              delay(Delay);
              digitalWrite(motorPin1, LOW);
              digitalWrite(motorPin5, LOW);
              digitalWrite(motorPin2, LOW);
              digitalWrite(motorPin6, HIGH);
              digitalWrite(motorPin3, HIGH);
              digitalWrite(motorPin7, HIGH);
              digitalWrite(motorPin4, HIGH);
              digitalWrite(motorPin8, LOW);
              delay(Delay);
              digitalWrite(motorPin1, LOW);
              digitalWrite(motorPin5, LOW);
              digitalWrite(motorPin2, HIGH);
              digitalWrite(motorPin6, LOW);
              digitalWrite(motorPin3, HIGH);
              digitalWrite(motorPin7, HIGH);
              digitalWrite(motorPin4, LOW);
              digitalWrite(motorPin8, HIGH);
              delay(Delay);
              digitalWrite(motorPin1, HIGH);
              digitalWrite(motorPin5, HIGH);
              digitalWrite(motorPin2, HIGH);
              digitalWrite(motorPin6, LOW);
              digitalWrite(motorPin3, LOW);
              digitalWrite(motorPin7, LOW);
              digitalWrite(motorPin4, LOW);
              digitalWrite(motorPin8, HIGH);          
             break;
                }
                  }
         while( buttonRight == HIGH );
         
                }                       
                    old_buf[ j ] = buf[ j ];
                }
            }    
        }
    Last edited by NightHawk; 12-05-2010 at 09:14 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Help for my output array
    By qwertysingh in forum C Programming
    Replies: 1
    Last Post: 02-17-2009, 03:08 PM
  2. execl()/fork() output
    By tadams in forum C Programming
    Replies: 19
    Last Post: 02-04-2009, 03:29 PM
  3. Bitwise Unwanted Output
    By pobri19 in forum C++ Programming
    Replies: 4
    Last Post: 09-15-2008, 04:07 AM
  4. Output problems with structures
    By Gkitty in forum C Programming
    Replies: 1
    Last Post: 12-16-2002, 05:27 AM
  5. Simple File Creation Algorithm
    By muffin in forum C Programming
    Replies: 13
    Last Post: 08-24-2001, 03:28 PM

Tags for this Thread