code ax12 petit robot 12/05/2017

Fork of command_AX12_petit_robot_V3 by CRAC Team

Committer:
ClementBreteau
Date:
Fri May 12 14:35:09 2017 +0000
Revision:
7:ad4a19e26b84
Parent:
2:99b1cb0d9f5e
position ax12

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SquirrelGod 2:99b1cb0d9f5e 1 /* mbed Microcontroller Library - I2CSlave
SquirrelGod 2:99b1cb0d9f5e 2 * Copyright (c) 2007-2011 ARM Limited. All rights reserved.
SquirrelGod 2:99b1cb0d9f5e 3 */
SquirrelGod 2:99b1cb0d9f5e 4
SquirrelGod 2:99b1cb0d9f5e 5 #ifndef MBED_I2C_SLAVE_H
SquirrelGod 2:99b1cb0d9f5e 6 #define MBED_I2C_SLAVE_H
SquirrelGod 2:99b1cb0d9f5e 7
SquirrelGod 2:99b1cb0d9f5e 8 #include "device.h"
SquirrelGod 2:99b1cb0d9f5e 9
SquirrelGod 2:99b1cb0d9f5e 10 #if DEVICE_I2CSLAVE
SquirrelGod 2:99b1cb0d9f5e 11
SquirrelGod 2:99b1cb0d9f5e 12 #include "platform.h"
SquirrelGod 2:99b1cb0d9f5e 13 #include "PinNames.h"
SquirrelGod 2:99b1cb0d9f5e 14 #include "PeripheralNames.h"
SquirrelGod 2:99b1cb0d9f5e 15 #include "Base.h"
SquirrelGod 2:99b1cb0d9f5e 16
SquirrelGod 2:99b1cb0d9f5e 17 namespace mbed {
SquirrelGod 2:99b1cb0d9f5e 18
SquirrelGod 2:99b1cb0d9f5e 19 /* Class: I2CSlave
SquirrelGod 2:99b1cb0d9f5e 20 * An I2C Slave, used for communicating with an I2C Master device
SquirrelGod 2:99b1cb0d9f5e 21 *
SquirrelGod 2:99b1cb0d9f5e 22 * Example:
SquirrelGod 2:99b1cb0d9f5e 23 * > // Simple I2C responder
SquirrelGod 2:99b1cb0d9f5e 24 * > #include <mbed.h>
SquirrelGod 2:99b1cb0d9f5e 25 * >
SquirrelGod 2:99b1cb0d9f5e 26 * > I2CSlave slave(p9, p10);
SquirrelGod 2:99b1cb0d9f5e 27 * >
SquirrelGod 2:99b1cb0d9f5e 28 * > int main() {
SquirrelGod 2:99b1cb0d9f5e 29 * > char buf[10];
SquirrelGod 2:99b1cb0d9f5e 30 * > char msg[] = "Slave!";
SquirrelGod 2:99b1cb0d9f5e 31 * >
SquirrelGod 2:99b1cb0d9f5e 32 * > slave.address(0xA0);
SquirrelGod 2:99b1cb0d9f5e 33 * > while (1) {
SquirrelGod 2:99b1cb0d9f5e 34 * > int i = slave.receive();
SquirrelGod 2:99b1cb0d9f5e 35 * > switch (i) {
SquirrelGod 2:99b1cb0d9f5e 36 * > case I2CSlave::ReadAddressed:
SquirrelGod 2:99b1cb0d9f5e 37 * > slave.write(msg, strlen(msg) + 1); // Includes null char
SquirrelGod 2:99b1cb0d9f5e 38 * > break;
SquirrelGod 2:99b1cb0d9f5e 39 * > case I2CSlave::WriteGeneral:
SquirrelGod 2:99b1cb0d9f5e 40 * > slave.read(buf, 10);
SquirrelGod 2:99b1cb0d9f5e 41 * > printf("Read G: %s\n", buf);
SquirrelGod 2:99b1cb0d9f5e 42 * > break;
SquirrelGod 2:99b1cb0d9f5e 43 * > case I2CSlave::WriteAddressed:
SquirrelGod 2:99b1cb0d9f5e 44 * > slave.read(buf, 10);
SquirrelGod 2:99b1cb0d9f5e 45 * > printf("Read A: %s\n", buf);
SquirrelGod 2:99b1cb0d9f5e 46 * > break;
SquirrelGod 2:99b1cb0d9f5e 47 * > }
SquirrelGod 2:99b1cb0d9f5e 48 * > for(int i = 0; i < 10; i++) buf[i] = 0; // Clear buffer
SquirrelGod 2:99b1cb0d9f5e 49 * > }
SquirrelGod 2:99b1cb0d9f5e 50 * > }
SquirrelGod 2:99b1cb0d9f5e 51 * >
SquirrelGod 2:99b1cb0d9f5e 52 */
SquirrelGod 2:99b1cb0d9f5e 53 class I2CSlave : public Base {
SquirrelGod 2:99b1cb0d9f5e 54
SquirrelGod 2:99b1cb0d9f5e 55 public:
SquirrelGod 2:99b1cb0d9f5e 56
SquirrelGod 2:99b1cb0d9f5e 57 enum RxStatus {
SquirrelGod 2:99b1cb0d9f5e 58 NoData = 0
SquirrelGod 2:99b1cb0d9f5e 59 , ReadAddressed = 1
SquirrelGod 2:99b1cb0d9f5e 60 , WriteGeneral = 2
SquirrelGod 2:99b1cb0d9f5e 61 , WriteAddressed = 3
SquirrelGod 2:99b1cb0d9f5e 62 };
SquirrelGod 2:99b1cb0d9f5e 63
SquirrelGod 2:99b1cb0d9f5e 64 /* Constructor: I2CSlave
SquirrelGod 2:99b1cb0d9f5e 65 * Create an I2C Slave interface, connected to the specified pins.
SquirrelGod 2:99b1cb0d9f5e 66 *
SquirrelGod 2:99b1cb0d9f5e 67 * Variables:
SquirrelGod 2:99b1cb0d9f5e 68 * sda - I2C data line pin
SquirrelGod 2:99b1cb0d9f5e 69 * scl - I2C clock line pin
SquirrelGod 2:99b1cb0d9f5e 70 */
SquirrelGod 2:99b1cb0d9f5e 71 I2CSlave(PinName sda, PinName scl, const char *name = NULL);
SquirrelGod 2:99b1cb0d9f5e 72
SquirrelGod 2:99b1cb0d9f5e 73 /* Function: frequency
SquirrelGod 2:99b1cb0d9f5e 74 * Set the frequency of the I2C interface
SquirrelGod 2:99b1cb0d9f5e 75 *
SquirrelGod 2:99b1cb0d9f5e 76 * Variables:
SquirrelGod 2:99b1cb0d9f5e 77 * hz - The bus frequency in hertz
SquirrelGod 2:99b1cb0d9f5e 78 */
SquirrelGod 2:99b1cb0d9f5e 79 void frequency(int hz);
SquirrelGod 2:99b1cb0d9f5e 80
SquirrelGod 2:99b1cb0d9f5e 81 /* Function: receive
SquirrelGod 2:99b1cb0d9f5e 82 * Checks to see if this I2C Slave has been addressed.
SquirrelGod 2:99b1cb0d9f5e 83 *
SquirrelGod 2:99b1cb0d9f5e 84 * Variables:
SquirrelGod 2:99b1cb0d9f5e 85 * returns - a status indicating if the device has been addressed, and how
SquirrelGod 2:99b1cb0d9f5e 86 * > NoData - the slave has not been addressed
SquirrelGod 2:99b1cb0d9f5e 87 * > ReadAddressed - the master has requested a read from this slave
SquirrelGod 2:99b1cb0d9f5e 88 * > WriteAddressed - the master is writing to this slave
SquirrelGod 2:99b1cb0d9f5e 89 * > WriteGeneral - the master is writing to all slave
SquirrelGod 2:99b1cb0d9f5e 90 */
SquirrelGod 2:99b1cb0d9f5e 91 int receive(void);
SquirrelGod 2:99b1cb0d9f5e 92
SquirrelGod 2:99b1cb0d9f5e 93 /* Function: read
SquirrelGod 2:99b1cb0d9f5e 94 * Read from an I2C master.
SquirrelGod 2:99b1cb0d9f5e 95 *
SquirrelGod 2:99b1cb0d9f5e 96 * Variables:
SquirrelGod 2:99b1cb0d9f5e 97 * data - pointer to the byte array to read data in to
SquirrelGod 2:99b1cb0d9f5e 98 * length - maximum number of bytes to read
SquirrelGod 2:99b1cb0d9f5e 99 * returns - 0 on success, non-0 otherwise
SquirrelGod 2:99b1cb0d9f5e 100 */
SquirrelGod 2:99b1cb0d9f5e 101 int read(char *data, int length);
SquirrelGod 2:99b1cb0d9f5e 102
SquirrelGod 2:99b1cb0d9f5e 103 /* Function: read
SquirrelGod 2:99b1cb0d9f5e 104 * Read a single byte from an I2C master.
SquirrelGod 2:99b1cb0d9f5e 105 *
SquirrelGod 2:99b1cb0d9f5e 106 * Variables:
SquirrelGod 2:99b1cb0d9f5e 107 * returns - the byte read
SquirrelGod 2:99b1cb0d9f5e 108 */
SquirrelGod 2:99b1cb0d9f5e 109 int read(void);
SquirrelGod 2:99b1cb0d9f5e 110
SquirrelGod 2:99b1cb0d9f5e 111 /* Function: write
SquirrelGod 2:99b1cb0d9f5e 112 * Write to an I2C master.
SquirrelGod 2:99b1cb0d9f5e 113 *
SquirrelGod 2:99b1cb0d9f5e 114 * Variables:
SquirrelGod 2:99b1cb0d9f5e 115 * data - pointer to the byte array to be transmitted
SquirrelGod 2:99b1cb0d9f5e 116 * length - the number of bytes to transmite
SquirrelGod 2:99b1cb0d9f5e 117 * returns - a 0 on success, non-0 otherwise
SquirrelGod 2:99b1cb0d9f5e 118 */
SquirrelGod 2:99b1cb0d9f5e 119 int write(const char *data, int length);
SquirrelGod 2:99b1cb0d9f5e 120
SquirrelGod 2:99b1cb0d9f5e 121 /* Function: write
SquirrelGod 2:99b1cb0d9f5e 122 * Write a single byte to an I2C master.
SquirrelGod 2:99b1cb0d9f5e 123 *
SquirrelGod 2:99b1cb0d9f5e 124 * Variables
SquirrelGod 2:99b1cb0d9f5e 125 * data - the byte to write
SquirrelGod 2:99b1cb0d9f5e 126 * returns - a '1' if an ACK was received, a '0' otherwise
SquirrelGod 2:99b1cb0d9f5e 127 */
SquirrelGod 2:99b1cb0d9f5e 128 int write(int data);
SquirrelGod 2:99b1cb0d9f5e 129
SquirrelGod 2:99b1cb0d9f5e 130 /* Function: address
SquirrelGod 2:99b1cb0d9f5e 131 * Sets the I2C slave address.
SquirrelGod 2:99b1cb0d9f5e 132 *
SquirrelGod 2:99b1cb0d9f5e 133 * Variables
SquirrelGod 2:99b1cb0d9f5e 134 * address - the address to set for the slave (ignoring the least
SquirrelGod 2:99b1cb0d9f5e 135 * signifcant bit). If set to 0, the slave will only respond to the
SquirrelGod 2:99b1cb0d9f5e 136 * general call address.
SquirrelGod 2:99b1cb0d9f5e 137 */
SquirrelGod 2:99b1cb0d9f5e 138 void address(int address);
SquirrelGod 2:99b1cb0d9f5e 139
SquirrelGod 2:99b1cb0d9f5e 140 /* Function: stop
SquirrelGod 2:99b1cb0d9f5e 141 * Reset the I2C slave back into the known ready receiving state.
SquirrelGod 2:99b1cb0d9f5e 142 */
SquirrelGod 2:99b1cb0d9f5e 143 void stop(void);
SquirrelGod 2:99b1cb0d9f5e 144
SquirrelGod 2:99b1cb0d9f5e 145 protected:
SquirrelGod 2:99b1cb0d9f5e 146
SquirrelGod 2:99b1cb0d9f5e 147 I2CName _i2c;
SquirrelGod 2:99b1cb0d9f5e 148 };
SquirrelGod 2:99b1cb0d9f5e 149
SquirrelGod 2:99b1cb0d9f5e 150 } // namespace mbed
SquirrelGod 2:99b1cb0d9f5e 151
SquirrelGod 2:99b1cb0d9f5e 152 #endif
SquirrelGod 2:99b1cb0d9f5e 153
SquirrelGod 2:99b1cb0d9f5e 154 #endif
SquirrelGod 2:99b1cb0d9f5e 155