mirror of
https://github.com/RobotechLille/cdf2018-principal
synced 2024-12-22 05:30:37 +01:00
Hard reset LCD
This commit is contained in:
parent
595e8fa2a1
commit
f0778e621f
|
@ -16,6 +16,6 @@ Ce document a pour but de recenser les connexions entre les différents composan
|
||||||
|
|
||||||
- BCM 2 (SDA), BCM 3 (SCL) : liaison I2C (LCD, IMU, SRF08)
|
- BCM 2 (SDA), BCM 3 (SCL) : liaison I2C (LCD, IMU, SRF08)
|
||||||
- BCM 14 (TXD), BCM 15 (RXD) : liaison série (PC debug)
|
- BCM 14 (TXD), BCM 15 (RXD) : liaison série (PC debug)
|
||||||
- BCM 12 (PWM0), BCM 13 (PWM1) : contrôleur moteur
|
|
||||||
- BCM 17, BCM 27 : bouton rouge, bouton jaune
|
- BCM 17, BCM 27 : bouton rouge, bouton jaune
|
||||||
- BCM 22 : tirette
|
- BCM 22 : tirette
|
||||||
|
- BCM 23 : LCD on/off
|
||||||
|
|
102
chef/src/imu.c
102
chef/src/imu.c
|
@ -1,34 +1,116 @@
|
||||||
#include "imu.h"
|
#include <math.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "i2c.h"
|
#include "i2c.h"
|
||||||
|
#include "imu.h"
|
||||||
|
|
||||||
int gyroFd;
|
int gyroFd;
|
||||||
int accelFd;
|
int acelFd;
|
||||||
|
pthread_t tIMU;
|
||||||
|
|
||||||
void configureIMU()
|
void configureIMU()
|
||||||
{
|
{
|
||||||
gyroFd = openI2C(GYRO_ADDR);
|
gyroFd = openI2C(GYRO_ADDR);
|
||||||
accelFd = openI2C(ACCEL_ADDR);
|
acelFd = openI2C(ACEL_ADDR);
|
||||||
|
|
||||||
writeI2C(gyroFd, GYRO_LOW_ODR, 0x00); // Low_ODR = 0 (low speed ODR disabled)
|
writeI2C(gyroFd, GYRO_CTRL_REG1, 0x0F); // PD = 1 (normal mode); Zen = Yen = Xen = 1 (all axes enabled)
|
||||||
writeI2C(gyroFd, GYRO_CTRL_REG4, 0x00); // FS = 00 (+/- 250 dps full scale)
|
writeI2C(gyroFd, GYRO_CTRL_REG4, 0xB0); // Block data update, 2000 dps full scale
|
||||||
writeI2C(gyroFd, GYRO_CTRL_REG1, 0x6F); // DR = 01 (200 Hz ODR); BW = 10 (50 Hz bandwidth); PD = 1 (normal mode); Zen = Yen = Xen = 1 (all axes enabled)
|
|
||||||
|
writeI2C(acelFd, ACEL_CTRL1, 0x6F); // 50 Hz Acceleration data-rate; block data update; Zen = Yen = Xen = 1 (all axes enabled)
|
||||||
|
writeI2C(acelFd, ACEL_CTRL2, 0x20); // +/- 16G full scale
|
||||||
|
|
||||||
|
pthread_create(&tIMU, NULL, TaskIMU, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool connectedIMU()
|
bool connectedIMU()
|
||||||
{
|
{
|
||||||
return (uint8_t) readI2C(gyroFd, GYRO_WHO_AM_I) == GYRO_IDENTITY;
|
return (uint8_t)readI2C(gyroFd, GYRO_WHO_AM_I) == GYRO_IDENTITY && (uint8_t)readI2C(acelFd, ACEL_WHO_AM_I) == ACEL_IDENTITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct gyroRaw readGyroRaw()
|
struct axesRaw readGyroRaw()
|
||||||
{
|
{
|
||||||
struct gyroRaw res;
|
struct axesRaw res;
|
||||||
res.x = (readI2C(gyroFd, GYRO_OUT_X_H) << 8 | readI2C(gyroFd, GYRO_OUT_X_L));
|
res.x = (readI2C(gyroFd, GYRO_OUT_X_H) << 8 | readI2C(gyroFd, GYRO_OUT_X_L));
|
||||||
res.y = (readI2C(gyroFd, GYRO_OUT_Y_H) << 8 | readI2C(gyroFd, GYRO_OUT_Y_L));
|
res.y = (readI2C(gyroFd, GYRO_OUT_Y_H) << 8 | readI2C(gyroFd, GYRO_OUT_Y_L));
|
||||||
res.z = (readI2C(gyroFd, GYRO_OUT_Z_H) << 8 | readI2C(gyroFd, GYRO_OUT_Z_L));
|
res.z = (readI2C(gyroFd, GYRO_OUT_Z_H) << 8 | readI2C(gyroFd, GYRO_OUT_Z_L));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct axes readGyro()
|
||||||
|
{
|
||||||
|
struct axesRaw raw = readGyroRaw();
|
||||||
|
struct axes computed;
|
||||||
|
computed.x = (float)raw.x * GYRO_GAIN;
|
||||||
|
computed.y = (float)raw.y * GYRO_GAIN;
|
||||||
|
computed.z = (float)raw.z * GYRO_GAIN;
|
||||||
|
return computed;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct axesRaw readAcelRaw()
|
||||||
|
{
|
||||||
|
struct axesRaw res;
|
||||||
|
res.x = (readI2C(acelFd, ACEL_OUT_X_H_A) << 8 | readI2C(acelFd, ACEL_OUT_X_L_A));
|
||||||
|
res.y = (readI2C(acelFd, ACEL_OUT_Y_H_A) << 8 | readI2C(acelFd, ACEL_OUT_Y_L_A));
|
||||||
|
res.z = (readI2C(acelFd, ACEL_OUT_Z_H_A) << 8 | readI2C(acelFd, ACEL_OUT_Z_L_A));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct axes readAcel()
|
||||||
|
{
|
||||||
|
struct axesRaw raw = readAcelRaw();
|
||||||
|
struct axes computed;
|
||||||
|
computed.x = atan2(raw.y, raw.z) + M_PI;
|
||||||
|
computed.y = atan2(raw.z, raw.x) + M_PI;
|
||||||
|
computed.z = atan2(raw.x, raw.y) + M_PI;
|
||||||
|
return computed;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct timespec imuStart;
|
||||||
|
struct timespec imuNow;
|
||||||
|
struct timespec imuEcoule;
|
||||||
|
|
||||||
|
void* TaskIMU(void* pData)
|
||||||
|
{
|
||||||
|
(void)pData;
|
||||||
|
|
||||||
|
struct axes gyroNew;
|
||||||
|
struct axes gyro;
|
||||||
|
struct axes acel;
|
||||||
|
struct axes complemFilter;
|
||||||
|
|
||||||
|
clock_gettime(CLOCK_REALTIME, &imuStart);
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
clock_gettime(CLOCK_REALTIME, &imuNow);
|
||||||
|
if ((imuNow.tv_nsec - imuStart.tv_nsec) < 0) {
|
||||||
|
imuEcoule.tv_sec = imuNow.tv_sec - imuStart.tv_sec - 1;
|
||||||
|
imuEcoule.tv_nsec = imuNow.tv_nsec - imuStart.tv_nsec + 1000000000UL;
|
||||||
|
} else {
|
||||||
|
imuEcoule.tv_sec = imuNow.tv_sec - imuStart.tv_sec;
|
||||||
|
imuEcoule.tv_nsec = imuNow.tv_nsec - imuStart.tv_nsec;
|
||||||
|
}
|
||||||
|
imuStart.tv_sec = imuNow.tv_sec;
|
||||||
|
imuStart.tv_nsec = imuNow.tv_nsec;
|
||||||
|
float dt = imuEcoule.tv_sec + imuStart.tv_nsec * 1E-9;
|
||||||
|
|
||||||
|
gyroNew = readGyro();
|
||||||
|
gyro.x += gyroNew.x * dt;
|
||||||
|
gyro.y += gyroNew.y * dt;
|
||||||
|
gyro.z += gyroNew.z * dt;
|
||||||
|
|
||||||
|
acel = readAcel();
|
||||||
|
|
||||||
|
/* complemFilter.x = c * (complemFilter.x + gyroNew.x * dt) + (1 - AA) * acel.x; */
|
||||||
|
|
||||||
|
usleep(IMU_INTERVAL * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void deconfigureIMU()
|
void deconfigureIMU()
|
||||||
{
|
{
|
||||||
|
pthread_cancel(tIMU);
|
||||||
}
|
}
|
||||||
|
|
180
chef/src/imu.h
180
chef/src/imu.h
|
@ -5,26 +5,30 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#define GYRO_ADDR 0x6b
|
#define GYRO_ADDR 0x6b
|
||||||
#define ACCEL_ADDR 0x1d
|
#define ACEL_ADDR 0x1d
|
||||||
|
#define IMU_INTERVAL 10
|
||||||
|
#define COMPLEM_FILTER_RATE 0.98
|
||||||
|
// ms (100 Hz)
|
||||||
|
|
||||||
// Gyro
|
// Gyro
|
||||||
|
|
||||||
|
#define GYRO_GAIN 0.07
|
||||||
#define GYRO_WHO_AM_I 0x0F
|
#define GYRO_WHO_AM_I 0x0F
|
||||||
#define GYRO_IDENTITY 0xD7
|
#define GYRO_IDENTITY 0xD7
|
||||||
|
|
||||||
#define GYRO_CTRL1 0x20 // D20H
|
#define GYRO_CTRL1 0x20 // D20H
|
||||||
#define GYRO_CTRL_REG1 0x20 // D20, 4200D
|
#define GYRO_CTRL_REG1 0x20 // D20, 4200D
|
||||||
#define GYRO_CTRL2 0x21 // D20H
|
#define GYRO_CTRL2 0x21 // D20H
|
||||||
#define GYRO_CTRL_REG2 0x21 // D20, 4200D
|
#define GYRO_CTRL_REG2 0x21 // D20, 4200D
|
||||||
#define GYRO_CTRL3 0x22 // D20H
|
#define GYRO_CTRL3 0x22 // D20H
|
||||||
#define GYRO_CTRL_REG3 0x22 // D20, 4200D
|
#define GYRO_CTRL_REG3 0x22 // D20, 4200D
|
||||||
#define GYRO_CTRL4 0x23 // D20H
|
#define GYRO_CTRL4 0x23 // D20H
|
||||||
#define GYRO_CTRL_REG4 0x23 // D20, 4200D
|
#define GYRO_CTRL_REG4 0x23 // D20, 4200D
|
||||||
#define GYRO_CTRL5 0x24 // D20H
|
#define GYRO_CTRL5 0x24 // D20H
|
||||||
#define GYRO_CTRL_REG5 0x24 // D20, 4200D
|
#define GYRO_CTRL_REG5 0x24 // D20, 4200D
|
||||||
#define GYRO_REFERENCE 0x25
|
#define GYRO_REFERENCE 0x25
|
||||||
#define GYRO_OUT_TEMP 0x26
|
#define GYRO_OUT_TEMP 0x26
|
||||||
#define GYRO_STATUS 0x27 // D20H
|
#define GYRO_STATUS 0x27 // D20H
|
||||||
#define GYRO_STATUS_REG 0x27 // D20, 4200D
|
#define GYRO_STATUS_REG 0x27 // D20, 4200D
|
||||||
|
|
||||||
#define GYRO_OUT_X_L 0x28
|
#define GYRO_OUT_X_L 0x28
|
||||||
|
@ -34,43 +38,161 @@
|
||||||
#define GYRO_OUT_Z_L 0x2C
|
#define GYRO_OUT_Z_L 0x2C
|
||||||
#define GYRO_OUT_Z_H 0x2D
|
#define GYRO_OUT_Z_H 0x2D
|
||||||
|
|
||||||
#define GYRO_FIFO_CTRL 0x2E // D20H
|
#define GYRO_FIFO_CTRL 0x2E // D20H
|
||||||
#define GYRO_FIFO_CTRL_REG 0x2E // D20, 4200D
|
#define GYRO_FIFO_CTRL_REG 0x2E // D20, 4200D
|
||||||
#define GYRO_FIFO_SRC 0x2F // D20H
|
#define GYRO_FIFO_SRC 0x2F // D20H
|
||||||
#define GYRO_FIFO_SRC_REG 0x2F // D20, 4200D
|
#define GYRO_FIFO_SRC_REG 0x2F // D20, 4200D
|
||||||
|
|
||||||
#define GYRO_IG_CFG 0x30 // D20H
|
#define GYRO_IG_CFG 0x30 // D20H
|
||||||
#define GYRO_INT1_CFG 0x30 // D20, 4200D
|
#define GYRO_INT1_CFG 0x30 // D20, 4200D
|
||||||
#define GYRO_IG_SRC 0x31 // D20H
|
#define GYRO_IG_SRC 0x31 // D20H
|
||||||
#define GYRO_INT1_SRC 0x31 // D20, 4200D
|
#define GYRO_INT1_SRC 0x31 // D20, 4200D
|
||||||
#define GYRO_IG_THS_XH 0x32 // D20H
|
#define GYRO_IG_THS_XH 0x32 // D20H
|
||||||
#define GYRO_INT1_THS_XH 0x32 // D20, 4200D
|
#define GYRO_INT1_THS_XH 0x32 // D20, 4200D
|
||||||
#define GYRO_IG_THS_XL 0x33 // D20H
|
#define GYRO_IG_THS_XL 0x33 // D20H
|
||||||
#define GYRO_INT1_THS_XL 0x33 // D20, 4200D
|
#define GYRO_INT1_THS_XL 0x33 // D20, 4200D
|
||||||
#define GYRO_IG_THS_YH 0x34 // D20H
|
#define GYRO_IG_THS_YH 0x34 // D20H
|
||||||
#define GYRO_INT1_THS_YH 0x34 // D20, 4200D
|
#define GYRO_INT1_THS_YH 0x34 // D20, 4200D
|
||||||
#define GYRO_IG_THS_YL 0x35 // D20H
|
#define GYRO_IG_THS_YL 0x35 // D20H
|
||||||
#define GYRO_INT1_THS_YL 0x35 // D20, 4200D
|
#define GYRO_INT1_THS_YL 0x35 // D20, 4200D
|
||||||
#define GYRO_IG_THS_ZH 0x36 // D20H
|
#define GYRO_IG_THS_ZH 0x36 // D20H
|
||||||
#define GYRO_INT1_THS_ZH 0x36 // D20, 4200D
|
#define GYRO_INT1_THS_ZH 0x36 // D20, 4200D
|
||||||
#define GYRO_IG_THS_ZL 0x37 // D20H
|
#define GYRO_IG_THS_ZL 0x37 // D20H
|
||||||
#define GYRO_INT1_THS_ZL 0x37 // D20, 4200D
|
#define GYRO_INT1_THS_ZL 0x37 // D20, 4200D
|
||||||
#define GYRO_IG_DURATION 0x38 // D20H
|
#define GYRO_IG_DURATION 0x38 // D20H
|
||||||
#define GYRO_INT1_DURATION 0x38 // D20, 4200D
|
#define GYRO_INT1_DURATION 0x38 // D20, 4200D
|
||||||
|
|
||||||
#define GYRO_LOW_ODR 0x39 // D20H
|
#define GYRO_LOW_ODR 0x39 // D20H
|
||||||
|
|
||||||
|
// Aceletomètre
|
||||||
|
|
||||||
|
#define ACEL_IDENTITY 0x49
|
||||||
|
|
||||||
|
#define ACEL_TEMP_OUT_L 0x05 // D
|
||||||
|
#define ACEL_TEMP_OUT_H 0x06 // D
|
||||||
|
|
||||||
|
#define ACEL_STATUS_M 0x07 // D
|
||||||
|
|
||||||
|
#define ACEL_INT_CTRL_M 0x12 // D
|
||||||
|
#define ACEL_INT_SRC_M 0x13 // D
|
||||||
|
#define ACEL_INT_THS_L_M 0x14 // D
|
||||||
|
#define ACEL_INT_THS_H_M 0x15 // D
|
||||||
|
|
||||||
|
#define ACEL_OFFSET_X_L_M 0x16 // D
|
||||||
|
#define ACEL_OFFSET_X_H_M 0x17 // D
|
||||||
|
#define ACEL_OFFSET_Y_L_M 0x18 // D
|
||||||
|
#define ACEL_OFFSET_Y_H_M 0x19 // D
|
||||||
|
#define ACEL_OFFSET_Z_L_M 0x1A // D
|
||||||
|
#define ACEL_OFFSET_Z_H_M 0x1B // D
|
||||||
|
#define ACEL_REFERENCE_X 0x1C // D
|
||||||
|
#define ACEL_REFERENCE_Y 0x1D // D
|
||||||
|
#define ACEL_REFERENCE_Z 0x1E // D
|
||||||
|
|
||||||
|
#define ACEL_CTRL0 0x1F // D
|
||||||
|
#define ACEL_CTRL1 0x20 // D
|
||||||
|
#define ACEL_CTRL_REG1_A 0x20 // DLH DLM DLHC
|
||||||
|
#define ACEL_CTRL2 0x21 // D
|
||||||
|
#define ACEL_CTRL_REG2_A 0x21 // DLH DLM DLHC
|
||||||
|
#define ACEL_CTRL3 0x22 // D
|
||||||
|
#define ACEL_CTRL_REG3_A 0x22 // DLH DLM DLHC
|
||||||
|
#define ACEL_CTRL4 0x23 // D
|
||||||
|
#define ACEL_CTRL_REG4_A 0x23 // DLH DLM DLHC
|
||||||
|
#define ACEL_CTRL5 0x24 // D
|
||||||
|
#define ACEL_CTRL_REG5_A 0x24 // DLH DLM DLHC
|
||||||
|
#define ACEL_CTRL6 0x25 // D
|
||||||
|
#define ACEL_CTRL_REG6_A 0x25 // DLHC
|
||||||
|
#define ACEL_HP_FILTER_RESET_A 0x25 // DLH DLM
|
||||||
|
#define ACEL_CTRL7 0x26 // D
|
||||||
|
#define ACEL_REFERENCE_A 0x26 // DLH DLM DLHC
|
||||||
|
#define ACEL_STATUS_A 0x27 // D
|
||||||
|
#define ACEL_STATUS_REG_A 0x27 // DLH DLM DLHC
|
||||||
|
|
||||||
|
#define ACEL_OUT_X_L_A 0x28
|
||||||
|
#define ACEL_OUT_X_H_A 0x29
|
||||||
|
#define ACEL_OUT_Y_L_A 0x2A
|
||||||
|
#define ACEL_OUT_Y_H_A 0x2B
|
||||||
|
#define ACEL_OUT_Z_L_A 0x2C
|
||||||
|
#define ACEL_OUT_Z_H_A 0x2D
|
||||||
|
|
||||||
|
#define ACEL_FIFO_CTRL 0x2E // D
|
||||||
|
#define ACEL_FIFO_CTRL_REG_A 0x2E // DLHC
|
||||||
|
#define ACEL_FIFO_SRC 0x2F // D
|
||||||
|
#define ACEL_FIFO_SRC_REG_A 0x2F // DLHC
|
||||||
|
|
||||||
|
#define ACEL_IG_CFG1 0x30 // D
|
||||||
|
#define ACEL_INT1_CFG_A 0x30 // DLH DLM DLHC
|
||||||
|
#define ACEL_IG_SRC1 0x31 // D
|
||||||
|
#define ACEL_INT1_SRC_A 0x31 // DLH DLM DLHC
|
||||||
|
#define ACEL_IG_THS1 0x32 // D
|
||||||
|
#define ACEL_INT1_THS_A 0x32 // DLH DLM DLHC
|
||||||
|
#define ACEL_IG_DUR1 0x33 // D
|
||||||
|
#define ACEL_INT1_DURATION_A 0x33 // DLH DLM DLHC
|
||||||
|
#define ACEL_IG_CFG2 0x34 // D
|
||||||
|
#define ACEL_INT2_CFG_A 0x34 // DLH DLM DLHC
|
||||||
|
#define ACEL_IG_SRC2 0x35 // D
|
||||||
|
#define ACEL_INT2_SRC_A 0x35 // DLH DLM DLHC
|
||||||
|
#define ACEL_IG_THS2 0x36 // D
|
||||||
|
#define ACEL_INT2_THS_A 0x36 // DLH DLM DLHC
|
||||||
|
#define ACEL_IG_DUR2 0x37 // D
|
||||||
|
#define ACEL_INT2_DURATION_A 0x37 // DLH DLM DLHC
|
||||||
|
|
||||||
|
#define ACEL_CLICK_CFG 0x38 // D
|
||||||
|
#define ACEL_CLICK_CFG_A 0x38 // DLHC
|
||||||
|
#define ACEL_CLICK_SRC 0x39 // D
|
||||||
|
#define ACEL_CLICK_SRC_A 0x39 // DLHC
|
||||||
|
#define ACEL_CLICK_THS 0x3A // D
|
||||||
|
#define ACEL_CLICK_THS_A 0x3A // DLHC
|
||||||
|
#define ACEL_TIME_LIMIT 0x3B // D
|
||||||
|
#define ACEL_TIME_LIMIT_A 0x3B // DLHC
|
||||||
|
#define ACEL_TIME_LATENCY 0x3C // D
|
||||||
|
#define ACEL_TIME_LATENCY_A 0x3C // DLHC
|
||||||
|
#define ACEL_TIME_WINDOW 0x3D // D
|
||||||
|
#define ACEL_TIME_WINDOW_A 0x3D // DLHC
|
||||||
|
|
||||||
|
#define ACEL_Act_THS 0x3E // D
|
||||||
|
#define ACEL_Act_DUR 0x3F // D
|
||||||
|
|
||||||
|
#define ACEL_CRA_REG_M 0x00 // DLH DLM DLHC
|
||||||
|
#define ACEL_CRB_REG_M 0x01 // DLH DLM DLHC
|
||||||
|
#define ACEL_MR_REG_M 0x02 // DLH DLM DLHC
|
||||||
|
|
||||||
|
#define ACEL_SR_REG_M 0x09 // DLH DLM DLHC
|
||||||
|
#define ACEL_IRA_REG_M 0x0A // DLH DLM DLHC
|
||||||
|
#define ACEL_IRB_REG_M 0x0B // DLH DLM DLHC
|
||||||
|
#define ACEL_IRC_REG_M 0x0C // DLH DLM DLHC
|
||||||
|
|
||||||
|
#define ACEL_WHO_AM_I 0x0F // D
|
||||||
|
#define ACEL_WHO_AM_I_M 0x0F // DLM
|
||||||
|
|
||||||
|
#define ACEL_TEMP_OUT_H_M 0x31 // DLHC
|
||||||
|
#define ACEL_TEMP_OUT_L_M 0x32 // DLHC
|
||||||
|
|
||||||
|
#define ACEL_D_OUT_X_L_M 0x08
|
||||||
|
#define ACEL_D_OUT_X_H_M 0x09
|
||||||
|
#define ACEL_D_OUT_Y_L_M 0x0A
|
||||||
|
#define ACEL_D_OUT_Y_H_M 0x0B
|
||||||
|
#define ACEL_D_OUT_Z_L_M 0x0C
|
||||||
|
#define ACEL_D_OUT_Z_H_M 0x0D
|
||||||
|
|
||||||
// Structures
|
// Structures
|
||||||
|
|
||||||
struct gyroRaw {
|
struct axesRaw {
|
||||||
int16_t x;
|
int16_t x;
|
||||||
int16_t y;
|
int16_t y;
|
||||||
int16_t z;
|
int16_t z;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct axes {
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
float z;
|
||||||
|
};
|
||||||
|
|
||||||
void configureIMU();
|
void configureIMU();
|
||||||
bool connectedIMU();
|
bool connectedIMU();
|
||||||
void deconfigureIMU();
|
void deconfigureIMU();
|
||||||
struct gyroRaw readGyroRaw();
|
struct axesRaw readGyroRaw();
|
||||||
|
struct axesRaw readAcelRaw();
|
||||||
|
void* TaskIMU(void* pData);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -16,6 +16,15 @@ uint8_t pos;
|
||||||
void initLCD()
|
void initLCD()
|
||||||
{
|
{
|
||||||
lcdFd = openI2C(LCD_ADDR);
|
lcdFd = openI2C(LCD_ADDR);
|
||||||
|
offLCD();
|
||||||
|
onLCD();
|
||||||
|
pinMode(LCD_ON_PIN, OUTPUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onLCD()
|
||||||
|
{
|
||||||
|
digitalWrite(LCD_ON_PIN, LOW);
|
||||||
|
delay(100);
|
||||||
|
|
||||||
// TODO More details
|
// TODO More details
|
||||||
sendLCD(0x33, LCD_MODE_CMD); // Initialise
|
sendLCD(0x33, LCD_MODE_CMD); // Initialise
|
||||||
|
@ -25,7 +34,25 @@ void initLCD()
|
||||||
sendLCD(0x28, LCD_MODE_CMD); // Data length, number of lines, font size
|
sendLCD(0x28, LCD_MODE_CMD); // Data length, number of lines, font size
|
||||||
clearLCD();
|
clearLCD();
|
||||||
|
|
||||||
delayMicroseconds(500);
|
delay(50);
|
||||||
|
}
|
||||||
|
|
||||||
|
void offLCD()
|
||||||
|
{
|
||||||
|
digitalWrite(LCD_ON_PIN, HIGH);
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetLCD()
|
||||||
|
{
|
||||||
|
char line1bkp[LCD_NB_TOTAL];
|
||||||
|
char line2bkp[LCD_NB_TOTAL];
|
||||||
|
memcpy(line1bkp, virtual, LCD_NB_CHARS * sizeof(char));
|
||||||
|
memcpy(line2bkp, virtual + LCD_NB_CHARS, LCD_NB_CHARS * sizeof(char));
|
||||||
|
offLCD();
|
||||||
|
onLCD();
|
||||||
|
printToLCD(LCD_LINE_1, line1bkp);
|
||||||
|
printToLCD(LCD_LINE_2, line2bkp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearLCD()
|
void clearLCD()
|
||||||
|
|
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
#define LCD_MASK_ENABLE 0x04 // Enable bit
|
#define LCD_MASK_ENABLE 0x04 // Enable bit
|
||||||
|
|
||||||
|
#define LCD_ON_PIN 4
|
||||||
|
|
||||||
// Public
|
// Public
|
||||||
void initLCD();
|
void initLCD();
|
||||||
void clearLCD();
|
void clearLCD();
|
||||||
|
@ -39,5 +41,8 @@ void printLCD(char* s);
|
||||||
void displayLCD();
|
void displayLCD();
|
||||||
void lockLCD();
|
void lockLCD();
|
||||||
void unlockLCD();
|
void unlockLCD();
|
||||||
|
void onLCD();
|
||||||
|
void offLCD();
|
||||||
|
void resetLCD();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -74,6 +74,7 @@ void stopParcours()
|
||||||
stop();
|
stop();
|
||||||
disableConsigne();
|
disableConsigne();
|
||||||
|
|
||||||
|
resetLCD();
|
||||||
updateTimeDisplay();
|
updateTimeDisplay();
|
||||||
printRightLCD(LCD_LINE_1, "FIN");
|
printRightLCD(LCD_LINE_1, "FIN");
|
||||||
showPoints();
|
showPoints();
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
#include <unistd.h> // sleep
|
#include <unistd.h> // sleep
|
||||||
#include <wiringPi.h>
|
#include <wiringPi.h>
|
||||||
|
|
||||||
#include "CA.h"
|
|
||||||
#include "CF.h"
|
#include "CF.h"
|
||||||
|
#include "actionneurs.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "i2c.h"
|
#include "i2c.h"
|
||||||
#include "ihm.h"
|
#include "ihm.h"
|
||||||
|
@ -36,11 +36,10 @@ int main()
|
||||||
configureDebug();
|
configureDebug();
|
||||||
configureIHM();
|
configureIHM();
|
||||||
configureCF();
|
configureCF();
|
||||||
configureCA();
|
|
||||||
configureIMU();
|
configureIMU();
|
||||||
|
configureActionneurs();
|
||||||
configurePosition();
|
configurePosition();
|
||||||
configureMovement();
|
configureMovement();
|
||||||
configureActionneurs();
|
|
||||||
startDebug();
|
startDebug();
|
||||||
startIHM();
|
startIHM();
|
||||||
|
|
||||||
|
@ -52,11 +51,10 @@ int main()
|
||||||
pthread_mutex_lock(&sRunning);
|
pthread_mutex_lock(&sRunning);
|
||||||
pthread_mutex_lock(&sRunning);
|
pthread_mutex_lock(&sRunning);
|
||||||
|
|
||||||
deconfigureActionneurs();
|
|
||||||
deconfigureMovement();
|
deconfigureMovement();
|
||||||
deconfigurePosition();
|
deconfigurePosition();
|
||||||
|
deconfigureActionneurs();
|
||||||
deconfigureIMU();
|
deconfigureIMU();
|
||||||
deconfigureCA();
|
|
||||||
deconfigureCF();
|
deconfigureCF();
|
||||||
deconfigureIHM();
|
deconfigureIHM();
|
||||||
deconfigureDebug();
|
deconfigureDebug();
|
||||||
|
|
|
@ -22,15 +22,15 @@ int main(int argc, char* argv[])
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct gyroRaw a;
|
struct axesRaw a;
|
||||||
struct gyroRaw t;
|
struct axesRaw g;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
a = readGyroRaw();
|
a = readAcelRaw();
|
||||||
t.x += a.x;
|
printf("X:%5d Y:%5d Z:%5d\n", a.x, a.y, a.z);
|
||||||
t.y += a.y;
|
g = readGyroRaw();
|
||||||
t.z += a.z;
|
printf("X:%5d Y:%5d Z:%5d\n", g.x, g.y, g.z);
|
||||||
|
printf("\n");
|
||||||
usleep(100*1000);
|
usleep(100*1000);
|
||||||
printf("X:%5d Y:%5d Z:%5d\n", t.x, t.y, t.z);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
30
chef/src/testLCD.c
Normal file
30
chef/src/testLCD.c
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
/* Teste si une broche est connecté à une autre */
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <wiringPi.h>
|
||||||
|
#include <wiringPiI2C.h>
|
||||||
|
|
||||||
|
#include "i2c.h"
|
||||||
|
#include "lcd.h"
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
|
||||||
|
(void)argc;
|
||||||
|
(void)argv;
|
||||||
|
|
||||||
|
wiringPiSetup();
|
||||||
|
initI2C();
|
||||||
|
initLCD();
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
printToLCD(LCD_LINE_1, "Buongiorno");
|
||||||
|
printToLCD(LCD_LINE_2, "Come stai?");
|
||||||
|
sleep(1);
|
||||||
|
resetLCD();
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue