Dual CANbus monitor and instrumentation cluster supporting ILI9341 display controller
Dependencies: SPI_TFTx2_ILI9341 TOUCH_TFTx2_ILI9341 TFT_fonts mbed
Fork of CANary by
main.cpp
- Committer:
- TickTock
- Date:
- 2012-11-19
- Revision:
- 0:1596b8644523
- Child:
- 1:9dcd70c32180
File content as of revision 0:1596b8644523:
#include "mbed.h" #include "CAN.h" #include "TextLCD.h" #include "SDFileSystem.h" #include "DebounceIn.h" #include "log.h" #include "beep.h" //VP230 //1:D 8:RS //2:GND 7:CANH //3:VCC 6:CANL //4:R 5:Vref //LPC1768 //1: VSS //2: NC:VIN //3: NC:VB //4: NC:nR //5: SPI:MOSI --> 6:SDRAM:DI //6: SPI:MISO --> 2:SDRAM:DO //7: SPI:SCLK --> 4:SDRAM:SCLK //8: CS --> 7:SDRAM:CS //9: CAN1:TX --> 1:CAN1:D //10: CAN1:RX --> 4:CAN1:R //11: RS --> 4:LCD:RS //12: E --> 6:LCD:E //13: D4 --> 11:LCD:D4 //14: D5 --> 12:LCD:D5 //15: D6 --> 13:LCD:D6 //16: D7 --> 14:LCD:D7 //17: CD --> 1:SDRAM:CD //18: NC:Ain //19: PB2 //20: PB1 //21: Spkr+ //22: NC:pwm //23: NC:pwm //24: NC:pwm //25: NC:pwm //26: NC:pwm //27: CAN1:Sleep --> 8:CAN1:RS //28: CAN2:Sleep --> 8:CAN2:RS //29: CAN2:RX --> 4:CAN2:R //30: CAN2:TX --> 1:CAN2:D //31: NC:USB_D+ //32: NC:USB_D- //33: NC:Eth_TD+ //34: NC:Eth_TD- //35: NC:Eth_RD+ //36: NC:Eth_RD- //37: NC:IF+ //38: NC:IF- //39: NC:5Vout //40: VCC3.3 Beep buzzer(p21); DigitalIn CD( p17 ); DigitalIn PB1( p20 ); SDFileSystem sd(p5, p6, p7, p8, "sd"); // SDFileSystem::SDFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name) TextLCD lcd(p11, p12, p13, p14, p15, p16); // rs, e, d0-d3 (RW to GND) Ticker ticker; DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); CAN can1(p9, p10); // CAN1 uses pins 9 and 10 (tx, rx) CAN can2(p30, p29); // CAN2 uses pins 30 and 29 (tx, rx) bool LogCreated = false; char logMsg[64]; char counter = 0; //DigitalOut can1_SleepMode(p11); // Use pin 11 to control the sleep mode of can1 //DigitalOut can2_SleepMode(p28); // Use pin 28 to control the sleep mode of can2 Serial pc(USBTX, USBRX); // tx, rx default settings (9600 8N1) void Log (char *message) { FILE *file; if (!LogCreated) { file = fopen(LOGFILE, "w"); LogCreated = true; } else file = fopen(LOGFILE, "a"); if (file == NULL) { if (LogCreated) LogCreated = false; return; } else { fputs(message, file); //fprintf(file, message); fclose(file); } if (file) fclose(file); } void send() { if(can1.write(CANMessage(0x350, &counter, 1))) { counter++; pc.printf("Message %d sent\n", counter); lcd.printf("sent: %d \n", counter); if(LogCreated) { if((PB1==0)||(CD==0)){ LogCreated=false; pc.printf("Stopping log\n", counter); }else{ sprintf(logMsg, "sent: %d \n", counter); Log(logMsg); pc.printf("Message logged\n"); buzzer.beep(800,0.025); } } } led1 = !led1; } void recieve1() { static CANMessage msg1; can1.read(msg1); pc.printf("Can1 Message received: %d\n", msg1.data[0]); lcd.printf("Can1 rxd: %d\n", msg1.data[0]); led2 = !led2; } void recieve2() { static CANMessage msg2; can2.read(msg2); pc.printf("Can2 Message received: %d\n", msg2.data[0]); lcd.printf("Can2 rxd: %d\n", msg2.data[0]); led3 = !led3; } int main() { pc.baud(115200); // change serial interface to pc to 115200, 8N1 can1.frequency(100000); can2.frequency(100000); //can1_SleepMode = 0; // Turn off Sleep Mode //can2_SleepMode = 0; // Turn off Sleep Mode CD.mode(PullUp) ; //SDRAM Chip Detect PB1.mode(PullUp) ; //Pushbutton 1 ticker.attach(&send, 1); can1.attach(&recieve1); can2.attach(&recieve2); if(CD == 1) { pc.printf("Starting Can Log\n"); Log("Starting Can Log\n"); } else { pc.printf("No SDRAM Inserted.\n"); } }