Show Posts
Pages: 1 ... 22 23 [24] 25 26 ... 33
346  Using Arduino / Programming Questions / Re: Can I initilize 3 serial port in setup loop? on: April 09, 2013, 06:22:42 am
Hello
It does not work very well on the Harware port.... and I will try the listen port.
May be you call help me because I really spend a lot of time and I do not feel me sure.

In resumé
In my setup loop, I have this:
Code:
#define LOG_INTERVAL 10000
#define TERMBAUD 4800

#define GPRSBAUD 9600
#define GPRSRX 2
#define GPRSTX 3

//#define LCDD
#define GPRS_ACTIVE
#define GPS_ACTIVE
#define DEBUG

SoftwareSerial cell(GPRSRX,GPRSTX);
void setup(){
 Serial.begin(TERMBAUD);
  //uart_gps.begin(GPSBAUD); //SUPPRIME!
  cell.begin(GPRSBAUD);
  
  pinMode(redGPRS, OUTPUT);
  pinMode(greenGPRS, OUTPUT);
  pinMode(redGPS, OUTPUT);
  pinMode(blueGPS, OUTPUT);
}
In my loop() loop, I have a lot of code and I will past all because my problem should come from the cell module.
I wrote some comment in RED in my loop
Code:
void loop(){
   // It will be execute only once, when I switch on my module
  if(firstTimeInLoop) {
    firstTimeInLoop = 0;

[color=red]    // I ACTIVED GRPS_ACTIVE, THEN IT WILL CHECK THE GPRS CONNECTION.
   // WHEN IT?S ACTIVE; IT ALWAYS CRACH WHILE IT TRY TO CELLECT THE FIRST GPS FIX
   // WHEN I UNACTIVE IT, I CAN GET THE GPS FIX. THEN I AM THINKING TO STOP USING THE
   // HARWARE PORT AND USE THE LISTING FUNCTION. BUT I WOULD LIKE TO UNDERSTAND THE REASON WHY IT WORK ONLY
   // WHEN GRPS_ACTIVE IS UNACTIVE[/color]
    #ifdef GPRS_ACTIVE
    
      #ifdef DEBUG
      Serial.println(F("Wait for module is registered (+SIND: 11) and  ready (+SIND: 4) ..."));
      freeRAM();
      #endif
      
      // LOOP UNTIL GPRS IS ACTIVE, WHEN THE DEFINE GRPS_ACTIVE IS ON
      while (GPRS_registered == 0 || GPRS_AT_ready == 0) {    
  
        String ready = getMessage();  
         if(ready == "+SIND: 1"){
        
           Serial.println(F("> SIM is inserted ..."));
           #ifdef LCDD
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("SIM inserted (1)");
           #endif

           blinkLed(greenGPRS, 1, 100);
           delay(1000);
         }
        
         if(ready == "+SIND: 10,\"SM\",1,\"FD\",1,\"LD\",1,\"MC\",1,\"RC\",1,\"ME\",1"){
           Serial.println(F("> SIM is ready ..."));
          
           #ifdef LCDD
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("SIM ready (10-1)");
           #endif
          
           blinkLed(greenGPRS, 10, 100);
           delay(1000);
         }
        
         if(ready == "+SIND: 11"){
           GPRS_registered = 1;
           Serial.println(F("> Module is registered to the network ..."));
          
           #ifdef LCDD
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("Module is registered to the network (11)");
           #endif
          
           blinkLed(greenGPRS, 11, 100);
           delay(1000);
         }
        
         if(ready == "+SIND: 3"){
           Serial.println(F("> GPRS is partially ready ..."));
           #ifdef LCDD
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("GPRS is partially ready (3)");
           #endif;
           blinkLed(greenGPRS, 3, 100);
           delay(1000);
         }
        
         if(ready == "+SIND: 4"){
           GPRS_AT_ready = 1;
           Serial.println(F("> GPRS is ready ..."));
          
           #ifdef LCDD
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("GPRS is ready (4)");
           #endif
          
           blinkLed(greenGPRS, 4, 100);
           delay(1000);
         }
        
         if(ready == "+SIND: 7"){
           Serial.println(F("> Emergency only ..."));
          
           #ifdef LCDD
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("Emergency only (7)");
           #endif
          
           blinkLed(redGPRS, 7, 100);
         }
        
         if(ready == "+SIND: 0"){
           Serial.println(F("> SIM card removed"));
          
           #ifdef LCDD
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("SIM vard removed (0)");
           #endif
         }
      
       if(ready == "+SIND: 8"){
           Serial.println(F("> GPRS Network Not Available (8)"));
          
           #ifdef LCDD
             lcd.clear();
             lcd.setCursor(0,0);
             lcd.print("GPRS Network not available (8)");
           #endif
         }    
        
      }

    

      Serial.println(F(" "));
      Serial.println(F("READY TO GO"));
      Serial.println(F("***************************"));
      
      #ifdef LCDD
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("READY TO GO");
        lcd.setCursor(0,1);
        lcd.print("******************");
      #endif
  
    #endif // END ifdef GPRS_ACTIVE
 }  
 
[color=red]// NOW ALL GPRS CHECKS HAVE BEEN DONE. IF I UNACTIVE IT, I CAN GET THE GPS FIX[/color]
 
 #ifdef GPS_ACTIVE
   [color=red]// scheulde IS DEFINE BEFORE AT 10000 (10 SEC). THIS PART WORKS FINE, NO WORRIES[/color]
   if (millis() > scheduler)
   {
      scheduler = millis() + LOG_INTERVAL;

      /* ******* Check if there is fix checkGPS(); ************* */
      [color=red]// HERE IT CHECK  IF A FIX EMNA IS AVAILABLE. [/color]
      #ifdef DEBUG
        Serial.println(F(""));
        Serial.println(F("GPS gathering data..."));
      #endif

      [color=red]// HERE IT WAIT 3 SEC TO CATCH THE FIX[/color]
      for (unsigned long start = millis(); millis() - start < 3000;){
 [color=red]       // AS YOU CAN SEE HERE, I COMMENT THAT LINE IN ORDER TO USE THE HARWARE PORT INSTEAD OF port 4 and 5 AND IT WORKS ONLY IF I UNACTIVE GRPS_ACTIVE[/color]
        //while(uart_gps.available())
        while(Serial.available()){
          //byte c = uart_gps.read();
          byte c = Serial.read();
          // New valid NMEA data available
          if(gps.encode(c)){
            newGpsData = true;
          }
        }
      }  
    
      /* ******* END Check if there is fix checkGPS(); ************* */
[color=red]// IF THERE IS NEW DATA (newGpsData), it continue and call the fonction processGps(), to collect the lat, long, alt, etc. THIS WORKS WELL. I AM I AM SURE, MY PROBLEM COME FROM 4-5 LINE ABOVE
I CAN NOT UNDERSTAND WHY I CAN GET FIX WHEN GPRS_ACTIVE is ACTIVE (#define GPRS_ACTIVE) AND WHY IT I CAN GPS FIX WHEN ITS UNACTIVE (//#define GPRS_ACTIVE)
[/color]
  
      // If New valid GPS data available
      if (newGpsData)
      {
        #ifdef DEBUG
          Serial.println(F("New GPS fix available."));
          freeRAM();
          #endif
    
          blinkLed(blueGPS, 1, 200);
          // Get position (lat, long, alt...)
          processGPS();

          newGpsData = false;
          
        }else{
        
          #ifdef DEBUG
            Serial.println(F("No GPS fix available."));  
            freeRAM();    
          #endif
      
          blinkLed(redGPS, 1, 200);
      
        }
    }
  #endif
  
}
// END LOOP

If you have any idea, it will be very nice.

(The follow of my message goes to the next post)
347  International / Français / Re: Es-ce possible d'avoir 3.3V avec Arduino Pro mini on: April 09, 2013, 05:39:52 am
Merci pour vos réponse,
Je vais plus tot opter pour le régulateru de tension
348  Using Arduino / Programming Questions / Re: Can I initilize 3 serial port in setup loop? on: April 05, 2013, 05:57:18 pm
Great, PeterH

Thank for your clear answer

Cheers
349  International / Français / Re: Comment convertir un float en un String on: April 05, 2013, 03:58:29 pm
Réponse :
Code:
String date = String(year) + "-" + String(month) + "-" + String(day);
    String time = String(hour) + ":" + String(minute) + ":" + String(second);

Le seul truc qui m'embete c'est que ca affiche

Quote
2013-5-4 22:10:10
et j'aurais préféré avoir
Quote
2013-05-04 22:10:10

Une idée?
350  International / Français / Re: Comment convertir un float en un String on: April 05, 2013, 03:49:18 pm
J'ai denouveau un probleme de concatenation

J'aimerais avoir dans ma varibale String date, la date, et dans ma variable String time, l'heur

Pour cela j'ai ce code
Code:
    // Same goes for date and time
    int year;
    byte month, day, hour, minute, second, hundredths;
    gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);
    // Print data and time
    Serial.print("Date: "); Serial.print(month,DEC); Serial.print("/");
    Serial.print(day, DEC); Serial.print("/"); Serial.print(year);
    Serial.print("  Time: "); Serial.print(hour, DEC); Serial.print(":");
    Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC);
    Serial.print("."); Serial.println(hundredths, DEC);
    //Since month, day, hour, minute, second, and hundr
   
          // Print data and time
    String date = year + "-" + month + "-" + day;
    String time = hour + ":" + minute + ":" + second ;

