2016-02-21 1 views
-2

J'ai besoin d'aide pour déboguer un programme arduino que je viens de taper. l'erreur affichée est: - 1.exit status 1 exponent n'a pas de chiffres (trouvé sur la ligne "char INT_ENABLE = 0 * 2E"). l'intention du programme est de déclencher un buzzer et d'éteindre un commutateur de relais lorsque l'inactivité est détectée via adxl345 et de faire le contraire lorsque l'activité est détectée. Je fournis mon code de programme ci-dessous. avoir un chèque et m'aider à rectifier ce problème et tout autre problème que vous pourriez rencontrer avec mon programme.comment corriger l'erreur "état de sortie 1 exponent n'a pas de chiffres" dans la programmation arduino?

#include <SPI.h> 
 
int cs = 10; 
 
int intr = 2; 
 
int buzzer = 4; 
 
int relay = 5; 
 
int su = 1; 
 
int intr1 
 
pinmode (buzzer,OUTPUT); 
 
pinmode (relay,OUTPUT); 
 
char POWER_CLT = 0*2D 
 
char DATA_FORMAT = 0*31 
 
char DATAX0 = 0*32 
 
char DATAX1 = 0*33 
 
char DATAY0 = 0*34 
 
char DATAY1 = 0*35 
 
char DATAZ0 = 0*36 
 
char DATAZ1 = 0*37 
 
char THRESH_ACT = 0*24 
 
char THRESH_INACT = 0*38 
 
char TIME_INACT = 0*26 
 
char INT_ENABLE = 0*2E 
 
char INT_MAP = 0*2F 
 
char ACT_INACT_CTL = 0*27 
 
char INT_SOURCE = 0*30 
 

 
char values[10]; 
 
char output[20]; 
 
int x, y, z; 
 
char inactivityevent = 0; 
 
void setup() 
 
{ 
 
    SPI.begin(); 
 
    SPI.setDataMode(SPI_MODE3); 
 
    Serial.begin(9600); 
 
    pinMode(cs,OUTPUT); 
 
    digitalWrite(cs, HIGH); 
 
    attachInterrupt(digitalpintointerrupt(intr),interruptHandler,RISING); 
 
    writeRegister(DATA_FORMAT,0*01); 
 
    writeRegister(POWER_CTL,0*08); 
 
    writeRegister(INT_MAP,0*F7 && 0*EF); 
 
    writeRegister(THRESH_INACT,1); 
 
    writeRegister(TIME_INACT,0); 
 
    writeRegister(ACT_INACT_CTL,0*0F); 
 
    writeRegister(INT_ENABLE,0*08); 
 
    readRegister(INT_SOURCE,1,VALUES); 
 
} 
 

 
void interrupHandler() 
 
{ 
 
    read register (INT_SOURCE,1,values); 
 
} 
 

 
void loop() 
 
{ 
 
intr1=digitalread(intr); 
 
if (intr1==high) 
 
    { 
 
    read register(DATAX0,6,values); 
 
    x = ((int)values[1]<<8|(int)values[0]); 
 
    y = ((int)values[3]<<8|(int)values[2]); 
 
    z = ((int)values[5]<<8|(int)values[4]); 
 
    if (x<=15 && x>=-15 && y<=10 && y>=-10 && z>=75 && z<=90) 
 
    { 
 
    digitalwrite(buzzer,HIGH); 
 
    digitalwrite(relay,LOW); 
 
    } 
 
    else 
 
    { 
 
    for (int i=0;i<=90;i++) 
 
     { 
 
     delay (2000); 
 
     if (intr == LOW) 
 
     { break(); } 
 
     if (i==90) 
 
     digitalwrite(relay,LOW);  
 
     } 
 
    } 
 
    while (su=1) 
 
    { 
 
    if (intr==LOW) 
 
    { 
 
     digitalwrite(buzzer,LOW); 
 
     digitalwrite(relay,HIGH); 
 
     break(); 
 
    } 
 
    }  
 
} 
 
}

+0

Votre syntaxe pour les constantes hexadécimales n'est pas correcte - elle devrait être 0x, et non 0 * (le X n'est pas un signe de multiplication!). Vous avez aussi plein d'autres erreurs de syntaxe. C (et la plupart des autres langages de programmation) est très pointilleux sur la syntaxe, et vous ne pouvez pas dévier de la spécification du langage (contrairement, disons, à l'anglais). – nneonneo

+0

remercie un million pour cette correction. J'ai étudié moi-même et évidemment je me suis trompé. J'ai utilisé l'un des programmes trouvés sur ce site en tant que programme de base et j'ai essayé d'en créer un à partir de ce site. Le lien est fourni ci-dessous. ce serait vraiment utile si vous pouvez m'aider à rectifier la plupart des erreurs de syntaxe. http://stackoverflow.com/questions/22701400/programming-arduino-with-adxl345-to-raise-interrupt-on-inactivity?rq=1 – labeebkb

+0

Vous y avez tapé le code mais avec beaucoup d'erreurs. Je recommande de le saisir à nouveau mais en étant très précis sur les majuscules/minuscules, les symboles et les caractères de "ponctuation". – nneonneo

Répondre

0

Pour toutes les valeurs 0*nn du programme, les remplacer par 0xnn. Assurez-vous que chaque ligne se termine par un point-virgule (par exemple, lignes 7, 10-24). Sur la ligne 40, vérifiez l'expression contenant && parce que c'est un opérateur "logique" et que vous voulez un opérateur "au niveau du bit" là, alors changez && en &. À la ligne 45, je pense que vous avez besoin de VALUES pour être en minuscule, parce que le nom de la variable que vous essayez de remplir est en minuscules.
Il ya quelques endroits que vous dites read register mais je pense que vous devez utiliser readRegister pour ceux-ci. Vérifiez la ligne 78, dont la boucle while vérifie la valeur su. Je pense que vous devriez avoir while (su == 1) ici au lieu d'un seul =. Le seul = définit la valeur, mais je pense que vous voulez vérifier la valeur à la place, d'où vous avez besoin ==. Je note qu'il n'y a rien dans le programme pour changer su de 1, ainsi il continuera pour toujours jusqu'à ce que le intr se produise.

+0

concernant l'opérateur logique "&&", comme je l'ai dit dans le commentaire précédent, j'ai pris un programme de ce site comme un programme de base pour développer le mien et dans celui-ci, ils l'ont utilisé. Je crois que l'idée est d'envoyer les données aux deux adresses. merci pour votre aide. Je fournis un lien vers le programme de base dont j'ai parlé plus tôt. peut-être pourriez-vous comprendre plus que moi et m'aider à mieux comprendre cette partie du programme. http://stackoverflow.com/questions/22701400/programming-arduino-with-adxl345-to-raise-interrupt-on-inactivity?rq=1 – labeebkb

+0

J'ai regardé ce programme, et il a la même forme que vous avez cité. Cependant, je pense que cette personne ne l'avait pas correcte, parce que '0xF7 && 0xEF' est juste la même chose que dire' 1'. Cependant ma correction suggérée ci-dessus ne fonctionnera pas non plus je pense. Je ne connais pas assez le périphérique spécifique mais vous pouvez obtenir quelques bonnes informations sur INT_MAP [ici] (https://www.sparkfun.com/tutorials/240). –

+0

merci pour votre référence et votre aide. J'ai été capable de rectifier toutes les erreurs dans mon programme. Actuellement, j'attends que mes composants testent mon programme. – labeebkb