[Projet en cours] Réalisation d'un détecteur d'intrusion (prototype)

Bonjour,
je souhaiterais (dans le cadre d'un projet d'étude de BTS Système électronique) réaliser une carte qui comprend les fonctionnement suivant :

• Détection d'un dépassement de seuil des axes d'un accéléromètre.
• Si dépassement des seuils envoie d'une trame définie selon un protocole commun

J'ai déjà réalisé c'est deux fonctions en voici le code :

/* Les broches:

analog 1: axe-x
analog 2: axe-y
analog 3: axe-z

*/

// Ces constantes déclarent les broches.
const int groundpin = 18; // entrée analogique broche 4 -- GND
const int powerpin = 19; // entrée analogique broche 5 -- Vcc
const int xpin = A1; // axe-x
const int ypin = A2; // axe-y
const int zpin = A3; // axe-z

int Seuil=730; // declare Seuil positif +2g
int Seuil0=300; // declare seuil negatif -2g
int incomingByte;

// les valeurs minimales et maximales que prend le CAN
int minVal = 0;
int maxVal = 1024;

void setup()
{
analogReference(EXTERNAL); // tension de réference du convetisseur
Serial.begin (9600); //vitesse de la liaison

}

void loop()
{

//lire les valeur analogique de l'accéléromètre et les mémorisers
int xRead = analogRead(xpin);
delay(1);
int yRead = analogRead(ypin);
delay(1);
int zRead = analogRead(zpin);
delay(1);

int checkSensor();
{ // fonction de type int
if (xRead> Seuil || yRead> Seuil || zRead> Seuil) { // si la valeur analogique du capteur > 600
Serial.write("$ET3S");
delay(1);
}

else if (xRead < Seuil0 || yRead < Seuil0 || zRead < Seuil0){

Serial.write("$ET3S");
delay(1);
}

}
delay(30);

}

Si vous avez des proposition pour améliore / optimiser ce petit programme je suis preneur.

Les fonctions suivante me pose problème :

• Envoi des deux seuils si une demande est faite par une commande précise
• Changement des seuils si une commande précise est envoyée

Le matériel utilisé (imposer) :

• Arduino Uno Rev3
• Adlx 335

Le protocole des différentes commandes :

$ET3S : détection d'un dépassement de seuil
$ET3S ? : Demande d'envoi des différent seuils
$ET3S1AZER: Changement du seuil1 par la valeur « AZER »
$ET3S2AZER :Changement du seuil2 par la valeur « AZER »

Alors voilà les différents problèmes que me pose c'est deux fonctions :

• Comment détecter la valeur $ sur Rx ?
• Comment enregistrer les caractère qui suivent le $ ?

Merci d'avance a tout commentaire et/ou réponse.

Tu peut toujours essayer d’amélioré l'accélerometre avec un filtre Kalman sa fait un petit plus, pour détecté la valeur "$" il faut la stocker dans une variable char puis la comparer.

Tous tes delay(1) sont inutiles.

Sinon pour réceptionner une chaîne de caractères il faut faire un truc du genre :

if(Serial.available()){
char Buffer[10]; // à dimensionner à la bonne taille
int i;
delay(5);
while(Serial.available()) Buffer[i++]=Serial.read(); 
}

Merci de vos réponse.

je me suis pencher sur tout les problèmes énoncer, voici le code :

char detection ;
int table[10];
int i;

void setup () {

Serial.begin(9600);

}

void loop() {

if (Serial.available() > 0) {
detection = Serial.read ();
}
else if (detection == '$') {
for(i=0;i<=9;i++) {
if( Serial.available () >0) {
table_ = Serial.read();_

  • delay(200);*
    _ Serial.write (table*);_
    _
    delay(25);_
    _ Serial.flush();_
    _
    }_
    _
    }_
    _
    }_
    _
    }_
    _
    [/quote]*_