Le problème ce trouve là (ca ne marche pas, quand je compile):
Code:
    String date = year + "-" + month + "-" + day;
Par contre, si je mets ca:

Code:
    String date = year + "-" + month;
J'ai pas d'erreur quand je compile

je pense que month est un byte et que DEC à une influance, mais je ne sais pas comment corriger pour avoir ceci, au final

String date = "2013-05-04";
String time = " 22:10:20";

ou encore mieux
String datetime ="2013-05-04 22:10:20"
 smiley-roll-sweat
351  International / Français / Re: Comment convertir un float en un String on: April 05, 2013, 03:05:12 pm
J'aurais pu essayer avant de poser ma question

Code:
char buffer [90];
    String flatAsString;
    dtostrf(flat,1,8,buffer);
    flatAsString = String(buffer);
   
    //char buffer [90];
    String flonAsString;
    dtostrf(flon,1,8,buffer);
    flonAsString = String(buffer);
   
    //char buffer [90];
    String faltAsString;
    dtostrf(falt,1,8,buffer);
    faltAsString = String(buffer);
   
    //char buffer [90];
    String fspeedAsString;
    dtostrf(fspeed,1,8,buffer);
    fspeedAsString = String(buffer);
   
    //char buffer [90];
    String fageAsString;
    dtostrf(fage,1,8,buffer);
    fageAsString = String(buffer);

