New project

Dependencies:   mbed TextLCD

Committer:
KwamsC
Date:
Tue Jun 05 14:21:47 2018 +0000
Revision:
12:75aab2bdb3a1
Parent:
10:cda57976225f
Parent:
9:01263bd18141
Child:
13:78a2481fd65b
merge notes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jasminealice 0:57cbecaac770 1 #include "mbed.h"
Kwame 2:9bb410612929 2 #include "TextLCD.h"
jasminealice 4:4b62680f91b5 3 #include <string>
jasminealice 4:4b62680f91b5 4 #include <iostream>
KwamsC 10:cda57976225f 5 #include "mcp23017.h"
jasminealice 0:57cbecaac770 6
KwamsC 10:cda57976225f 7
KwamsC 10:cda57976225f 8 //board 1
KwamsC 10:cda57976225f 9
KwamsC 10:cda57976225f 10 I2C i2c(p28, p27); // sda, scl pins (you can also use the other I2C port pins: 9,10)
KwamsC 10:cda57976225f 11
KwamsC 10:cda57976225f 12 const int addr0 = 0x20 << 1; // 7-bit base address of the MCP23017 + address bits (which are 000 for the first one), shifted 1 place to the right (see top header)
KwamsC 10:cda57976225f 13
KwamsC 10:cda57976225f 14 DigitalOut myled(LED1); //
KwamsC 10:cda57976225f 15 DigitalOut myled2(LED2); // led
KwamsC 10:cda57976225f 16 DigitalOut myled3(LED3); //
KwamsC 10:cda57976225f 17 DigitalOut myled4(LED4); //
KwamsC 10:cda57976225f 18 AnalogIn Ain(p20); // pot. met.
KwamsC 10:cda57976225f 19
KwamsC 10:cda57976225f 20 DigitalOut Track(p21);
KwamsC 10:cda57976225f 21
KwamsC 10:cda57976225f 22 DigitalIn sw1(p5); //
KwamsC 10:cda57976225f 23 DigitalIn sw2(p30); // switches
KwamsC 10:cda57976225f 24 DigitalIn sw3(p29); //
KwamsC 10:cda57976225f 25 DigitalIn sw4(p28); //
jasminealice 0:57cbecaac770 26
KwamsC 10:cda57976225f 27 void mcpWriteReg(uint8_t address, uint8_t reg, uint8_t data); // Write an I2C register
KwamsC 10:cda57976225f 28 uint8_t mcpReadReg(uint8_t address, uint8_t reg); // Read an I2C register
KwamsC 10:cda57976225f 29 void initMcp0(void);
KwamsC 10:cda57976225f 30
KwamsC 10:cda57976225f 31 unsigned int DarkRedtrain = 0x01;
KwamsC 10:cda57976225f 32 unsigned int DCCinst_forward = 0x68; //forward half speed
KwamsC 10:cda57976225f 33
KwamsC 10:cda57976225f 34 //move forward
KwamsC 10:cda57976225f 35
KwamsC 10:cda57976225f 36 //speed dial
KwamsC 10:cda57976225f 37
KwamsC 10:cda57976225f 38 //stop
KwamsC 10:cda57976225f 39
KwamsC 10:cda57976225f 40 //read switch out
KwamsC 10:cda57976225f 41
KwamsC 10:cda57976225f 42 //read signal
KwamsC 10:cda57976225f 43
KwamsC 10:cda57976225f 44 //display message
KwamsC 10:cda57976225f 45
KwamsC 10:cda57976225f 46 //send command
KwamsC 10:cda57976225f 47 void DCC_send_command(unsigned int address, unsigned int inst, unsigned int repeat_count);
KwamsC 10:cda57976225f 48
KwamsC 10:cda57976225f 49 TextLCD lcd(p22, p21, p23, p24, p25, p26); // lcd
jasminealice 4:4b62680f91b5 50
jasminealice 5:49651a9f8ff7 51 int main() {
jasminealice 5:49651a9f8ff7 52 while(1){
KwamsC 10:cda57976225f 53 unsigned int DCCaddress = 0x03;
KwamsC 10:cda57976225f 54 DCC_send_command(DCCaddress,DCCinst_forward,400); // forward half speed train address 3
jasminealice 5:49651a9f8ff7 55 float f = Ain.read(); //Read voltage value
jasminealice 5:49651a9f8ff7 56 float Vin = f *3.3;
jasminealice 5:49651a9f8ff7 57 lcd.printf("%.2f", Vin);
jasminealice 5:49651a9f8ff7 58 lcd.printf("\n");
jasminealice 5:49651a9f8ff7 59 //myled=1;
jasminealice 5:49651a9f8ff7 60 }
jasminealice 0:57cbecaac770 61 }
KwamsC 10:cda57976225f 62
KwamsC 10:cda57976225f 63 void mcpWriteReg(uint8_t address, uint8_t reg, uint8_t data){
KwamsC 10:cda57976225f 64 char cmd[2];cmd[0] = reg;
KwamsC 10:cda57976225f 65 cmd[1] = data;
KwamsC 10:cda57976225f 66 i2c.write(address, cmd, 2); // Write 2 bytes to device on specified address
KwamsC 10:cda57976225f 67 }
KwamsC 10:cda57976225f 68
KwamsC 10:cda57976225f 69 uint8_t mcpReadReg(uint8_t address, uint8_t reg){
KwamsC 10:cda57976225f 70 char cmd[1];
KwamsC 10:cda57976225f 71 cmd[0] = reg;
KwamsC 10:cda57976225f 72 i2c.write(address, cmd, 1); // Write address
KwamsC 10:cda57976225f 73 i2c.read(address, cmd, 1); // Read value (one byte)
KwamsC 10:cda57976225f 74
KwamsC 10:cda57976225f 75 return cmd[0]; // Return the read value
KwamsC 10:cda57976225f 76 }
KwamsC 10:cda57976225f 77
KwamsC 10:cda57976225f 78 void initMcp0(void){
KwamsC 10:cda57976225f 79 mcpWriteReg(addr0, MCP_IODIRA, 0xff); // All inputs
KwamsC 10:cda57976225f 80 mcpWriteReg(addr0, MCP_IODIRB, 0xff); // All inputs
KwamsC 10:cda57976225f 81 }
KwamsC 10:cda57976225f 82
KwamsC 10:cda57976225f 83 void DCC_send_command(unsigned int address, unsigned int inst, unsigned int repeat_count)
KwamsC 10:cda57976225f 84 {
KwamsC 10:cda57976225f 85 unsigned __int64 command = 0x0000000000000000; // __int64 is the 64-bit integer type
KwamsC 10:cda57976225f 86 unsigned __int64 temp_command = 0x0000000000000000;
KwamsC 10:cda57976225f 87 unsigned __int64 prefix = 0x3FFF; // 14 "1" bits needed at start
KwamsC 10:cda57976225f 88 unsigned int error = 0x00; //error byte
KwamsC 10:cda57976225f 89 //calculate error detection byte with xor
KwamsC 10:cda57976225f 90 error = address ^ inst;
KwamsC 10:cda57976225f 91 //combine packet bits in basic DCC format
KwamsC 10:cda57976225f 92 command = (prefix<<28)|(address<<19)|(inst<<10)|((error)<<1)|0x01;
KwamsC 10:cda57976225f 93 //printf("\n\r %llx \n\r",command);
KwamsC 10:cda57976225f 94 int i=0;
KwamsC 10:cda57976225f 95 //repeat DCC command lots of times
KwamsC 10:cda57976225f 96 while(i < repeat_count) {
KwamsC 10:cda57976225f 97 temp_command = command;
KwamsC 10:cda57976225f 98 //loops through packet bits encoding and sending out digital pulses for a DCC command
KwamsC 10:cda57976225f 99 for (int j=0; j<64; j++) {
KwamsC 10:cda57976225f 100 if((temp_command&0x8000000000000000)==0) { //test packet bit
KwamsC 10:cda57976225f 101 //send data for a "0" bit
KwamsC 10:cda57976225f 102 Track=0;
KwamsC 10:cda57976225f 103 wait_us(100);
KwamsC 10:cda57976225f 104 Track=1;
KwamsC 10:cda57976225f 105 wait_us(100);
KwamsC 10:cda57976225f 106 //printf("0011");
KwamsC 10:cda57976225f 107 } else {
KwamsC 10:cda57976225f 108 //send data for a "1"bit
KwamsC 10:cda57976225f 109 Track=0;
KwamsC 10:cda57976225f 110 wait_us(58);
KwamsC 10:cda57976225f 111 Track=1;
KwamsC 10:cda57976225f 112 wait_us(58);
KwamsC 10:cda57976225f 113 //printf("01");
KwamsC 10:cda57976225f 114 }
KwamsC 10:cda57976225f 115 // next bit in packet
KwamsC 10:cda57976225f 116 temp_command = temp_command<<1;
KwamsC 10:cda57976225f 117 }
KwamsC 10:cda57976225f 118 i++;
KwamsC 10:cda57976225f 119 }
KwamsC 10:cda57976225f 120 }