Can Bus Shield project to get RPM and Speed!!!

i found this code it is as more then i need, i still couldnt get anything to the LCD.


/**
*
*

  • Copyright (c) 2008-2009 All rights reserved.
    */
    #include "WConstants.h"
    #include <stdio.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    #include "pins_arduino.h"
    #include <inttypes.h>
    #include "global.h"
    #include "mcp2515.h"
    #include "defaults.h"
    #include "Canbus.h"

/* C++ wrapper */
CanbusClass::CanbusClass() {

}
char CanbusClass::message_rx(unsigned char *buffer) {
tCAN message;

if (mcp2515_check_message()) {

// Lese die Nachricht aus dem Puffern des MCP2515
if (mcp2515_get_message(&message)) {
// print_can_message(&message);
// PRINT("\n");
buffer[0] = message.data[0];
buffer[1] = message.data[1];
buffer[2] = message.data[2];
buffer[3] = message.data[3];
buffer[4] = message.data[4];
buffer[5] = message.data[5];
buffer[6] = message.data[6];
buffer[7] = message.data[7];
// buffer[] = message[];
// buffer[] = message[];
// buffer[] = message[];
// buffer[] = message[];
}
else {
// PRINT("Kann die Nachricht nicht auslesen\n\n");
}
}

}

char CanbusClass::message_tx(void) {
tCAN message;

// einige Testwerte
message.id = 0x7DF;
message.header.rtr = 0;
message.header.length = 8;
message.data[0] = 0x02;
message.data[1] = 0x01;
message.data[2] = 0x05;
message.data[3] = 0x00;
message.data[4] = 0x00;
message.data[5] = 0x00;
message.data[6] = 0x00;
message.data[7] = 0x00;

// mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), (1<<REQOP1));
mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0);

if (mcp2515_send_message(&message)) {
// SET(LED2_HIGH);
return 1;

}
else {
// PRINT("Fehler: konnte die Nachricht nicht auslesen\n\n");
return 0;
}
return 1;

}

char CanbusClass::ecu_req(unsigned char pid, char *buffer)
{
tCAN message;
float engine_data;
int timeout = 0;
char message_ok = 0;
// Prepair message
message.id = PID_REQUEST;
message.header.rtr = 0;
message.header.length = 8;
message.data[0] = 0x02;
message.data[1] = 0x01;
message.data[2] = pid;
message.data[3] = 0x00;
message.data[4] = 0x00;
message.data[5] = 0x00;
message.data[6] = 0x00;
message.data[7] = 0x00;

mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0);
// SET(LED2_HIGH);
if (mcp2515_send_message(&message)) {
}

while(timeout < 4000)
{
timeout++;
if (mcp2515_check_message())
{

if (mcp2515_get_message(&message))
{
if((message.id == PID_REPLY) && (message.data[2] == pid)) // Check message is the reply and its the right PID
{
switch(message.data[2])
{ /* Details from OBD-II PIDs - Wikipedia /
case ENGINE_RPM: // ((A
256)+B)/4 [RPM]
engine_data = ((message.data[3]*256) + message.data[4])/4;
sprintf(buffer,"%d rpm ",(int) engine_data);
break;

case ENGINE_COOLANT_TEMP: // A-40 [degree C]
engine_data = message.data[3] - 40;
sprintf(buffer,"%d degC",(int) engine_data);

break;

case VEHICLE_SPEED: // A [km]
engine_data = message.data[3];
sprintf(buffer,"%d km ",(int) engine_data);

break;

case MAF_SENSOR: // ((256*A)+B) / 100 [g/s]
engine_data = ((message.data[3]*256) + message.data[4])/100;
sprintf(buffer,"%d g/s",(int) engine_data);

break;

case O2_VOLTAGE: // A * 0.005 (B-128) * 100/128 (if B==0xFF, sensor is not used in trim calc)
engine_data = message.data[3]*0.005;
sprintf(buffer,"%d v",(int) engine_data);

case THROTTLE: // Throttle Position
engine_data = (message.data[3]*100)/255;
sprintf(buffer,"%d %% ",(int) engine_data);
break;

}
message_ok = 1;
}

}
}
if(message_ok == 1) return 1;
}

return 0;
}

char CanbusClass::init(unsigned char speed) {

return mcp2515_init(speed);

}

CanbusClass Canbus;