String coords = request + "?lat=" + flatAsString  + "&long=" + flonAsString + "&alt=" + faltAsString + "&speed=" + fspeedAsString + "&course=" + TinyGPS::cardinal(gps.f_course()) + "&age=" + fageAsString + request_end;
    Serial.println(coords);
Ca bug quand je redéclare..

Simplement, j'aimerais reposer la même question.
Comment puis-je obptimiser ce code?
Aussi, comment puis-je savoir que le 90 de buffer[90] n'est pas trop grop ou quel serait le minimum à mettre (50, 70, 100,300?)

Milles mercis pour vos lumières
352  International / Français / Re: Comment convertir un float en un String on: April 05, 2013, 02:59:18 pm
je viens de trouver une solution avec la fonction dtostrf

   
Code:
char buffer [90];
    String flatAsString;
    dtostrf(flat,1,8,buffer);
    flatAsString = String(buffer);
   
    char buffer [90];
    String flonAsString;
    dtostrf(flon,1,8,buffer);
    flonAsString = String(buffer);
   
    char buffer [90];
    String faltAsString;
    dtostrf(falt,1,8,buffer);
    faltAsString = String(buffer);
   
    char buffer [90];
    String fspeedAsString;
    dtostrf(fspeed,1,8,buffer);
    fspeedAsString = String(buffer);
   
    char buffer [90];
    String fageAsString;
    dtostrf(fage,1,8,buffer);
    fageAsString = String(buffer);

