Bonjour,

j'essaie d'utiliser le timer1 de l'arduino sur 16 bits.Mon objectif est de pouvoir recevoir les informations sur ma position toutes les minutes mais comme le timer arduino n'est pas suffisant pour pouvoir attendre 1 minute j'ai alors créé une fonction qui compte chaque seconde et dès qu'on arrive à 60 on affiche les coordonnées cependant cela ne fonctionne pas pouvez-vous m'aider?

Voici le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
         #include <SoftwareSerial.h>
         #include <avr/interrupt.h>
        SoftwareSerial gpsSerial(10, 11); // RX, TX (TX not used)
        const int sentenceSize = 80;
 
        char sentence[sentenceSize];
 
        void setup()
        {
           //INITIALISATION DU TIMER//
        cli();
        //set timer1 interrupt at 1Hz
          TCCR1A = 0;// set entire TCCR1A register to 0
          TCCR1B = 0;// same for TCCR1B
          TCNT1  = 0;//initialize counter value to 0
          // set compare match register for 1hz increments
          OCR1A = 15624;// = (16*10^6) / (1*1024) - 1 (must be <65536)
          // turn on CTC mode
          TCCR1B |= (1 << WGM12);
          // Set CS10 and CS12 bits for 1024 prescaler
          TCCR1B |= (1 << CS12) | (1 << CS10);  
          // enable timer compare interrupt
          TIMSK1 |= (1 << OCIE1A);
 
        sei();//allow interrupts
 
          Serial.begin(9600);
          gpsSerial.begin(9600);
        }
        ISR(TIMER1_COMPA_vect)  {
          interrupt();
      }
 
 
 
        void loop()
        {
          static int i = 0;
          if (gpsSerial.available())
          {
            char ch = gpsSerial.read();
            if (ch != '\n' && i < sentenceSize)
            {
              sentence[i] = ch;
              i++;
            }
            else
            {
             sentence[i] = '\0';
             i = 0;
             interrupt();
            }
          }
        }
 
        void interrupt()
        {
          int time = 0;
          while(time <=60){
          time ++;
          if(time == 60){
            time =0;
            displayGPS();
 
          }
         }
        }
 
        void displayGPS()
        {
          char field[200];
          getField(field, 0);
          Serial.println(field);
 
          if (strcmp(field, "$GPRMC") == 0)
          {
            Serial.print("Lat: ");
            getField(field, 3);  // number
            Serial.print(atof(field)/100);
            getField(field, 4); // N/S
            Serial.print(field);
 
            Serial.print(" Long: ");
            getField(field, 5);  // number
            Serial.print(field);
            getField(field, 6);  // E/W
            Serial.println(field);
          }
 
        }
 
        void getField(char* buffer, int index)
        {
          int sentencePos = 0;
          int fieldPos = 0;
          int commaCount = 0;
          while (sentencePos < sentenceSize)
          {
            if (sentence[sentencePos] == ',')
            {
              commaCount ++;
              sentencePos ++;
            }
            if (commaCount == index)
            {
              buffer[fieldPos] = sentence[sentencePos];
              fieldPos ++;
            }
            sentencePos ++;
          }
          buffer[fieldPos] = '\0';
        }