HAHA
Dependencies: WebSocketClient mbed
routeur.cpp@5:daf08fff7abb, 2014-02-25 (annotated)
- Committer:
- RufflesAllD
- Date:
- Tue Feb 25 16:31:11 2014 +0000
- Revision:
- 5:daf08fff7abb
- Parent:
- 4:56b1ca37a175
Final, valid?, comment?
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
joGenie | 2:7515831bb5f5 | 1 | #include "routeur.hpp" |
joGenie | 2:7515831bb5f5 | 2 | |
joGenie | 4:56b1ca37a175 | 3 | #define CTRL_REG1 0x2A |
joGenie | 4:56b1ca37a175 | 4 | #define DATA_REG_W 0x3A |
joGenie | 4:56b1ca37a175 | 5 | #define DATA_REG_R 0x3B |
joGenie | 4:56b1ca37a175 | 6 | |
joGenie | 4:56b1ca37a175 | 7 | #define OUT_X_MSB 0x01 |
joGenie | 4:56b1ca37a175 | 8 | |
RufflesAllD | 5:daf08fff7abb | 9 | const char COORD_ADRESS[8] = {0x00}; // Adresse 64bits du coordinateur (si tous des 0, le routeur envoie à son coordinateur par défaut) |
joGenie | 4:56b1ca37a175 | 10 | |
joGenie | 2:7515831bb5f5 | 11 | Routeur::Routeur(PinName _tx, PinName _rx) : |
joGenie | 4:56b1ca37a175 | 12 | trame(_tx, _rx), |
RufflesAllD | 5:daf08fff7abb | 13 | accel(p9, p10), // Pin I2C (pour l'accéléromètre) |
RufflesAllD | 5:daf08fff7abb | 14 | piton(p30) // Pin DigitalIn (pour le contact sec) |
joGenie | 4:56b1ca37a175 | 15 | { |
RufflesAllD | 5:daf08fff7abb | 16 | // reset le xbee |
joGenie | 4:56b1ca37a175 | 17 | DigitalOut reset(p8); |
joGenie | 4:56b1ca37a175 | 18 | |
joGenie | 4:56b1ca37a175 | 19 | reset = 0; |
joGenie | 4:56b1ca37a175 | 20 | wait(0.4); |
joGenie | 4:56b1ca37a175 | 21 | reset = 1; |
RufflesAllD | 5:daf08fff7abb | 22 | } |
RufflesAllD | 5:daf08fff7abb | 23 | |
RufflesAllD | 5:daf08fff7abb | 24 | void Routeur::setPanID(string _pan) |
RufflesAllD | 5:daf08fff7abb | 25 | { |
RufflesAllD | 5:daf08fff7abb | 26 | pan = _pan; |
RufflesAllD | 5:daf08fff7abb | 27 | trame.sendATCommand("ID", pan.c_str(), pan.length());// Set le PANID selon le fichier de config |
RufflesAllD | 5:daf08fff7abb | 28 | trame.sendATCommand("WR", 0, 0); // Écrit la valeur du PANID en mémoire |
RufflesAllD | 5:daf08fff7abb | 29 | trame.sendATCommand("AC", 0, 0); // Applique les changements effectués |
RufflesAllD | 5:daf08fff7abb | 30 | } |
RufflesAllD | 5:daf08fff7abb | 31 | |
RufflesAllD | 5:daf08fff7abb | 32 | void Routeur::setType(int t) |
RufflesAllD | 5:daf08fff7abb | 33 | { |
RufflesAllD | 5:daf08fff7abb | 34 | type = static_cast<Type>(t); // 0: accéléromètre 1: switch |
RufflesAllD | 5:daf08fff7abb | 35 | if (type == Accelerometer) |
RufflesAllD | 5:daf08fff7abb | 36 | initAccel(); |
RufflesAllD | 5:daf08fff7abb | 37 | } |
RufflesAllD | 5:daf08fff7abb | 38 | |
RufflesAllD | 5:daf08fff7abb | 39 | void Routeur::setPeriod(int t) |
RufflesAllD | 5:daf08fff7abb | 40 | { |
RufflesAllD | 5:daf08fff7abb | 41 | period = t; |
RufflesAllD | 5:daf08fff7abb | 42 | } |
RufflesAllD | 5:daf08fff7abb | 43 | |
RufflesAllD | 5:daf08fff7abb | 44 | void Routeur::getValues() |
RufflesAllD | 5:daf08fff7abb | 45 | { |
RufflesAllD | 5:daf08fff7abb | 46 | if (type == Accelerometer) |
RufflesAllD | 5:daf08fff7abb | 47 | sendAccelValues(); |
RufflesAllD | 5:daf08fff7abb | 48 | else |
RufflesAllD | 5:daf08fff7abb | 49 | sendSwitchValue(); |
RufflesAllD | 5:daf08fff7abb | 50 | |
RufflesAllD | 5:daf08fff7abb | 51 | wait(period); |
joGenie | 4:56b1ca37a175 | 52 | } |
joGenie | 4:56b1ca37a175 | 53 | |
joGenie | 4:56b1ca37a175 | 54 | void Routeur::initAccel() |
joGenie | 4:56b1ca37a175 | 55 | { |
joGenie | 4:56b1ca37a175 | 56 | // Mise de l'accéléromètre en standby |
joGenie | 4:56b1ca37a175 | 57 | writeRegister(CTRL_REG1, 0x10); |
joGenie | 4:56b1ca37a175 | 58 | |
joGenie | 4:56b1ca37a175 | 59 | // Set offset de l'accéléromètre |
joGenie | 4:56b1ca37a175 | 60 | writeRegister(0x31, 0xEE); |
joGenie | 4:56b1ca37a175 | 61 | |
joGenie | 4:56b1ca37a175 | 62 | // activate de l'accéléromètre |
joGenie | 4:56b1ca37a175 | 63 | char c; |
joGenie | 4:56b1ca37a175 | 64 | readRegister(CTRL_REG1, &c); |
joGenie | 4:56b1ca37a175 | 65 | writeRegister(CTRL_REG1, c | 0x01); |
joGenie | 4:56b1ca37a175 | 66 | } |
joGenie | 4:56b1ca37a175 | 67 | |
joGenie | 4:56b1ca37a175 | 68 | void Routeur::sendSwitchValue() |
joGenie | 4:56b1ca37a175 | 69 | { |
joGenie | 4:56b1ca37a175 | 70 | switchValue[0] = piton; |
joGenie | 4:56b1ca37a175 | 71 | |
joGenie | 4:56b1ca37a175 | 72 | trame.sendTransmitRequest(COORD_ADRESS, switchValue, 1); |
joGenie | 4:56b1ca37a175 | 73 | } |
joGenie | 4:56b1ca37a175 | 74 | |
joGenie | 4:56b1ca37a175 | 75 | void Routeur::sendAccelValues() |
joGenie | 2:7515831bb5f5 | 76 | { |
joGenie | 4:56b1ca37a175 | 77 | int ack = readRegisters(OUT_X_MSB, 6, accelValues); |
joGenie | 4:56b1ca37a175 | 78 | |
joGenie | 4:56b1ca37a175 | 79 | trame.sendTransmitRequest(COORD_ADRESS, accelValues, 6); |
joGenie | 4:56b1ca37a175 | 80 | } |
joGenie | 4:56b1ca37a175 | 81 | |
joGenie | 4:56b1ca37a175 | 82 | int Routeur::readRegister(char reg, char* data) |
joGenie | 4:56b1ca37a175 | 83 | { |
joGenie | 4:56b1ca37a175 | 84 | int ack = 0; |
joGenie | 4:56b1ca37a175 | 85 | accel.start(); |
joGenie | 4:56b1ca37a175 | 86 | ack = accel.write(DATA_REG_W); |
joGenie | 4:56b1ca37a175 | 87 | ack = accel.write(reg); |
joGenie | 4:56b1ca37a175 | 88 | accel.start(); |
joGenie | 4:56b1ca37a175 | 89 | ack = accel.write(DATA_REG_R); |
joGenie | 4:56b1ca37a175 | 90 | data[0] = accel.read(0); |
joGenie | 4:56b1ca37a175 | 91 | accel.stop(); |
joGenie | 4:56b1ca37a175 | 92 | |
joGenie | 4:56b1ca37a175 | 93 | return ack; |
joGenie | 4:56b1ca37a175 | 94 | } |
joGenie | 4:56b1ca37a175 | 95 | |
joGenie | 4:56b1ca37a175 | 96 | int Routeur::readRegisters(char reg, int range, char* data) |
joGenie | 4:56b1ca37a175 | 97 | { |
joGenie | 4:56b1ca37a175 | 98 | int ack = 0; |
joGenie | 4:56b1ca37a175 | 99 | accel.start(); |
joGenie | 4:56b1ca37a175 | 100 | ack = accel.write(DATA_REG_W); |
joGenie | 4:56b1ca37a175 | 101 | ack = accel.write(reg); |
joGenie | 4:56b1ca37a175 | 102 | accel.start(); |
joGenie | 4:56b1ca37a175 | 103 | ack = accel.write(DATA_REG_R); |
joGenie | 4:56b1ca37a175 | 104 | for (int i = 0; i < range - 1; i++) |
joGenie | 4:56b1ca37a175 | 105 | data[i] = accel.read(1); |
joGenie | 4:56b1ca37a175 | 106 | data[range - 1] = accel.read(0); |
joGenie | 4:56b1ca37a175 | 107 | accel.stop(); |
joGenie | 4:56b1ca37a175 | 108 | |
joGenie | 4:56b1ca37a175 | 109 | return ack; |
joGenie | 4:56b1ca37a175 | 110 | } |
joGenie | 4:56b1ca37a175 | 111 | |
joGenie | 4:56b1ca37a175 | 112 | int Routeur::writeRegister(char reg, char data) |
joGenie | 4:56b1ca37a175 | 113 | { |
joGenie | 4:56b1ca37a175 | 114 | int ack = 0; |
joGenie | 4:56b1ca37a175 | 115 | accel.start(); |
joGenie | 4:56b1ca37a175 | 116 | ack = accel.write(DATA_REG_W); |
joGenie | 4:56b1ca37a175 | 117 | ack = accel.write(reg); |
joGenie | 4:56b1ca37a175 | 118 | ack = accel.write(data); |
joGenie | 4:56b1ca37a175 | 119 | accel.stop(); |
joGenie | 4:56b1ca37a175 | 120 | |
joGenie | 4:56b1ca37a175 | 121 | return ack; |
joGenie | 4:56b1ca37a175 | 122 | } |