2016-01-25 3 views
1

variable ne reçoit pas mis à jour dans le code en cours d'exécution à bord mbed

#include "mbed.h" 
 
    
 
DigitalOut myled1(LED1); 
 
DigitalOut myled2(LED2); 
 
DigitalOut myled3(LED3); 
 
DigitalOut myled4(LED4); 
 
Serial pc(USBTX, USBRX); 
 

 
int main() 
 
{ int c; 
 
    while(1) 
 
    { 
 
    pc.scanf("%d",&c); 
 
    pc.printf("hey i received %d",c); 
 
    if (c==1050) 
 
    {myled1=1; 
 
    myled2=0; 
 
    myled3=0; 
 
    myled4=0; 
 
    } 
 
    else if (c==2050) 
 
    { myled1=0; 
 
     myled4=0; 
 
     myled3=0; 
 
     myled2=1; 
 
    } 
 
    else if (c==3050) 
 
    {myled3=1; 
 
    myled4=0; 
 
    myled2=0; 
 
    myled1=0; 
 
    } 
 
    else if (c==4050) 
 
    {myled4=1; 
 
    myled3=0; 
 
    myled2=0; 
 
    myled1=0; 
 
    } 
 
    } 
 
}

Le code ci-dessus reçoit la valeur de « c » de la borne et prend la décision sur la base de la même. Le problème auquel je suis confronté est que lorsque j'utilise le printf, variablc est mis à jour et le code fonctionne correctement sinon. S'il vous plaît aider.

Répondre

0

Les données de série sont transmises un octet à la fois. Lorsque vous envoyez un nombre entier à plusieurs chiffres en écrivant 1050 au terminal, chaque numéro est envoyé individuellement. La fonction getNumber() ci-dessous recueille tous les octets jusqu'à la réception du retour chariot. En soustrayant la valeur ASCII de 48 (qui est 0), le caractère reçu est converti en entier. Le nombre est décalé vers la gauche en multipliant par 10 avant que l'entier reçu ne lui soit ajouté.

La meilleure approche serait d'utiliser des interruptions. Voir l'exemple de code ci-dessous:

#include "mbed.h" 

DigitalOut myled1(LED1); 
DigitalOut myled2(LED2); 
DigitalOut myled3(LED3); 
DigitalOut myled4(LED4); 
Serial pc(USBTX, USBRX); 

unsigned int getNumber() 
{ 
    unsigned int val = 0; // Max value 65535 
    while(1) 
    { 
     char c = pc.getc(); 
     pc.putc(c); // echo back to terminal 
     if (c == '\r') // enter pressed 
      break; 
     val = ((c - 48) + (val * 10)); 
    } 
    return val; 
} 

void callback() 
{ 
    unsigned int n = getNumber(); 
    pc.printf("Number = %d \r\n", n); // Write number to terminal 
    if (n==1050) 
    { 
     myled1=1; 
     myled2=0; 
     myled3=0; 
     myled4=0; 
    } 
    else if (n==2050) 
    { 
     myled1=0; 
     myled2=1; 
     myled3=0; 
     myled4=0; 
    } 
    else if (n==3050) 
    { 
     myled1=0; 
     myled2=0; 
     myled3=1; 
     myled4=0; 
    } 
    else if (n==4050) 
    { 
     myled1=0; 
     myled2=0; 
     myled3=0; 
     myled4=1; 
    } 
} 

int main() { 
    pc.attach(&callback); 
    while (1) 
    { 
     wait(0.5); 
    } 
} 
+0

Merci beaucoup Talamaki pour votre attention. J'ai essayé d'ajouter le retard de différents intervalles de temps mais ils n'ont fonctionné que pendant un cycle. Dans les cycles successifs, il me semble que la valeur du nombre 'c' n'est pas mise à jour. –

+0

J'ai ajouté un exemple de code en utilisant des interruptions. Essayez-le. – talamaki

+0

En fait, j'essaie de lire un nombre.Mais je vais certainement essayer de trouver le problème. –