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