mirror of
https://github.com/RobotechLille/cdf2018-principal
synced 2024-11-23 16:46:04 +01:00
Misc 2
This commit is contained in:
parent
48b2901da4
commit
fc1c7786da
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#define FPGA_PORTNAME "/dev/ttyUSB0"
|
#define FPGA_PORTNAME "/dev/ttyUSB0"
|
||||||
#define CF_BAUDRATE B115200
|
#define CF_BAUDRATE B115200
|
||||||
#define PRINTRAWDATA
|
// #define PRINTRAWDATA
|
||||||
|
|
||||||
int fpga;
|
int fpga;
|
||||||
pthread_mutex_t sSendCF;
|
pthread_mutex_t sSendCF;
|
||||||
|
|
|
@ -40,6 +40,13 @@ struct timespec debugStart;
|
||||||
struct timespec debugNow;
|
struct timespec debugNow;
|
||||||
struct timespec debugEcoule;
|
struct timespec debugEcoule;
|
||||||
|
|
||||||
|
int debugInterval = DEBUG_INTERVAL_IDLE;
|
||||||
|
|
||||||
|
void debugSetActive(bool active)
|
||||||
|
{
|
||||||
|
debugInterval = active ? DEBUG_INTERVAL_ACTIVE : DEBUG_INTERVAL_IDLE;
|
||||||
|
}
|
||||||
|
|
||||||
void* TaskDebug(void* pdata)
|
void* TaskDebug(void* pdata)
|
||||||
{
|
{
|
||||||
(void)pdata;
|
(void)pdata;
|
||||||
|
@ -90,7 +97,7 @@ void* TaskDebug(void* pdata)
|
||||||
fprintf(debugFd, "\n");
|
fprintf(debugFd, "\n");
|
||||||
fflush(debugFd);
|
fflush(debugFd);
|
||||||
|
|
||||||
usleep(DEBUG_INTERVAL * 1000);
|
usleep(debugInterval * 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -3,13 +3,20 @@
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
// Constantes
|
// Constantes
|
||||||
#define DEBUG_INTERVAL 100
|
#define DEBUG_INTERVAL_IDLE 50
|
||||||
|
#define DEBUG_INTERVAL_ACTIVE 1000
|
||||||
|
|
||||||
// Structures
|
// Structures
|
||||||
enum debugArgTypes {d, f, ld, lf, s};
|
enum debugArgTypes {
|
||||||
|
d,
|
||||||
|
f,
|
||||||
|
ld,
|
||||||
|
lf,
|
||||||
|
s
|
||||||
|
};
|
||||||
|
|
||||||
struct debugArg {
|
struct debugArg {
|
||||||
enum debugArgTypes type;
|
enum debugArgTypes type;
|
||||||
|
@ -17,14 +24,14 @@ struct debugArg {
|
||||||
struct debugArg* next;
|
struct debugArg* next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Public
|
// Public
|
||||||
void configureDebug(); // Avant tous les configure
|
void configureDebug(); // Avant tous les configure
|
||||||
void registerDebugVar(char* name, enum debugArgTypes type, void* var);
|
void registerDebugVar(char* name, enum debugArgTypes type, void* var);
|
||||||
void startDebug(); // Après tous les configure
|
void startDebug(); // Après tous les configure
|
||||||
void deconfigureDebug();
|
void deconfigureDebug();
|
||||||
|
void debugSetActive(bool active);
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
void* TaskDebug(void *pdata);
|
void* TaskDebug(void* pdata);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
|
|
||||||
#include "CF.h"
|
#include "CF.h"
|
||||||
|
#include "movement.h"
|
||||||
|
|
||||||
bool recu;
|
bool recu;
|
||||||
|
|
||||||
|
@ -13,8 +14,10 @@ void setRecu()
|
||||||
recu = true;
|
recu = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool diagFPGA()
|
bool diagFPGA(void* arg)
|
||||||
{
|
{
|
||||||
|
(void) arg;
|
||||||
|
|
||||||
recu = false;
|
recu = false;
|
||||||
registerRxHandler(C2FD_PING, setRecu);
|
registerRxHandler(C2FD_PING, setRecu);
|
||||||
sendCF(C2FD_PING, NULL, 0);
|
sendCF(C2FD_PING, NULL, 0);
|
||||||
|
@ -28,17 +31,52 @@ bool diagFPGA()
|
||||||
return recu;
|
return recu;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool diagArduino()
|
bool diagArduino(void* arg)
|
||||||
{
|
{
|
||||||
|
(void) arg;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void execDiagnostic(char *name, bool (*diagnostic)(void))
|
bool diagCodeuse(void* arg)
|
||||||
|
{
|
||||||
|
int i = *((int*) arg);
|
||||||
|
long lCod, rCod;
|
||||||
|
getCoders(&lCod, &rCod);
|
||||||
|
float tension = DIAGNOSTIC_TENSION_TEST;
|
||||||
|
if (i % 2 == 1) { // Arrière
|
||||||
|
tension = - tension;
|
||||||
|
}
|
||||||
|
printf("49 %f\n", tension);
|
||||||
|
if (i < 2) {
|
||||||
|
changerMoteurs(tension, 0);
|
||||||
|
} else {
|
||||||
|
changerMoteurs(0, tension);
|
||||||
|
}
|
||||||
|
usleep(500*1000);
|
||||||
|
brake();
|
||||||
|
long lCodn, rCodn;
|
||||||
|
getCoders(&lCodn, &rCodn);
|
||||||
|
long diff;
|
||||||
|
printf("60 %ld %ld %ld %ld\n", lCod, lCodn, rCod, rCodn);
|
||||||
|
if (i < 2) {
|
||||||
|
diff = lCodn - lCod;
|
||||||
|
} else {
|
||||||
|
diff = rCodn - rCod;
|
||||||
|
}
|
||||||
|
printf("65 %ld\n", diff);
|
||||||
|
if (i % 2 == 0) { // Avant
|
||||||
|
return (diff > DIAGNOSTIC_CODEUSES_DIFF_MIN);
|
||||||
|
} else { // Arrière
|
||||||
|
return (-diff > DIAGNOSTIC_CODEUSES_DIFF_MIN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void execDiagnostic(char *name, bool (*diagnostic)(void* arg), void* arg)
|
||||||
{
|
{
|
||||||
clearLCD();
|
clearLCD();
|
||||||
printToLCD(LCD_LINE_1, name);
|
printToLCD(LCD_LINE_1, name);
|
||||||
printToLCD(LCD_LINE_2, "...");
|
printToLCD(LCD_LINE_2, "...");
|
||||||
bool res = diagnostic();
|
bool res = diagnostic(arg);
|
||||||
if (res) {
|
if (res) {
|
||||||
printToLCD(LCD_LINE_2, "Ok!");
|
printToLCD(LCD_LINE_2, "Ok!");
|
||||||
usleep(DIAGNOSTIC_INTERVAL * 1000);
|
usleep(DIAGNOSTIC_INTERVAL * 1000);
|
||||||
|
@ -50,7 +88,12 @@ void execDiagnostic(char *name, bool (*diagnostic)(void))
|
||||||
|
|
||||||
void runDiagnostics()
|
void runDiagnostics()
|
||||||
{
|
{
|
||||||
execDiagnostic("Lien FPGA", diagFPGA);
|
execDiagnostic("Lien FPGA", diagFPGA, NULL);
|
||||||
/* execDiagnostic("Lien Arduino", diagArduino); */
|
/* execDiagnostic("Lien Arduino", diagArduino); */
|
||||||
|
int i;
|
||||||
|
i = 0; execDiagnostic("Mot+Cod L AV", diagCodeuse, &i);
|
||||||
|
i = 1; execDiagnostic("Mot+Cod L AR", diagCodeuse, &i);
|
||||||
|
i = 2; execDiagnostic("Mot+Cod R AV", diagCodeuse, &i);
|
||||||
|
i = 3; execDiagnostic("Mot+Cod R AR", diagCodeuse, &i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,13 @@
|
||||||
#define DIAGNOSTIC_POLL_INTERVAL 100
|
#define DIAGNOSTIC_POLL_INTERVAL 100
|
||||||
#define DIAGNOSTIC_SERIAL_TIMEOUT 10000
|
#define DIAGNOSTIC_SERIAL_TIMEOUT 10000
|
||||||
|
|
||||||
|
#define DIAGNOSTIC_TENSION_TEST 1
|
||||||
|
#define DIAGNOSTIC_CODEUSES_DIFF_MIN 1000
|
||||||
|
|
||||||
// Public
|
// Public
|
||||||
void runDiagnostics();
|
void runDiagnostics();
|
||||||
|
|
||||||
// Private
|
// Private
|
||||||
void execDiagnostic(char *name, bool (*diagnostic)(void));
|
void execDiagnostic(char *name, bool (*diagnostic)(void* arg), void* arg);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "ihm.h"
|
|
||||||
#include "movement.h"
|
|
||||||
#include "parcours.h"
|
|
||||||
#include "points.h"
|
|
||||||
#include "lcd.h"
|
|
||||||
#include "buttons.h"
|
#include "buttons.h"
|
||||||
#include "diagnostics.h"
|
#include "diagnostics.h"
|
||||||
|
#include "ihm.h"
|
||||||
|
#include "lcd.h"
|
||||||
|
#include "parcours.h"
|
||||||
|
|
||||||
// Globales
|
// Globales
|
||||||
pthread_t tIHM;
|
pthread_t tIHM;
|
||||||
|
@ -18,6 +16,7 @@ void configureIHM()
|
||||||
{
|
{
|
||||||
initLCD();
|
initLCD();
|
||||||
printToLCD(LCD_LINE_1, "Demarrage");
|
printToLCD(LCD_LINE_1, "Demarrage");
|
||||||
|
configureParcours();
|
||||||
}
|
}
|
||||||
|
|
||||||
void startIHM()
|
void startIHM()
|
||||||
|
@ -39,7 +38,7 @@ char* getCouleur()
|
||||||
return isOrange ? orangeStr : vertStr;
|
return isOrange ? orangeStr : vertStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct timespec calibrageLast = {0, 0};
|
struct timespec calibrageLast = { 0, 0 };
|
||||||
struct timespec calibrageNow;
|
struct timespec calibrageNow;
|
||||||
struct timespec calibrageEcoule;
|
struct timespec calibrageEcoule;
|
||||||
|
|
||||||
|
@ -66,6 +65,20 @@ void* TaskIHM(void* pdata)
|
||||||
/* } */
|
/* } */
|
||||||
/* } */
|
/* } */
|
||||||
|
|
||||||
|
// Diagnostics
|
||||||
|
for (;;) {
|
||||||
|
clearLCD();
|
||||||
|
printToLCD(LCD_LINE_1, "Diagnostiquer");
|
||||||
|
bout = pressedButton(BUT_BLOCK);
|
||||||
|
|
||||||
|
if (bout == rouge) {
|
||||||
|
clearLCD();
|
||||||
|
runDiagnostics();
|
||||||
|
} else if (bout == jaune) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Couleur
|
// Couleur
|
||||||
for (;;) {
|
for (;;) {
|
||||||
clearLCD();
|
clearLCD();
|
||||||
|
@ -82,7 +95,6 @@ void* TaskIHM(void* pdata)
|
||||||
// Calibrage
|
// Calibrage
|
||||||
for (;;) {
|
for (;;) {
|
||||||
clearLCD();
|
clearLCD();
|
||||||
printf("84 %ld\n", calibrageLast.tv_sec);
|
|
||||||
if (calibrageLast.tv_sec > 0) {
|
if (calibrageLast.tv_sec > 0) {
|
||||||
clock_gettime(CLOCK_REALTIME, &calibrageNow);
|
clock_gettime(CLOCK_REALTIME, &calibrageNow);
|
||||||
if ((calibrageNow.tv_nsec - calibrageLast.tv_nsec) > 0) {
|
if ((calibrageNow.tv_nsec - calibrageLast.tv_nsec) > 0) {
|
||||||
|
@ -103,27 +115,13 @@ void* TaskIHM(void* pdata)
|
||||||
if (bout == rouge) {
|
if (bout == rouge) {
|
||||||
clearLCD();
|
clearLCD();
|
||||||
printToLCD(LCD_LINE_1, "Calibrage...");
|
printToLCD(LCD_LINE_1, "Calibrage...");
|
||||||
delay(3000); // TODO
|
delay(3000); // TODO
|
||||||
clock_gettime(CLOCK_REALTIME, &calibrageLast);
|
clock_gettime(CLOCK_REALTIME, &calibrageLast);
|
||||||
} else if (bout == jaune) {
|
} else if (bout == jaune) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Diagnostics
|
|
||||||
for (;;) {
|
|
||||||
clearLCD();
|
|
||||||
printToLCD(LCD_LINE_1, "Diagnostiquer");
|
|
||||||
bout = pressedButton(BUT_BLOCK);
|
|
||||||
|
|
||||||
if (bout == rouge) {
|
|
||||||
clearLCD();
|
|
||||||
runDiagnostics();
|
|
||||||
} else if (bout == jaune) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parcours
|
// Parcours
|
||||||
for (;;) {
|
for (;;) {
|
||||||
clearLCD();
|
clearLCD();
|
||||||
|
|
|
@ -8,12 +8,19 @@
|
||||||
#include "parcours.h"
|
#include "parcours.h"
|
||||||
#include "points.h"
|
#include "points.h"
|
||||||
#include "position.h"
|
#include "position.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
pthread_t tParcours;
|
pthread_t tParcours;
|
||||||
bool isOrange;
|
bool isOrange;
|
||||||
struct timespec tempsStart;
|
struct timespec tempsStart;
|
||||||
struct timespec tempsNow;
|
struct timespec tempsNow;
|
||||||
struct timespec tempsEcoule;
|
struct timespec tempsEcoule = {0, 0};
|
||||||
|
|
||||||
|
void configureParcours()
|
||||||
|
{
|
||||||
|
registerDebugVar("temps", ld, &tempsEcoule.tv_sec);
|
||||||
|
configurePoints();
|
||||||
|
}
|
||||||
|
|
||||||
void prepareParcours(bool orange)
|
void prepareParcours(bool orange)
|
||||||
{
|
{
|
||||||
|
@ -32,6 +39,7 @@ void startParcours()
|
||||||
clock_gettime(CLOCK_REALTIME, &tempsStart);
|
clock_gettime(CLOCK_REALTIME, &tempsStart);
|
||||||
pthread_create(&tParcours, NULL, TaskParcours, NULL); // TODO Start on mutex unlock
|
pthread_create(&tParcours, NULL, TaskParcours, NULL); // TODO Start on mutex unlock
|
||||||
printRightLCD(LCD_LINE_1, " ");
|
printRightLCD(LCD_LINE_1, " ");
|
||||||
|
debugSetActive(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateTimeDisplay()
|
void updateTimeDisplay()
|
||||||
|
@ -67,6 +75,7 @@ void stopParcours()
|
||||||
updateTimeDisplay();
|
updateTimeDisplay();
|
||||||
printRightLCD(LCD_LINE_1, "FIN");
|
printRightLCD(LCD_LINE_1, "FIN");
|
||||||
showPoints();
|
showPoints();
|
||||||
|
debugSetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define UP_TIME 1000
|
#define UP_TIME 1000
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#define TEMPS_PARCOURS 100
|
#define TEMPS_PARCOURS 100
|
||||||
|
|
||||||
|
void configureParcours();
|
||||||
void prepareParcours(bool orange);
|
void prepareParcours(bool orange);
|
||||||
void startParcours();
|
void startParcours();
|
||||||
// Returns : -1 if parcours ended, N ms for the next time it should be checked
|
// Returns : -1 if parcours ended, N ms for the next time it should be checked
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
int points;
|
int points;
|
||||||
|
|
||||||
|
void configurePoints()
|
||||||
|
{
|
||||||
|
registerDebugVar("points", d, &points);
|
||||||
|
}
|
||||||
|
|
||||||
void resetPoints()
|
void resetPoints()
|
||||||
{
|
{
|
||||||
points = 0;
|
points = 0;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define __POINTS_H__
|
#define __POINTS_H__
|
||||||
|
|
||||||
// Public
|
// Public
|
||||||
|
void configurePoints();
|
||||||
void resetPoints();
|
void resetPoints();
|
||||||
int getPoints();
|
int getPoints();
|
||||||
void addPoints(int points);
|
void addPoints(int points);
|
||||||
|
|
|
@ -83,3 +83,10 @@ void deconfigurePosition()
|
||||||
{
|
{
|
||||||
pthread_cancel(tPosition);
|
pthread_cancel(tPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getCoders(long* l, long* r)
|
||||||
|
{
|
||||||
|
*l = lCodTot;
|
||||||
|
*r = rCodTot;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ struct __attribute__ ((packed)) position {
|
||||||
// Fonctions
|
// Fonctions
|
||||||
void configurePosition();
|
void configurePosition();
|
||||||
void deconfigurePosition();
|
void deconfigurePosition();
|
||||||
|
void getCoders(long* l, long* r);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -11,3 +11,8 @@ export PS1="[\u@\h \W] "
|
||||||
export PS2="> "
|
export PS2="> "
|
||||||
export PS3="+ "
|
export PS3="+ "
|
||||||
export PS4="- "
|
export PS4="- "
|
||||||
|
|
||||||
|
alias r="/etc/init.d/S50chef restart"
|
||||||
|
alias s="/etc/init.d/S50chef stop"
|
||||||
|
alias c="cd /opt/chef/"
|
||||||
|
alias l="tail -f $(find /opt/chef/log | sort | tail -1)"
|
||||||
|
|
Loading…
Reference in a new issue