Library for Modtronix DINS-R8 boards. It is a 8 relay board controlled via I2C or RS-485, and can be mounted on a DIN rail.
dins-r8_i2c.cpp@3:c9412ffaf58e, 2015-08-07 (annotated)
- Committer:
- modtronix
- Date:
- Fri Aug 07 18:46:31 2015 +1000
- Revision:
- 3:c9412ffaf58e
- Parent:
- 2:b72096b1e461
Improvements
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
modtronix | 2:b72096b1e461 | 1 | /** |
modtronix | 2:b72096b1e461 | 2 | * File: dins-r8.cpp |
modtronix | 2:b72096b1e461 | 3 | * |
modtronix | 2:b72096b1e461 | 4 | * Author: Modtronix Engineering - www.modtronix.com |
modtronix | 2:b72096b1e461 | 5 | * |
modtronix | 2:b72096b1e461 | 6 | * Description: |
modtronix | 2:b72096b1e461 | 7 | * |
modtronix | 2:b72096b1e461 | 8 | * Software License Agreement: |
modtronix | 2:b72096b1e461 | 9 | * This software has been written or modified by Modtronix Engineering. The code |
modtronix | 2:b72096b1e461 | 10 | * may be modified and can be used free of charge for commercial and non commercial |
modtronix | 2:b72096b1e461 | 11 | * applications. If this is modified software, any license conditions from original |
modtronix | 2:b72096b1e461 | 12 | * software also apply. Any redistribution must include reference to 'Modtronix |
modtronix | 2:b72096b1e461 | 13 | * Engineering' and web link(www.modtronix.com) in the file header. |
modtronix | 2:b72096b1e461 | 14 | * |
modtronix | 2:b72096b1e461 | 15 | * THIS SOFTWARE IS PROVIDED IN AN 'AS IS' CONDITION. NO WARRANTIES, WHETHER EXPRESS, |
modtronix | 2:b72096b1e461 | 16 | * IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF |
modtronix | 2:b72096b1e461 | 17 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE |
modtronix | 2:b72096b1e461 | 18 | * COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR |
modtronix | 2:b72096b1e461 | 19 | * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. |
modtronix | 2:b72096b1e461 | 20 | */ |
modtronix | 2:b72096b1e461 | 21 | |
modtronix | 2:b72096b1e461 | 22 | #include "mbed.h" |
modtronix | 2:b72096b1e461 | 23 | #include "dins-r8_i2c.h" |
modtronix | 2:b72096b1e461 | 24 | #include <algorithm> // std::min |
modtronix | 2:b72096b1e461 | 25 | |
modtronix | 2:b72096b1e461 | 26 | |
modtronix | 2:b72096b1e461 | 27 | // DEFINES //////////////////////////////////////////////////////////////////// |
modtronix | 2:b72096b1e461 | 28 | /** Write to all relays. Each bit of byte is 1 relayCursor moves backwards, no parameters */ |
modtronix | 2:b72096b1e461 | 29 | #define CMD_WRITE_ALL_RELAYS 0x80 |
modtronix | 2:b72096b1e461 | 30 | |
modtronix | 2:b72096b1e461 | 31 | |
modtronix | 2:b72096b1e461 | 32 | // GLOBAL VARIABLES /////////////////////////////////////////////////////////// |
modtronix | 2:b72096b1e461 | 33 | |
modtronix | 2:b72096b1e461 | 34 | |
modtronix | 2:b72096b1e461 | 35 | // Function Prototypes //////////////////////////////////////////////////////// |
modtronix | 2:b72096b1e461 | 36 | |
modtronix | 2:b72096b1e461 | 37 | |
modtronix | 2:b72096b1e461 | 38 | DINS_R8_I2C::DINS_R8_I2C(I2C* i2cBus) { |
modtronix | 2:b72096b1e461 | 39 | pI2C = i2cBus; |
modtronix | 2:b72096b1e461 | 40 | i2cAdr = 0x60; //Default I2C address of the LCD |
modtronix | 2:b72096b1e461 | 41 | relays = 0; //All relays off |
modtronix | 2:b72096b1e461 | 42 | } |
modtronix | 2:b72096b1e461 | 43 | |
modtronix | 2:b72096b1e461 | 44 | |
modtronix | 2:b72096b1e461 | 45 | /** Writes given relay with given value |
modtronix | 2:b72096b1e461 | 46 | * |
modtronix | 2:b72096b1e461 | 47 | * @param relayNumber Relay to update, number from 1 to 8 |
modtronix | 2:b72096b1e461 | 48 | * |
modtronix | 2:b72096b1e461 | 49 | * @param value New value, 0 if off, 1 is on |
modtronix | 2:b72096b1e461 | 50 | * |
modtronix | 2:b72096b1e461 | 51 | * @returns 0 if success, else error code |
modtronix | 2:b72096b1e461 | 52 | */ |
modtronix | 2:b72096b1e461 | 53 | uint8_t DINS_R8_I2C::writeRelay(int8_t relayNumber, bool value) { |
modtronix | 2:b72096b1e461 | 54 | uint8_t mask; |
modtronix | 2:b72096b1e461 | 55 | uint8_t relaysNew; |
modtronix | 2:b72096b1e461 | 56 | |
modtronix | 2:b72096b1e461 | 57 | relayNumber--; |
modtronix | 2:b72096b1e461 | 58 | if(relayNumber>7) { |
modtronix | 2:b72096b1e461 | 59 | return DINS_R8_ERR_INVALID_RELAY; //Error, invalid Relay Number |
modtronix | 2:b72096b1e461 | 60 | } |
modtronix | 2:b72096b1e461 | 61 | mask = 0x01 << relayNumber; |
modtronix | 2:b72096b1e461 | 62 | |
modtronix | 2:b72096b1e461 | 63 | //Clear given relay |
modtronix | 2:b72096b1e461 | 64 | relaysNew = relays & (~mask); |
modtronix | 2:b72096b1e461 | 65 | if(value==true) { |
modtronix | 2:b72096b1e461 | 66 | relaysNew |= mask; //Set given relay |
modtronix | 2:b72096b1e461 | 67 | } |
modtronix | 2:b72096b1e461 | 68 | |
modtronix | 2:b72096b1e461 | 69 | return writeAllRelays(relaysNew); |
modtronix | 2:b72096b1e461 | 70 | } |
modtronix | 2:b72096b1e461 | 71 | |
modtronix | 2:b72096b1e461 | 72 | |
modtronix | 2:b72096b1e461 | 73 | /** Set all relays with new values. Each bit is 1 relay |
modtronix | 2:b72096b1e461 | 74 | * |
modtronix | 2:b72096b1e461 | 75 | * @param relays New values for relays, each bit is 1 relay |
modtronix | 2:b72096b1e461 | 76 | * |
modtronix | 2:b72096b1e461 | 77 | * @returns 0 if success, else error code |
modtronix | 2:b72096b1e461 | 78 | */ |
modtronix | 2:b72096b1e461 | 79 | uint8_t DINS_R8_I2C::writeAllRelays(int8_t relays) { |
modtronix | 2:b72096b1e461 | 80 | char cmd[4]; |
modtronix | 2:b72096b1e461 | 81 | |
modtronix | 2:b72096b1e461 | 82 | if(this->relays != relays) { |
modtronix | 2:b72096b1e461 | 83 | |
modtronix | 2:b72096b1e461 | 84 | this->relays = relays; |
modtronix | 2:b72096b1e461 | 85 | |
modtronix | 2:b72096b1e461 | 86 | //- First byte of data is 0x80 ("Write All Relays" command for DINS-8R board) |
modtronix | 2:b72096b1e461 | 87 | //- Second byte of data is 0x0f (value of relays for DINS-8R board) |
modtronix | 2:b72096b1e461 | 88 | cmd[0] = CMD_WRITE_ALL_RELAYS; |
modtronix | 2:b72096b1e461 | 89 | cmd[1] = relays; |
modtronix | 2:b72096b1e461 | 90 | return pI2C->write(i2cAdr, cmd, 2); |
modtronix | 2:b72096b1e461 | 91 | |
modtronix | 2:b72096b1e461 | 92 | } |
modtronix | 2:b72096b1e461 | 93 | |
modtronix | 2:b72096b1e461 | 94 | return 0; //Success |
modtronix | 2:b72096b1e461 | 95 | } |
modtronix | 2:b72096b1e461 | 96 | |
modtronix | 2:b72096b1e461 | 97 | |
modtronix | 2:b72096b1e461 | 98 |