String coords = request + "?lat=" + flatAsString  + "&long=" + flonAsString + "&alt=" + faltAsString + "&speed=" + fspeedAsString + "&course=" + TinyGPS::cardinal(gps.f_course()) + "&age=" + fageAsString + request_end;
    Serial.println(coords);

Simplement j'ai un souci d'optimisation concernant le buffer. Suis pas trop averti concernant les buffer.

Es-ce juste de redéclarer char buffer à chaque fois?

Comment optimeseriez-vous ce code?

Milles mercis pour vos lumières
353  International / Français / Re: Comment convertir un float en un String on: April 05, 2013, 02:09:36 pm
Ok, mais ce que je ne comprends pas dans la metho de Batto

C'est que je dois au final, retrouver les valeur dans cette chaine
Code:
String coords = request + "?lat=" + char(flat)  + "&long=" + char(flon) + "&alt=" + char(falt) + "&speed=" + char(fspeed) + "&course=" + TinyGPS::cardinal(gps.f_course()) + "&age=" + char(fage) + request_end;
    Serial.println(coords);

donc, comment puis-je faire un  Serial.print(flat); à la place de char(flat)?

J'ai essayé d'utiliser sprintf()

 
Code:
 
    float flat, flon, falt, fspeed;
    unsigned long fage;
    gps.f_get_position(&flat, &flon, &fage);
   
    falt = gps.f_altitude();
    fspeed = gps.f_speed_kmph();
   
    Serial.println(flat);
    Serial.println(flon);
    Serial.println(falt);
    Serial.println(fspeed);
    Serial.println(TinyGPS::cardinal(gps.f_course()));
    Serial.println(fage);
   
   
    char buffer [90];
    //int n, a=5, b=3;
    Serial.println(F("******"));
    int n;
    n=sprintf (buffer, "%d plus %d is %d", flat, flon, falt, fspeed, fage);
    printf ("[%s] is the fix %a %b chars long\n",buffer,n);
    //printf ("[%s] is the fix %a chars long\n",buffer,n)
    Serial.println(F("******"));


Mais il n'y a rien qui s'affiche entre les *******

Mais c'est impératif que j'ai ceci à la fin, par exemple et je ne dois pas avoir deux décimal après la virgule, mais 6 voir plus
Quote
GET /opt/updatesql.php?lat=46.22&long=6.14&alt=407.10&speed=2.37&course=WSW&age=1103 HTTP/1.1

Suis un peu larger  smiley-confuse
354  Using Arduino / Programming Questions / Re: Can I initilize 3 serial port in setup loop? on: April 05, 2013, 12:55:43 pm
Great thank,
I am going to have a look right now.
But what would be your comment reagrding this
Quote
Then if I want to make my life easier, I should use hardware serial port. Then port 0 and 1.
But annoyed thing, it's when I sync my code throught the USB cable to the Arduino, I got an error message excepted if I removed the two wires from port 0 and 1. Is there a way to avoid removing the wires while synchronizing the code?

Thank a lot
355  Using Arduino / Programming Questions / Re: Can I initilize 3 serial port in setup loop? on: April 05, 2013, 11:58:54 am
Quote
I suspect that your reading about the merits of using the hardware serial port was warning you that it's very useful for debugging and that you're therefore making life more difficult by giving that up to use it for another device. There's nothing inherently wrong with it though.

