Go Down

Topic: Starte med Arduino (Read 4558 times) previous topic - next topic

Xrim

#15
Mar 16, 2010, 10:02 pm Last Edit: Mar 16, 2010, 10:04 pm by Xrim Reason: 1
Det var löjligt enkelt, gör bara som killen på youtube så har du GPS data på din serial monitor inom några minuter.
Beställde från

http://www.active-robots.com/products/parallax/parallax-compass-gps-sensors.shtml


Änvänd denna koden om du vill ha lite mer lättläst data.
Code: [Select]


#include <string.h>
#include <ctype.h>

int ledPin = 13;                  // LED test pin
int rxPin = 0;                    // RX PIN
int txPin = 1;                    // TX TX
int byteGPS=-1;
char linea[300] = "";
char comandoGPR[7] = "$GPRMC";
int cont=0;
int bien=0;
int conta=0;
int indices[13];

void setup() {
  pinMode(ledPin, OUTPUT);       // Initialize LED pin
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  Serial.begin(4800);
  for (int i=0;i<300;i++){       // Initialize a buffer for received data
    linea[i]=' ';
  }  
}

void loop() {
  digitalWrite(ledPin, HIGH);
  byteGPS=Serial.read();         // Read a byte of the serial port
  if (byteGPS == -1) {           // See if the port is empty yet
    delay(100);
  } else {
    linea[conta]=byteGPS;        // If there is serial port data, it is put in the buffer
    conta++;                      
    Serial.print(byteGPS, BYTE);
    if (byteGPS==13){            // If the received byte is = to 13, end of transmission
      digitalWrite(ledPin, LOW);
      cont=0;
      bien=0;
      for (int i=1;i<7;i++){     // Verifies if the received command starts with $GPR
        if (linea[i]==comandoGPR[i-1]){
          bien++;
        }
      }
      if(bien==6){               // If yes, continue and process the data
        for (int i=0;i<300;i++){
          if (linea[i]==','){    // check for the position of the  "," separator
            indices[cont]=i;
            cont++;
          }
          if (linea[i]=='*'){    // ... and the "*"
            indices[12]=i;
            cont++;
          }
        }
        Serial.println("");      // ... and write to the serial port
        Serial.println("");
        Serial.println("---------------");
        for (int i=0;i<12;i++){
          switch(i){
            case 0 :Serial.print("Time in UTC (HhMmSs): ");break;
            case 1 :Serial.print("Status (A=OK,V=KO): ");break;
            case 2 :Serial.print("Latitude: ");break;
            case 3 :Serial.print("Direction (N/S): ");break;
            case 4 :Serial.print("Longitude: ");break;
            case 5 :Serial.print("Direction (E/W): ");break;
            case 6 :Serial.print("Velocity in knots: ");break;
            case 7 :Serial.print("Heading in degrees: ");break;
            case 8 :Serial.print("Date UTC (DdMmAa): ");break;
            case 9 :Serial.print("Magnetic degrees: ");break;
            case 10 :Serial.print("(E/W): ");break;
            case 11 :Serial.print("Mode: ");break;
            case 12 :Serial.print("Checksum: ");break;
          }
          for (int j=indices[i];j<(indices[i+1]-1);j++){
            Serial.print(linea[j+1]);
          }
          Serial.println("");
        }
        Serial.println("---------------");
       
      }
      conta=0;                    // Reset the buffer
      for (int i=0;i<300;i++){    //  
        linea[i]=' ';  
       
      }                
    }
  }
}

KapteinFredrik

Dette ser ganske vanskelig ut........ Jeg kjøper først en arduino så begynner jeg med prgrammering.........Takk for alle svar, og takk for kodene:) ;D :D ;)
Best regards, Fredrik

Xrim

#17
Mar 19, 2010, 08:40 pm Last Edit: Mar 19, 2010, 08:41 pm by Xrim Reason: 1
KapteinFredrik, jag är också en total nybörjare, jag löste problemet med att kolla runt här på forumet och till sist fatta så mycket att jag kunde kopiera den koden som behövdes och sedan ändra lite i den. Mycket trail and error :)

Så här långt är jag kommen:


om du beslutar dig med att försöka ändå så hör av dig till mig så kan vi lösa det tillsammans. Just nu har jag fått det att funka men jag vet inte hur det funkar  ;D

P.s GPS:en kostade mig ca 350kr inkusive frakt och har bättre mottagning inomhus än min Garmin för 5500kr.

KapteinFredrik

Kjempe kult prosjekt du har der xrim! Hvor er det best å bestille arduino og LCD og litt sånt fra? Www.lawicel-shop.se? Jeg bestiller nok noe i neste uke, jeg skal si i fra når jeg har fått en :) vet dere hvor jeg får tak i en grei farge LCD? Sparkfun har en billig Nokia 6100 fargge skjerm. Noen erfaringer?
Best regards, Fredrik

KapteinFredrik

hvordan lcd er det? seriel? hvor kjøpte du den?
Best regards, Fredrik

Xrim

#20
Mar 20, 2010, 04:00 pm Last Edit: Mar 20, 2010, 04:04 pm by Xrim Reason: 1
Lawicel är bra att beställa ifrån, som tur är för dig är den svenska kronan svag så det blir billigt för dig att beställa därifrån.
Tror att du skall vänta med att ge dig in på färg LCD.

Jag hade beställt följande från Lawicel
Arduino Starterkit 1   (Köpte det själv och tycker det är bra)
Parallax PMB-648 SiRF GPS
16x2 Char. LCD Blue/White BL (eller 4x20 om du vill ha en stor skärm)

Där har du allt du behöver för att börja experimentera och göra GPS projektet.
Hör av dig så fort sakerna har kommit så går vi igenom allt steg för steg och så förklarar jag det jag kan i koden (Som sagt jag är själv nybörjare).





KapteinFredrik

er det best med seriell lcd eller en parallell?
Best regards, Fredrik

Xrim

Den här tråden förklarar allt.

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1225643845/7

KapteinFredrik

Da har jeg bestilt en arduino, en instruktonsbok og tellymate shield fra elecktrokit;) Kommer 10 mai...
Best regards, Fredrik

Anders

Noen som vet hvordan en enkelt regner om koordinatene til noe som kan brukes i Google Maps så en ser at det virker? Jeg brukte en eller annen side, men jeg bommet vel med ca 100 km, ble plasert ute i sjøen utenfor Trondheim.

KapteinFredrik

Har enderlig fått min arduino:) jeg fikk med tellymate shield. Skal engynn å lære meg den til neste uke etter tentamen og prøve og alt mulig.
Best regards, Fredrik

Honk

Fixat så jag kan läsa min PMB-648 jag med med Arduino... med ett bibliotek som man hittar här, NMEA-biblioteket: http://code.google.com/p/arducopter/source/browse/#svn/trunk/libraries/GPS_NMEA

Men grejen är att jag ska använda den på mitt quadcopter-projekt, och jag var nyss ute å gick med mottagarn. Uppdaterade inte förrän jag gått c:a 50m, men då vart det en rätt noggrann position. Sen fortsatte den att printa samma koordinat tills jag rört mig 50m till. Så kan vi inte ha det.

Läste sen att det finns nåt "walk mode" här: http://forums.parallax.com/showthread.php?p=933456

Men lyckas inte alls ställa in det med Sirf-programmet även om jag får kontakt med Sirf-programmet med hjälp av ett FTDI-breakout-kort (Comportssimulerande chip som kopplas till USB-porten).

Så jag är rätt besviken att jag inte kan ändra läge den printar i. Nån annan som lyckats?

Go Up