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.

Committer:
modtronix
Date:
Fri Aug 07 18:46:31 2015 +1000
Revision:
3:c9412ffaf58e
Parent:
2:b72096b1e461
Improvements

Who changed what in which revision?

UserRevisionLine numberNew 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