Then if I want to make my life easier, I should use hardware serial port. Then port 0 and 1.
But annoyed thing, it's when I sync my code throught the USB cable to the Arduino, I got an error message excepted if I removed the two wires from port 0 and 1. Is there a way to avoid removing the wires while synchronizing the code?

Quote
Do you need to receive data on the cell's serial port?
Heuuu, I do not know. I wanted to have it separate. "Each of them have their own tunnel". Should I better use the same port for them?
Code:
#define GPRSBAUD 9600
#define GPRSRX 2
#define GPRSTX 3

SoftwareSerial cell(GPRSRX,GPRSTX);

Quote
If not, just use listen to tell the gps to be the active listener
May I ask you to show me an exemple? I absolutely have no idea how to do it

Thank a lot
356  International / Français / Re: Es-ce possible d'avoir 3.3V avec Arduino Pro mini on: April 05, 2013, 11:44:52 am
Ha ok  smiley-kiss  smiley-small
Merciiii
357  International / Français / Re: Es-ce possible d'avoir 3.3V avec Arduino Pro mini on: April 05, 2013, 02:43:09 am
Hello

@thib974
Ben j'ai pensé prencher le Vin de mon module GPS dans le VCC du Arduino. Je ne sais pas si je peux le faire car j'ai lu qu'il fallait prendre la pin 5V du Arduino Uno pour alimenter un autre module. Idem pour le 3.3

@Batto
Donc il faudrait que je réalise une petit circuit qui génère du 4V pour mon GPRS. Je dois trouver ca sur le net

Merci
358  International / Français / Re: Comment convertir un float en un String on: April 05, 2013, 02:39:40 am
Hello merci pour vos réponses.
Je vais prendre le temps de regarder.
Une petite précision que je n'ai pas mis.

Pour le moment je test en l'imrpimant sur le terminal
Code:
Serial.println(request + "?lat=" + &flat + "&long=" + char(flon) + "&alt=" + char(falt) + "&speed=" + char(fspeed) + "&course=" + TinyGPS::cardinal(gps.f_course()) + "&age=" + char(fage) + request_end);
mais en fait, je vais devoir tout mettre dans une variable.
Par exemple:

Code:
String package_to_send = request + "?lat=" + &flat + "&long=" + char(flon) + "&alt=" + char(falt) + "&speed=" + char(fspeed) + "&course=" + TinyGPS::cardinal(gps.f_course()) + "&age=" + char(fage) + request_end;

ou
Code:
request = request + "?lat=" + &flat + "&long=" + char(flon) + "&alt=" + char(falt) + "&speed=" + char(fspeed) + "&course=" + TinyGPS::cardinal(gps.f_course()) + "&age=" + char(fage) + request_end
Mais , en fait, request est une constant, donc je ne sais pas on peut modifier sa valeur

@Philomonale,
Puis-je te demander une exemple du bufferisation avec String?

Milles mercis à vous
359  Using Arduino / Programming Questions / Re: Can I initilize 3 serial port in setup loop? on: April 05, 2013, 02:28:49 am
Hello PeterH
Yes it's exactely this.
Bothe are initialize with SoftwareSerial. Then wich alternative I have? to use port 4 and 6 for uart_gps?
As I mentionned, I can use Serial. and put my 2 wire in port 0 and 1 instead of 4 and 5 and not using SoftwareSerial but the problem, each time I sync my sctech to Arduino I have to remove the wire from port 0 and 1. I am a beginer but once I read it not a good idea to use Hardware port.

So I am interested for an alternative to use port 4 and 5

many thnak
360  International / Français / Es-ce possible d'avoir 3.3V avec Arduino Pro mini on: April 04, 2013, 06:58:00 pm
Bonjour,
je viens de recevoir un Arduino pro mini.
Quand je regarde de pret, je ne vois pas de sortie 3.3V et 5V comme il y en a une sur l'Arduino Uno R3

Alors ma question,
Avec mon Arduino mini pro 5V/16Mhz, comme puis alimenter
,

Merci pour vos lumières
Pages: 1 ... 22 23 [24] 25 26 ... 33