Table des matières
Développement sur Arduino des interfaces
(gepeto,sarah)
l'arduino gérant des interfaces pas trop rapides, sera exploité en 115000 bauds sur l'USB, une trame de sortie ASCII composée pour le moment de 4 lignes : entête et données sur un total de 115k/4 soit grosso modo 100/4 soit 25 car par lignes
- GPS : GP,xxx,yyy,ttt …. latitude,longitude,temps, tout en relatif ?,
- RFID : RF,xxxxxxxxx le tag rfid (10 chars?)
- Boussole : NS,[+,-],[1-360]
- Boutons et autres: IO,xxxxx,xxxxx,xxxx, : a voir plus tard
donc une trame de 100 chars venant de l'arduino sera de la forme
GP,xxxx,yyyy,tttt,\n RF,xxxxxxxxx,\n NS,-xxx,\n IO,xxxx,xxxx,xxx,\n
GPS
- ressource protocole NMEA http://www.gpsinformation.org/dale/nmea.htm
Bidouille de test :
// A simple sketch to read GPS data and parse the $GPRMC string // see http://www.ladyada.net/make/gpsshield for more info // If using Arduino IDE prior to version 1.0, // make sure to install newsoftserial from Mikal Hart // http://arduiniana.org/libraries/NewSoftSerial/ #include "Arduino.h" #include "SoftwareSerial.h" const uint8_t sirf_to_nmea[] = { 0xa0, 0xa2, // preamble 0x00, 0x18, // message length 0x81, 0x02, // switch to NMEA 0x01, 0x01, // GGA on with checksum 0x00, 0x01, // GLL off 0x00, 0x01, // GSA off 0x00, 0x01, // GSV off 0x01, 0x01, // RMC on with checksum 0x01, 0x01, // VTG on with checksum 0x00, 0x01, // MSS off 0x00, 0x01, // EPE off 0x00, 0x01, // ZPA off 0x00, 0x00, // pad 0x96, 0x00, // 38400 0x01, 0x25, // checksum TBD 0xb0, 0xb3 }; // postamble // Use pins 2 and 3 to talk to the GPS. 2 is the TX pin, 3 is the RX pin SoftwareSerial GPSSerial = SoftwareSerial(10, 11); // Set the GPSRATE to the baud rate of the GPS module. Most are 4800 // but some are 38400 or other. Check the datasheet! //#define GPSRATE 4800 #define GPSRATE 38400 // The buffer size that will hold a GPS sentence. They tend to be 80 characters long // so 90 is plenty. #define BUFFSIZ 90 // plenty big // global variables char buffer[BUFFSIZ]; // string buffer for the sentence char *parseptr; // a character pointer for parsing char buffidx; // an indexer into the buffer // The time, date, location data, etc. uint8_t hour, minute, second, year, month, date; uint32_t latitude, longitude; uint8_t groundspeed, trackangle; char latdir, longdir; char status; void setup() { // Use the pin 13 LED as an indicator pinMode(13, OUTPUT); // connect to the serial terminal at 38400 baud Serial.begin(38400); // connect to the GPS at the desired rate GPSSerial.begin(GPSRATE); //for (uint8_t i = 0; i < sizeof(sirf_to_nmea); i++) // GPSSerial.write(sirf_to_nmea[i]); // GPSSerial.write("$PMTK220,1000*1F\r\n"); delay(100); //GPSSerial.write("$PMTK251,9600*17\r\n"); //delay(100); //GPSSerial.close(); //delay(100); //GPSSerial.begin(9600); //delay(100); GPSSerial.write("$PGCMD,16,1,0,0,0,0*6B\r\n") ; delay(100); // prints title with ending line break Serial.println("GPS parser"); } uint32_t parsedecimal(char *str) { uint32_t d = 0; while (str[0] != 0) { if ((str[0] > '9') || (str[0] < '0')) return d; d *= 10; d += str[0] - '0'; str++; } return d; } void readline(void) { char c; buffidx = 0; // start at begninning while (1) { c=GPSSerial.read(); if (c == -1) continue; Serial.print(c); if (c == '\n') continue; if ((buffidx == BUFFSIZ-1) || (c == '\r')) { buffer[buffidx] = 0; return; } buffer[buffidx++]= c; } } void loop() { uint32_t tmp; Serial.print("\n\rRead: "); readline(); // check if $GPRMC (global positioning fixed data) if (strncmp(buffer, "$GPRMC",6) == 0) { //if (strncmp(buffer, "GPGGA",6) == 0) { // hhmmss time data parseptr = buffer+7; tmp = parsedecimal(parseptr); hour = tmp / 10000; minute = (tmp / 100) % 100; second = tmp % 100; parseptr = strchr(parseptr, ',') + 1; status = parseptr[0]; parseptr += 2; // grab latitude & long data // latitude latitude = parsedecimal(parseptr); if (latitude != 0) { latitude *= 10000; parseptr = strchr(parseptr, '.')+1; latitude += parsedecimal(parseptr); } parseptr = strchr(parseptr, ',') + 1; // read latitude N/S data if (parseptr[0] != ',') { latdir = parseptr[0]; } //Serial.println(latdir); // longitude parseptr = strchr(parseptr, ',')+1; longitude = parsedecimal(parseptr); if (longitude != 0) { longitude *= 10000; parseptr = strchr(parseptr, '.')+1; longitude += parsedecimal(parseptr); } parseptr = strchr(parseptr, ',')+1; // read longitude E/W data if (parseptr[0] != ',') { longdir = parseptr[0]; } // groundspeed parseptr = strchr(parseptr, ',')+1; groundspeed = parsedecimal(parseptr); // track angle parseptr = strchr(parseptr, ',')+1; trackangle = parsedecimal(parseptr); // date parseptr = strchr(parseptr, ',')+1; tmp = parsedecimal(parseptr); date = tmp / 10000; month = (tmp / 100) % 100; year = tmp % 100; Serial.print("\n\tTime: "); Serial.print(hour, DEC); Serial.print(':'); Serial.print(minute, DEC); Serial.print(':'); Serial.println(second, DEC); Serial.print("\tDate: "); Serial.print(month, DEC); Serial.print('/'); Serial.print(date, DEC); Serial.print('/'); Serial.println(year, DEC); Serial.print("\tLat: "); if (latdir == 'N') Serial.print('+'); else if (latdir == 'S') Serial.print('-'); Serial.print(latitude/1000000, DEC); Serial.print("* "); Serial.print((latitude/10000)%100, DEC); Serial.print('\''); Serial.print(' '); Serial.print((latitude%10000)*6/1000, DEC); Serial.print('.'); Serial.print(((latitude%10000)*6/10)%100, DEC); Serial.println('"'); Serial.print("\tLong: "); if (longdir == 'E') Serial.print('+'); else if (longdir == 'W') Serial.print('-'); Serial.print(longitude/1000000, DEC); Serial.print("* "); Serial.print((longitude/10000)%100, DEC); Serial.print('\''); Serial.print(' '); Serial.print((longitude%10000)*6/1000, DEC); Serial.print('.'); Serial.print(((longitude%10000)*6/10)%100, DEC); Serial.println('"'); } // Serial.println(buffer); }
ce qui nous donne : $GPRMC,180535.000,A,4716.6260,N,00212.6208,W,0.00,185.27,180712,,,A*79
Time: 18:5:35 Date: 7/18/12 Lat: +47* 16' 37.56" Long: -2* 12' 37.24"
ce qui donne bien 61 rue d'anjou : Lat:+47* 16' 37.56“ Long: -2* 12' 37.24”.
Zigbee
Ce serait pas mal qu'il soit sur l'USB pour optimiser les transferts de donnee
mini écran
tests autour du module tactile
http://www.ladyada.net/products/tfttouchshield/
il nous faudrait developper des parties pour l'affichage de texte
Bon nous allons regarder aussi du coté de la KOBO !
tests autour du module à bouton
l'affichage de texte est deja das les librairies a voir …