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 ];
}
}
}