Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: 2-FisherMan 2-FisherMan
Fork of AX12 by
Revision 4:c1835649c36f, committed 2016-05-06
- Comitter:
- julientiron
- Date:
- Fri May 06 07:21:41 2016 +0000
- Parent:
- 3:ced71d1b2558
- Commit message:
- d
Changed in this revision
--- a/AX12.cpp Sun Apr 10 21:20:44 2011 +0000
+++ b/AX12.cpp Fri May 06 07:21:41 2016 +0000
@@ -23,6 +23,7 @@
#include "AX12.h"
#include "mbed.h"
+#include "SerialHalfDuplex.h"
AX12::AX12(PinName tx, PinName rx, int ID, int baud)
: _ax12(tx,rx) {
@@ -82,6 +83,17 @@
return(rVal);
}
+// Set speed
+int AX12::SetSpeed(int speed) {
+ char data[2];
+
+ data[0] = speed & 0xff; // bottom 8 bits
+ data[1] = speed >> 8; // top 8 bits
+
+ // write the packet, return the error code
+ int rVal = write(_ID, AX12_REG_MOVING_SPEED, 2, data);
+ return(rVal);
+}
// Set continuous rotation speed from -1 to 1
int AX12::SetCRSpeed(float speed) {
--- a/AX12.h Sun Apr 10 21:20:44 2011 +0000
+++ b/AX12.h Fri May 06 07:21:41 2016 +0000
@@ -25,6 +25,7 @@
#define MBED_AX12_H
#include "mbed.h"
+#include "SerialHalfDuplex.h"
//#define AX12_WRITE_DEBUG 0
//#define AX12_READ_DEBUG 0
@@ -112,7 +113,8 @@
*/
int SetGoal(int degrees, int flags = 0);
-
+ int SetSpeed(int speed);
+
/** Set the speed of the servo in continuous rotation mode
*
* @param speed, -1.0 to 1.0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SerialHalfDuplex.cpp Fri May 06 07:21:41 2016 +0000
@@ -0,0 +1,76 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2012 ARM Limited
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * NOTE: This is an unsupported legacy untested library.
+ */
+#include "SerialHalfDuplex.h"
+
+#if DEVICE_SERIAL
+#include "mbed.h"
+#include "pinmap.h"
+#include "serial_api.h"
+#include "gpio_api.h"
+
+namespace mbed {
+
+SerialHalfDuplex::SerialHalfDuplex(PinName tx, PinName rx, const char *name)
+ : Serial(tx, rx, name) {
+ _txpin = tx;
+
+ DigitalIn TXPIN(_txpin); // set as input
+ pin_mode(_txpin, PullNone); // no pull
+ pin_function(_txpin, 0); // set as gpio
+}
+
+// To transmit a byte in half duplex mode:
+// 1. Disable interrupts, so we don't trigger on loopback byte
+// 2. Set tx pin to UART out
+// 3. Transmit byte as normal
+// 4. Read back byte from looped back tx pin - this both confirms that the
+// transmit has occurred, and also clears the byte from the buffer.
+// 5. Return pin to input mode
+// 6. Re-enable interrupts
+
+int SerialHalfDuplex::_putc(int c) {
+ int retc;
+
+ // TODO: We should not disable all interrupts
+ __disable_irq();
+
+ serial_pinout_tx(_txpin);
+
+ Serial::_putc(c);
+ retc = Serial::getc(); // reading also clears any interrupt
+
+ pin_function(_txpin, 0);
+
+ __enable_irq();
+
+ return retc;
+}
+
+int SerialHalfDuplex::_getc(void) {
+ return Serial::_getc();
+}
+
+} // End namespace
+
+#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SerialHalfDuplex.h Fri May 06 07:21:41 2016 +0000
@@ -0,0 +1,207 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2012 ARM Limited
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * NOTE: This is an unsupported legacy untested library.
+ */
+#ifndef MBED_SERIALHALFDUPLEX_H
+#define MBED_SERIALHALFDUPLEX_H
+
+#include "device.h"
+
+#if DEVICE_SERIAL
+
+#include "Serial.h"
+#include "PinNames.h"
+#include "PeripheralNames.h"
+
+namespace mbed {
+
+/* Class: SerialHalfDuplex
+ * A serial port (UART) for communication with other devices using
+ * Half-Duplex, allowing transmit and receive on a single
+ * shared transmit and receive line. Only one end should be transmitting
+ * at a time.
+ *
+ * Both the tx and rx pin should be defined, and wired together.
+ * This is in addition to them being wired to the other serial
+ * device to allow both read and write functions to operate.
+ *
+ * Example:
+ * > // Send a byte to a second HalfDuplex device, and read the response
+ * >
+ * > #include "mbed.h"
+ * >
+ * > // p9 and p10 should be wired together to form "a"
+ * > // p28 and p27 should be wired together to form "b"
+ * > // p9/p10 should be wired to p28/p27 as the Half Duplex connection
+ * >
+ * > SerialHalfDuplex a(p9, p10);
+ * > SerialHalfDuplex b(p28, p27);
+ * >
+ * > void b_rx() { // second device response
+ * > b.putc(b.getc() + 4);
+ * > }
+ * >
+ * > int main() {
+ * > b.attach(&b_rx);
+ * > for(int c = 'A'; c < 'Z'; c++) {
+ * > a.putc(c);
+ * > printf("sent [%c]\n", c);
+ * > wait(0.5); // b should respond
+ * > if(a.readable()) {
+ * > printf("received [%c]\n", a.getc());
+ * > }
+ * > }
+ * > }
+ *
+ * For Simplex and Full-Duplex Serial communication, see <Serial>
+ */
+class SerialHalfDuplex : public Serial {
+
+public:
+ /* Constructor: SerialHalfDuplex
+ * Create a half-duplex serial port, connected to the specified transmit
+ * and receive pins.
+ *
+ * These pins should be wired together, as well as to the target device
+ *
+ * Variables:
+ * tx - Transmit pin
+ * rx - Receive pin
+ */
+ SerialHalfDuplex(PinName tx, PinName rx, const char *name = NULL);
+
+#if 0 // Inherited from Serial class, for documentation
+ /* Function: baud
+ * Set the baud rate of the serial port
+ *
+ * Variables:
+ * baudrate - The baudrate of the serial port (default = 9600).
+ */
+ void baud(int baudrate);
+
+ enum Parity {
+ None = 0
+ , Odd
+ , Even
+ , Forced1
+ , Forced0
+ };
+
+ /* Function: format
+ * Set the transmission format used by the Serial port
+ *
+ * Variables:
+ * bits - The number of bits in a word (5-8; default = 8)
+ * parity - The parity used (Serial::None, Serial::Odd,
+Serial::Even, Serial::Forced1, Serial::Forced0; default = Serial::None)
+ * stop - The number of stop bits (1 or 2; default = 1)
+ */
+ void format(int bits = 8, Parity parity = Serial::None, int stop_bits
+= 1);
+
+ /* Function: putc
+ * Write a character
+ *
+ * Variables:
+ * c - The character to write to the serial port
+ */
+ int putc(int c);
+
+ /* Function: getc
+ * Read a character
+ *
+ * Read a character from the serial port. This call will block
+ * until a character is available. For testing if a character is
+ * available for reading, see <readable>.
+ *
+ * Variables:
+ * returns - The character read from the serial port
+ */
+ int getc();
+
+ /* Function: printf
+ * Write a formated string
+ *
+ * Variables:
+ * format - A printf-style format string, followed by the
+ * variables to use in formating the string.
+ */
+ int printf(const char* format, ...);
+
+ /* Function: scanf
+ * Read a formated string
+ *
+ * Variables:
+ * format - A scanf-style format string,
+ * followed by the pointers to variables to store the results.
+ */
+ int scanf(const char* format, ...);
+
+ /* Function: readable
+ * Determine if there is a character available to read
+ *
+ * Variables:
+ * returns - 1 if there is a character available to read, else 0
+ */
+ int readable();
+
+ /* Function: writeable
+ * Determine if there is space available to write a character
+ *
+ * Variables:
+ * returns - 1 if there is space to write a character, else 0
+ */
+ int writeable();
+
+ /* Function: attach
+ * Attach a function to call whenever a serial interrupt is generated
+ *
+ * Variables:
+ * fptr - A pointer to a void function, or 0 to set as none
+ */
+ void attach(void (*fptr)(void));
+
+ /* Function: attach
+ * Attach a member function to call whenever a serial interrupt is generated
+ *
+ * Variables:
+ * tptr - pointer to the object to call the member function on
+ * mptr - pointer to the member function to be called
+ */
+ template<typename T>
+ void attach(T* tptr, void (T::*mptr)(void));
+
+#endif
+
+protected:
+ PinName _txpin;
+
+ virtual int _putc(int c);
+ virtual int _getc(void);
+
+}; // End class SerialHalfDuplex
+
+} // End namespace
+
+#endif
+
+#endif
\ No newline at end of file
