HAHA

Dependencies:   WebSocketClient mbed

Committer:
RufflesAllD
Date:
Mon Apr 07 15:43:16 2014 +0000
Revision:
6:f1e9dc6b24c7
Parent:
5:daf08fff7abb
mn

Who changed what in which revision?

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