![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Gets messages form the pc and translates it to I2C and back.
Dependencies: DevInterfaces I2Cinterfaces MCP4725 mbed
main.cpp@0:b40341017545, 2016-05-18 (annotated)
- Committer:
- katrijnverhasselt
- Date:
- Wed May 18 11:22:41 2016 +0000
- Revision:
- 0:b40341017545
- Child:
- 1:8ba039abd9b8
Full program
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
katrijnverhasselt | 0:b40341017545 | 1 | #define MCP4728EXAMPLEVER "1.10 " |
katrijnverhasselt | 0:b40341017545 | 2 | |
katrijnverhasselt | 0:b40341017545 | 3 | #include <string> |
katrijnverhasselt | 0:b40341017545 | 4 | #include "mbed.h" |
katrijnverhasselt | 0:b40341017545 | 5 | |
katrijnverhasselt | 0:b40341017545 | 6 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
katrijnverhasselt | 0:b40341017545 | 7 | PinName const SDA = PTE25; |
katrijnverhasselt | 0:b40341017545 | 8 | PinName const SCL = PTE24; |
katrijnverhasselt | 0:b40341017545 | 9 | #elif defined (TARGET_KL05Z) |
katrijnverhasselt | 0:b40341017545 | 10 | PinName const SDA = PTB4; |
katrijnverhasselt | 0:b40341017545 | 11 | PinName const SCL = PTB3; |
katrijnverhasselt | 0:b40341017545 | 12 | #elif defined (TARGET_K20D50M) |
katrijnverhasselt | 0:b40341017545 | 13 | PinName const SDA = PTB1; |
katrijnverhasselt | 0:b40341017545 | 14 | PinName const SCL = PTB0; |
katrijnverhasselt | 0:b40341017545 | 15 | #else |
katrijnverhasselt | 0:b40341017545 | 16 | #error TARGET NOT DEFINED |
katrijnverhasselt | 0:b40341017545 | 17 | #endif |
katrijnverhasselt | 0:b40341017545 | 18 | |
katrijnverhasselt | 0:b40341017545 | 19 | |
katrijnverhasselt | 0:b40341017545 | 20 | #include "I2C.h" |
katrijnverhasselt | 0:b40341017545 | 21 | #include "I2CInterface.h" |
katrijnverhasselt | 0:b40341017545 | 22 | #include "MBEDI2CInterface.h" |
katrijnverhasselt | 0:b40341017545 | 23 | #include "DACInterface.h" |
katrijnverhasselt | 0:b40341017545 | 24 | #include "dev_interface_def.h" |
katrijnverhasselt | 0:b40341017545 | 25 | #include "mcp4725.h" |
katrijnverhasselt | 0:b40341017545 | 26 | #include "Translator.h" |
katrijnverhasselt | 0:b40341017545 | 27 | #include "Reader.h" |
katrijnverhasselt | 0:b40341017545 | 28 | #include "Writer.h" |
katrijnverhasselt | 0:b40341017545 | 29 | |
katrijnverhasselt | 0:b40341017545 | 30 | // Initialize LEDs |
katrijnverhasselt | 0:b40341017545 | 31 | PwmOut rled(LED1); |
katrijnverhasselt | 0:b40341017545 | 32 | PwmOut gled(LED2); |
katrijnverhasselt | 0:b40341017545 | 33 | PwmOut bled(LED3); |
katrijnverhasselt | 0:b40341017545 | 34 | |
katrijnverhasselt | 0:b40341017545 | 35 | Serial pc(USBTX, USBRX); |
katrijnverhasselt | 0:b40341017545 | 36 | |
katrijnverhasselt | 0:b40341017545 | 37 | int main(void) { |
katrijnverhasselt | 0:b40341017545 | 38 | // <SDA en SCL zijn de pins hierboven gedefinieerd, wss hardware eigenschappen dat je mag negeren> |
katrijnverhasselt | 0:b40341017545 | 39 | // Create MbedI2C interface |
katrijnverhasselt | 0:b40341017545 | 40 | MBEDI2CInterface mbedi2c(SDA, SCL); |
katrijnverhasselt | 0:b40341017545 | 41 | // <volgende lijn is voor indien de Mbed veranderd, enkel bovenstaande lijn geupdate moet worden> |
katrijnverhasselt | 0:b40341017545 | 42 | // Create pointer to MBEDI2CInterface's parent |
katrijnverhasselt | 0:b40341017545 | 43 | I2CInterface* i2cdev= &mbedi2c; |
katrijnverhasselt | 0:b40341017545 | 44 | // Set maximum voltage of I2C board |
katrijnverhasselt | 0:b40341017545 | 45 | float Vdd = 4.7; |
katrijnverhasselt | 0:b40341017545 | 46 | // Create communication object using the MbedI2C interface |
katrijnverhasselt | 0:b40341017545 | 47 | MCP4725 dac(i2cdev ,0, Vdd); |
katrijnverhasselt | 0:b40341017545 | 48 | |
katrijnverhasselt | 0:b40341017545 | 49 | // Create input buffer reader |
katrijnverhasselt | 0:b40341017545 | 50 | Reader reader; |
katrijnverhasselt | 0:b40341017545 | 51 | |
katrijnverhasselt | 0:b40341017545 | 52 | // Start infinite loop |
katrijnverhasselt | 0:b40341017545 | 53 | while (true) { |
katrijnverhasselt | 0:b40341017545 | 54 | rled = 1.0f; |
katrijnverhasselt | 0:b40341017545 | 55 | gled = 1.0f; |
katrijnverhasselt | 0:b40341017545 | 56 | bled = 0.0f; |
katrijnverhasselt | 0:b40341017545 | 57 | if (!reader.IsNewMessageReceived()) |
katrijnverhasselt | 0:b40341017545 | 58 | continue; // Do nothing as long as no new complete message was received |
katrijnverhasselt | 0:b40341017545 | 59 | rled = 1.0f; |
katrijnverhasselt | 0:b40341017545 | 60 | gled = 0.0f; |
katrijnverhasselt | 0:b40341017545 | 61 | bled = 1.0f; |
katrijnverhasselt | 0:b40341017545 | 62 | |
katrijnverhasselt | 0:b40341017545 | 63 | // Translate the raw message |
katrijnverhasselt | 0:b40341017545 | 64 | Translator::MessageInfo info/* = reader.LastMessageInfo()*/; |
katrijnverhasselt | 0:b40341017545 | 65 | if (!Translator::Translate(reader.GetLastMessage(), reader.GetLastMessageSize(), &info)) { |
katrijnverhasselt | 0:b40341017545 | 66 | printf("I have failed you..."); |
katrijnverhasselt | 0:b40341017545 | 67 | continue; |
katrijnverhasselt | 0:b40341017545 | 68 | } |
katrijnverhasselt | 0:b40341017545 | 69 | |
katrijnverhasselt | 0:b40341017545 | 70 | int dacValue; |
katrijnverhasselt | 0:b40341017545 | 71 | if (info.IsRead()) { // If read command |
katrijnverhasselt | 0:b40341017545 | 72 | printf("Reading "); |
katrijnverhasselt | 0:b40341017545 | 73 | // Read the current DAC value |
katrijnverhasselt | 0:b40341017545 | 74 | if (dac.getDACvalue(dacValue) == 0) { |
katrijnverhasselt | 0:b40341017545 | 75 | printf("succes!"); |
katrijnverhasselt | 0:b40341017545 | 76 | // Succesful: send back the current DAC value |
katrijnverhasselt | 0:b40341017545 | 77 | Writer::Send(info, dacValue); |
katrijnverhasselt | 0:b40341017545 | 78 | } else { |
katrijnverhasselt | 0:b40341017545 | 79 | printf("failed"); |
katrijnverhasselt | 0:b40341017545 | 80 | // Failed: send error message |
katrijnverhasselt | 0:b40341017545 | 81 | Writer::SendError(info); |
katrijnverhasselt | 0:b40341017545 | 82 | } |
katrijnverhasselt | 0:b40341017545 | 83 | } else if (info.IsWrite()) { // If write command |
katrijnverhasselt | 0:b40341017545 | 84 | printf("Writing "); |
katrijnverhasselt | 0:b40341017545 | 85 | // Set the given DAC value |
katrijnverhasselt | 0:b40341017545 | 86 | if (dac.setDACvalue(info.DacValue) == 0) { |
katrijnverhasselt | 0:b40341017545 | 87 | printf("succes!"); |
katrijnverhasselt | 0:b40341017545 | 88 | // Succesful: Get the DAC value |
katrijnverhasselt | 0:b40341017545 | 89 | dac.getDACvalue(dacValue); |
katrijnverhasselt | 0:b40341017545 | 90 | // Send new value |
katrijnverhasselt | 0:b40341017545 | 91 | Writer::Send(info, dacValue); |
katrijnverhasselt | 0:b40341017545 | 92 | } else { |
katrijnverhasselt | 0:b40341017545 | 93 | printf("failed"); |
katrijnverhasselt | 0:b40341017545 | 94 | // Failed: send error message |
katrijnverhasselt | 0:b40341017545 | 95 | Writer::SendError(info); |
katrijnverhasselt | 0:b40341017545 | 96 | } |
katrijnverhasselt | 0:b40341017545 | 97 | } else if (info.IsOption()) { |
katrijnverhasselt | 0:b40341017545 | 98 | printf("Option failed"); |
katrijnverhasselt | 0:b40341017545 | 99 | // Not implemented yet |
katrijnverhasselt | 0:b40341017545 | 100 | Writer::SendError(info); |
katrijnverhasselt | 0:b40341017545 | 101 | } |
katrijnverhasselt | 0:b40341017545 | 102 | } |
katrijnverhasselt | 0:b40341017545 | 103 | } |
katrijnverhasselt | 0:b40341017545 | 104 |