Go Down

Topic: tracker logger drone (Read 2245 times) previous topic - next topic

infobarquee

Apr 13, 2017, 12:05 pm Last Edit: Apr 13, 2017, 12:06 pm by infobarquee
bonjour tout le monde,
petit projet pour mon boulot afin de tracker mes drones et logger les datas
matériel :
1 gps neo6n j'avais ca sous la main
1 pro mini pour émetteur
1 uno pour récepteur
1 émetteur 433mhz
1 récepteur 433mhz
du café et clopes, je sais les deux sont pas bons.

pour le moment, les codes sont franchement borderline
ide 1.8 sous nunux

pin 11 pour data 433mhz

un script python pour logger dans un txt

Vous allez me dire, pourquoi se faire ch.. avec du 433mhz au lieu de prendre un gprs, c'est que pas besoin de sim, donc abonnement.
Vous pouvez rajouter un lcd pour avoir les infos, mais j'utilise un server apache pour visualiser le drone et avoir les infos en live.

partie émetteur
je suis parti de l'exemple et pas optimisé le code pour un sous :)

Code: [Select]
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <VirtualWire.h>

/*
   This sample code demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/
static const int RXPin = 3, TXPin = 4;
static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
const int transmit_pin = 11;
//const char *msg= " ";
// char msg[20];


void setup()
{
  Serial.begin(115200);
  ss.begin(GPSBaud);

  Serial.println(F("FullExample.ino"));
  Serial.println(F("An extensive example of many interesting TinyGPS++ features"));
  Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println(F("by Mikal Hart"));
  Serial.println();
  Serial.println(F("Sats HDOP Latitude   Longitude   Fix  Date       Time     Date Alt    Course Speed Card  Distance Course Card  Chars Sentences Checksum"));
  Serial.println(F("          (deg)      (deg)       Age                      Age  (m)    --- from GPS ----  ---- to London  ----  RX    RX        Fail"));
  Serial.println(F("---------------------------------------------------------------------------------------------------------------------------------------"));
vw_set_tx_pin(transmit_pin);
 vw_setup(2000);
 }

void loop()
{
  static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;

  printInt(gps.satellites.value(), gps.satellites.isValid(), 5);
  printInt(gps.hdop.value(), gps.hdop.isValid(), 5);
  printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
  printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
  printInt(gps.location.age(), gps.location.isValid(), 5);
  printDateTime(gps.date, gps.time);
  printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2);
  printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);
  printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);
  printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.value()) : "*** ", 6);

  unsigned long distanceKmToLondon =
    (unsigned long)TinyGPSPlus::distanceBetween(
      gps.location.lat(),
      gps.location.lng(),
      LONDON_LAT,
      LONDON_LON) / 1000;
  printInt(distanceKmToLondon, gps.location.isValid(), 9);

  double courseToLondon =
    TinyGPSPlus::courseTo(
      gps.location.lat(),
      gps.location.lng(),
      LONDON_LAT,
      LONDON_LON);

  printFloat(courseToLondon, gps.location.isValid(), 7, 2);

  const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon);

  printStr(gps.location.isValid() ? cardinalToLondon : "*** ", 6);

  printInt(gps.charsProcessed(), true, 6);
  printInt(gps.sentencesWithFix(), true, 10);
  printInt(gps.failedChecksum(), true, 9);
  Serial.println();
  
  smartDelay(1000);

  if (millis() > 5000 && gps.charsProcessed() < 10)
    Serial.println(F("No GPS data received: check wiring"));
     envoigps();

}

// This custom version of delay() ensures that the gps object
// is being "fed".
static void smartDelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

static void printFloat(float val, bool valid, int len, int prec)
{
  if (!valid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(' ');
  }
  smartDelay(0);
}

static void printInt(unsigned long val, bool valid, int len)
{
  char sz[32] = "*****************";
  if (valid)
    sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0)
    sz[len-1] = ' ';
  Serial.print(sz);
  smartDelay(0);
}

static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
{
  if (!d.isValid())
  {
    Serial.print(F("********** "));
  }
  else
  {
    char sz[32];
    sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year());
    Serial.print(sz);
  }
  
  if (!t.isValid())
  {
    Serial.print(F("******** "));
  }
  else
  {
    char sz[32];
    sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second());
    Serial.print(sz);
  }

  printInt(d.age(), d.isValid(), 5);
  smartDelay(0);
}

static void printStr(const char *str, int len)
{
  int slen = strlen(str);
  for (int i=0; i<len; ++i)
    Serial.print(i<slen ? str[i] : ' ');
  smartDelay(0);
}

 void envoigps(){


   printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
     printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
  printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2);
  printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);
  printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);

    

float latitude = gps.location.lat();
float longitude = gps.location.lng();
float altitud = gps.altitude.meters();
float vitesse = gps.speed.kmph();


  Serial.print("lat : ");Serial.println(latitude,5);
  Serial.print("lon : ");Serial.println(longitude,5);
  Serial.print("alti : ");Serial.println(altitud);
  Serial.print("vitesse : ");Serial.println(vitesse);
  
  char sendlat[10];
  char sendlong[10];
  char sendaltitud[10];
  char sendvitesse[10];
  

  dtostrf(latitude, 5, 6, sendlat);
  dtostrf(longitude, 5, 6, sendlong);
  dtostrf(altitud, 5, 2, sendaltitud);
  dtostrf(vitesse, 5, 2, sendvitesse);


char sednlatlong[50];
//String sendlatlon = "latitude : " + String(sendlat) + " longitude : " + String(sendlong);
String sendlatlon = String(sendlat) + "/" + String(sendlong) + " " + String(sendaltitud) + "?" + String(sendvitesse);

Serial.println(sendlatlon);
sendlatlon.toCharArray(sednlatlong, 50) ;

 vw_send((uint8_t *)sednlatlong, strlen(sednlatlong));
  vw_wait_tx();

 }
AUCUNE AIDE PAR MP

infobarquee

partie récepteur

Code: [Select]
#include <VirtualWire.h> // inclusion de la librairie VirtualWire

const int receive_pin = 11;
int sensorArray[50] = {};
float x;
float y;
char separateur = "/";
String inputString = "";
String inputString1 = "";
String inputString2 = "";

String latitude;
String longitude;
String altitud;
String vitesse;
void setup() // Fonction setup()
{
  Serial.begin(115200); // Initialisation du port série pour avoir un retour sur le serial monitor
 // Serial.println("telecommande"); // Petit message de bienvenue
  vw_set_rx_pin(receive_pin);
  vw_setup(2000); // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
  vw_rx_start();  // Activation de la partie réception de la librairie VirtualWire
  inputString.reserve(200);
}

void loop() // Fonction loop()

{
  uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
  uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
  if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
  {
    inputString = "";
    inputString1 = "";
    inputString2 = "";

    latitude = "" ;
    longitude = "";
    altitud = "";
    vitesse = "";
    if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
    {
      int i;

      for (i = 0; i < buflen; i++)
      {
        //Serial.println(buf[i]);
        char recu = (char)buf[i];
        inputString += recu;
               // Serial.println(recu);

       
   
       
      }

      }

   //  Serial.println(inputString);



 
      for (int i = 0; i < inputString.length(); i++) {
        if (inputString.substring(i, i+1) == " ") {
           inputString1 = inputString.substring(0, i);
            inputString2= inputString.substring(i+1);
            break;
          }
      }
 

      for (int i = 0; i < inputString1.length(); i++) {
        if (inputString1.substring(i, i+1) == "/") {
           latitude = inputString1.substring(0, i);
            longitude= inputString1.substring(i+1);
            break;
          }
      }


     for (int i = 0; i < inputString2.length(); i++) {
        if (inputString2.substring(i, i+1) == "?") {
           altitud = inputString2.substring(0, i);
            vitesse= inputString2.substring(i+1);
            break;
          }
      }

if (latitude != "" || longitude !=""){
  /*
//debug des datas
  Serial.print("lat : "); Serial.println(latitude);
  Serial.print("lon : "); Serial.println(longitude);
  Serial.print("alti : "); Serial.println(altitud);
  Serial.print("vitesse : "); Serial.println(vitesse);
*/
  //Serial.println(latitude + "," + longitude + "," + altitud + "," + vitesse);
  Serial.println("capteur="  + vitesse+ "Z" + altitud + "&lon=" + longitude + "&lat=" + latitude );
}

} else {

}

}
AUCUNE AIDE PAR MP

infobarquee

partie python avec envoi sur un server en GET
recup_data_python.py

Code: [Select]
import serial
import datetime
import urllib
ser = serial.Serial('/dev/ttyACM0',115200)

# cette info est donnee par l'interface java arduino
print ser
while True:  #mettre autre condition, un compteur par exemple
    date = datetime.datetime.now()
    x = ser.readline()          # read one byte
    print "data", x
    with open("output.txt", "a") as fichier:
fichier.write(str(date))
fichier.write(",")
    x = ser.readline()          # read one byte
        mycollapsedstring = ' '.join(x.split())
        #print mycollapsedstring.split(':')
fichier.write(mycollapsedstring)
        print"ecriture ok"
fichier.write("\n")
urllib.urlopen("http://127.0.0.1/add.php?" + mycollapsedstring)

fichier.close()

ser.close()
AUCUNE AIDE PAR MP

infobarquee

voilà ce que ca donne dans le fichier txt

Code: [Select]
2017-04-13 11:50:00.129713,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.17Z0Z39.30&lon=-2.462976&lat=47.391792
2017-04-13 11:50:00.227600,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.13Z0Z40.90&lon=-2.462974&lat=47.391788
2017-04-13 11:50:05.047124,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.17Z0Z42.20&lon=-2.462972&lat=47.391785t
2017-04-13 11:50:10.909467,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.20Z0Z42.60&lon=-2.462972&lat=47.391781t
2017-04-13 11:50:15.083946,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.07Z0Z42.60&lon=-2.462972&lat=47.391781
2017-04-13 11:50:20.933978,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.13Z0Z42.50&lon=-2.462973&lat=47.391781
2017-04-13 11:50:23.884399,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.06Z0Z42.40&lon=-2.462972&lat=47.391777
2017-04-13 11:50:28.058639,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.26Z0Z43.10&lon=-2.462972&lat=47.391777
2017-04-13 11:50:33.922792,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.37Z0Z42.80&lon=-2.462973&lat=47.391777
2017-04-13 11:50:38.121950,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.09Z0Z42.00&lon=-2.462973&lat=47.391777
2017-04-13 11:50:43.976324,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.39Z0Z41.50&lon=-2.462973&lat=47.391781
2017-04-13 11:50:48.163262,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.20Z0Z42.00&lon=-2.462973&lat=47.391777
2017-04-13 11:50:54.020524,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.02Z0Z41.60&lon=-2.462976&lat=47.391781
2017-04-13 11:50:59.905293,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.15Z0Z41.00&lon=-2.462982&lat=47.391785
2017-04-13 11:51:04.069614,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.09Z0Z40.20&lon=-2.462988&lat=47.391785
2017-04-13 11:51:09.920872,capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z 0.24Z0Z39.70&lon=-2.462995&lat=47.391792
AUCUNE AIDE PAR MP

infobarquee

amélioration du projet
rajout d'un LCD 4884, capteur US hc-04 qui trainait
le code n'est toujours pas optimisé ni propre, mais les tests sont satisfaisants pour le moment.
récepteur dans la maison, portée 70-80m en passant derrière un autre batiment

Emetteur
Code: [Select]
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <VirtualWire.h>

/*
   This sample code demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/
static const int RXPin = 3, TXPin = 4;
static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
const int transmit_pin = 11;
//const char *msg= " ";
// char msg[20];

int trig = 5;
int echo = 6;
long lecture_echo;
long cm;

void setup()
{
  Serial.begin(115200);
  ss.begin(GPSBaud);

  Serial.println(F("FullExample.ino"));
  Serial.println(F("An extensive example of many interesting TinyGPS++ features"));
  Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println(F("by Mikal Hart"));
  Serial.println();
  Serial.println(F("Sats HDOP Latitude   Longitude   Fix  Date       Time     Date Alt    Course Speed Card  Distance Course Card  Chars Sentences Checksum"));
  Serial.println(F("          (deg)      (deg)       Age                      Age  (m)    --- from GPS ----  ---- to London  ----  RX    RX        Fail"));
  Serial.println(F("---------------------------------------------------------------------------------------------------------------------------------------"));
vw_set_tx_pin(transmit_pin);
 vw_setup(2000);

 pinMode(trig, OUTPUT);
  digitalWrite(trig, LOW);
  pinMode(echo, INPUT);

 
 }

void loop()
{
  static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;

  printInt(gps.satellites.value(), gps.satellites.isValid(), 5);
  printInt(gps.hdop.value(), gps.hdop.isValid(), 5);
  printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
  printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
  printInt(gps.location.age(), gps.location.isValid(), 5);
  printDateTime(gps.date, gps.time);
  printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2);
  printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);
  printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);
  printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.value()) : "*** ", 6);

  unsigned long distanceKmToLondon =
    (unsigned long)TinyGPSPlus::distanceBetween(
      gps.location.lat(),
      gps.location.lng(),
      LONDON_LAT,
      LONDON_LON) / 1000;
  printInt(distanceKmToLondon, gps.location.isValid(), 9);

  double courseToLondon =
    TinyGPSPlus::courseTo(
      gps.location.lat(),
      gps.location.lng(),
      LONDON_LAT,
      LONDON_LON);

  printFloat(courseToLondon, gps.location.isValid(), 7, 2);

  const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon);

  printStr(gps.location.isValid() ? cardinalToLondon : "*** ", 6);

  printInt(gps.charsProcessed(), true, 6);
  printInt(gps.sentencesWithFix(), true, 10);
  printInt(gps.failedChecksum(), true, 9);
  Serial.println();
 
  smartDelay(1000);

  if (millis() > 5000 && gps.charsProcessed() < 10)
    Serial.println(F("No GPS data received: check wiring"));
     envoigps();

}

// This custom version of delay() ensures that the gps object
// is being "fed".
static void smartDelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    while (ss.available())
      gps.encode(ss.read());
  } while (millis() - start < ms);
}

static void printFloat(float val, bool valid, int len, int prec)
{
  if (!valid)
  {
    while (len-- > 1)
      Serial.print('*');
    Serial.print(' ');
  }
  else
  {
    Serial.print(val, prec);
    int vi = abs((int)val);
    int flen = prec + (val < 0.0 ? 2 : 1); // . and -
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
    for (int i=flen; i<len; ++i)
      Serial.print(' ');
  }
  smartDelay(0);
}

static void printInt(unsigned long val, bool valid, int len)
{
  char sz[32] = "*****************";
  if (valid)
    sprintf(sz, "%ld", val);
  sz[len] = 0;
  for (int i=strlen(sz); i<len; ++i)
    sz[i] = ' ';
  if (len > 0)
    sz[len-1] = ' ';
  Serial.print(sz);
  smartDelay(0);
}

static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
{
  if (!d.isValid())
  {
    Serial.print(F("********** "));
  }
  else
  {
    char sz[32];
    sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year());
    Serial.print(sz);
  }
 
  if (!t.isValid())
  {
    Serial.print(F("******** "));
  }
  else
  {
    char sz[32];
    sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second());
    Serial.print(sz);
  }

  printInt(d.age(), d.isValid(), 5);
  smartDelay(0);
}

static void printStr(const char *str, int len)
{
  int slen = strlen(str);
  for (int i=0; i<len; ++i)
    Serial.print(i<slen ? str[i] : ' ');
  smartDelay(0);
}

 void envoigps(){


   printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
     printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
  printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2);
  printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);
  printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);

     

float latitude = gps.location.lat();
float longitude = gps.location.lng();
float altitud = gps.altitude.meters();
float vitesse = gps.speed.kmph();


  Serial.print("lat : ");Serial.println(latitude,5);
  Serial.print("lon : ");Serial.println(longitude,5);
  Serial.print("alti : ");Serial.println(altitud);
  Serial.print("vitesse : ");Serial.println(vitesse);

distance();

 
  char sendlat[10];
  char sendlong[10];
  char sendaltitud[10];
  char sendvitesse[10];
  char senddistancesol[10];

  dtostrf(latitude, 5, 6, sendlat);
  dtostrf(longitude, 5, 6, sendlong);
  dtostrf(altitud, 5, 2, sendaltitud);
  dtostrf(vitesse, 5, 2, sendvitesse);
  dtostrf(cm, 5, 2, senddistancesol);


char sednlatlong[50];
//String sendlatlon = "latitude : " + String(sendlat) + " longitude : " + String(sendlong);
String sendlatlon = String(sendlat) + "/" + String(sendlong) + " " + String(sendaltitud) + "?" + String(sendvitesse) + "*" + String(senddistancesol);

Serial.println(sendlatlon);
sendlatlon.toCharArray(sednlatlong, 50) ;

 vw_send((uint8_t *)sednlatlong, strlen(sednlatlong));
  vw_wait_tx();

 }

void distance(){
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
 
  lecture_echo = pulseIn(echo, HIGH);
  cm = lecture_echo / 58;
  Serial.print("Distance en cm : ");
  Serial.println(cm);
return;

}

AUCUNE AIDE PAR MP

infobarquee

récepteur
Code: [Select]
#include <VirtualWire.h> // inclusion de la librairie VirtualWire
#include "LCD4884.h"

const int receive_pin = 11;
int sensorArray[50] = {};
float x;
float y;
char separateur = "/";
String inputString = "";
String inputString1 = "";
String inputString2 = "";
String inputString3 = "";

String latitude;
String longitude;
String altitud;
String vitesse;
String distance;

//keypad debounce parameter
#define DEBOUNCE_MAX 15
#define DEBOUNCE_ON  10
#define DEBOUNCE_OFF 3

#define NUM_KEYS 5

#define NUM_MENU_ITEM  4

// joystick number
#define LEFT_KEY 0
#define CENTER_KEY 1
#define DOWN_KEY 2
#define RIGHT_KEY 3
#define UP_KEY 4

int  adc_key_val[5] ={
  50, 200, 400, 600, 800 };

// debounce counters
byte button_count[NUM_KEYS];
// button status - pressed/released
byte button_status[NUM_KEYS];
// button on flags for user program
byte button_flag[NUM_KEYS];


void setup() // Fonction setup()
{
  Serial.begin(115200); // Initialisation du port série pour avoir un retour sur le serial monitor
 // Serial.println("telecommande"); // Petit message de bienvenue
  vw_set_rx_pin(receive_pin);
  vw_setup(2000); // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
  vw_rx_start();  // Activation de la partie réception de la librairie VirtualWire
  inputString.reserve(200);
   lcd.LCD_init();
  lcd.LCD_clear();
    lcd.backlight(ON);//Turn on the backlight
 for(byte i=0; i<NUM_KEYS; i++){
    button_count[i]=0;
    button_status[i]=0;
    button_flag[i]=0;
  }

  // Setup timer2 -- Prescaler/256
  TCCR2A &= ~((1<<WGM21) | (1<<WGM20));
  TCCR2B &= ~(1<<WGM22);
  TCCR2B = (1<<CS22)|(1<<CS21);     

  ASSR |=(0<<AS2);

  // Use normal mode 
  TCCR2A =0;   
  //Timer2 Overflow Interrupt Enable 
  TIMSK2 |= (0<<OCIE2A);
  TCNT2=0x6;  // counting starts from 6; 
  TIMSK2 = (1<<TOIE2);   



  SREG|=1<<SREG_I;
}

void loop() // Fonction loop()

{
  uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
  uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
  if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
  {
    inputString = "";
    inputString1 = "";
    inputString2 = "";
    inputString3 = "";

    latitude = "" ;
    longitude = "";
    altitud = "";
    vitesse = "";
    distance ="";
    if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
    {
      int i;

      for (i = 0; i < buflen; i++)
      {
        Serial.println(buf[i]);
        char recu = (char)buf[i];
        inputString += recu;
                Serial.println(recu);

       
   
       
      }

      }

    Serial.println(inputString);



 
      for (int i = 0; i < inputString.length(); i++) {
        if (inputString.substring(i, i+1) == " ") {
           inputString1 = inputString.substring(0, i);
            inputString2= inputString.substring(i+1);
            break;
          }
      }
 

      for (int i = 0; i < inputString1.length(); i++) {
        if (inputString1.substring(i, i+1) == "/") {
           latitude = inputString1.substring(0, i);
            longitude= inputString1.substring(i+1);
            break;
          }
      }


     for (int i = 0; i < inputString2.length(); i++) {
        if (inputString2.substring(i, i+1) == "?") {
           altitud = inputString2.substring(0, i);
            inputString3= inputString2.substring(i+1);
          //  inputString3 =vitesse;
            break;
          }
      }

    for (int i = 0; i < inputString3.length(); i++) {
        if (inputString3.substring(i, i+1) == "*") {
           vitesse = inputString3.substring(0, i);
            distance= inputString3.substring(i+1);
            break;
          }
      }

     

if (latitude != "" || longitude !=""){
      lcd.LCD_write_string(5,5, "OK   PORTEE ",MENU_HIGHLIGHT);

  char templat[20];
  latitude.toCharArray(templat, 20);
  lcd.LCD_write_string(0,0, "LAT ",MENU_NORMAL);
  lcd.LCD_write_string(25, 0, templat, MENU_NORMAL);
  char templng[20];
  longitude.toCharArray(templng, 10);
  lcd.LCD_write_string(0,1, "LNG ",MENU_NORMAL);
  lcd.LCD_write_string(25,1, templng, MENU_NORMAL);
  char tempaltitud[20];
  altitud.toCharArray(tempaltitud, 10);
  lcd.LCD_write_string(0,2, "ALT ",MENU_NORMAL);
  lcd.LCD_write_string(25,2, tempaltitud, MENU_NORMAL);
  lcd.LCD_write_string(55,2, "m ",MENU_NORMAL);

 char tempvitesse[20];
  vitesse.toCharArray(tempvitesse, 10);
  lcd.LCD_write_string(0,3, "VIT ",MENU_NORMAL);
  lcd.LCD_write_string(25,3, tempvitesse , MENU_NORMAL);
  lcd.LCD_write_string(55,3, "Km/h ",MENU_NORMAL);

 char tempdistance[20];
  distance.toCharArray(tempdistance, 10);
  lcd.LCD_write_string(0,4, "SOL ",MENU_NORMAL);
  lcd.LCD_write_string(25,4, tempdistance , MENU_NORMAL);
  lcd.LCD_write_string(65,4, "cm ",MENU_NORMAL);
 
  Serial.print("lat : "); Serial.println(latitude);
  Serial.print("lon : "); Serial.println(longitude);
  Serial.print("alti : "); Serial.println(altitud);
  Serial.print("vitesse : "); Serial.println(vitesse);
  Serial.print("distance : "); Serial.println(distance);


  //Serial.println(latitude + "," + longitude + "," + altitud + "," + vitesse);
  Serial.println("capteur=0Z0Z0Z0Z0Z0Z0Z0Z0Z0Z"  + vitesse+ "Z0Z" + altitud + "&lon=" + longitude + "&lat=" + latitude + "&ident=test");


 
}




} else {
  Serial.println("hors portee ou eteint");
  /*
    lcd.LCD_write_string(0,0, "LAT ",MENU_HIGHLIGHT);
  lcd.LCD_write_string(0,1, "LNG ",MENU_HIGHLIGHT);
  lcd.LCD_write_string(0,2, "ALT ",MENU_HIGHLIGHT);
  lcd.LCD_write_string(0,3, "VIT ",MENU_HIGHLIGHT);
*/
    lcd.LCD_write_string(5,5, "HORS PORTEE ",MENU_HIGHLIGHT);

/*
  Serial.println(inputString);
 
      for (int i = 0; i < inputString.length(); i++) {
        if (inputString.substring(i, i+1) == " ") {
           inputString1 = inputString.substring(0, i);
            inputString2= inputString.substring(i+1);
            break;
          }
      }
 

      for (int i = 0; i < inputString1.length(); i++) {
        if (inputString1.substring(i, i+1) == "/") {
           latitude = inputString1.substring(0, i);
            longitude= inputString1.substring(i+1);
            break;
          }
      }


     for (int i = 0; i < inputString2.length(); i++) {
        if (inputString2.substring(i, i+1) == "?") {
           altitud = inputString2.substring(0, i);
            vitesse= inputString2.substring(i+1);
            break;
          }
      }

  Serial.print("lat : "); Serial.println(latitude);
  Serial.print("lon : "); Serial.println(longitude);
  Serial.print("alti : "); Serial.println(altitud);
  Serial.print("vitesse : "); Serial.println(vitesse);

 */
}
 // waitfor_OKkey();

}


// waiting for center key press
void waitfor_OKkey(){
  byte i;
  byte key = 0xFF;
  while (key!= CENTER_KEY){
    for(i=0; i<NUM_KEYS; i++){
      if(button_flag[i] !=0){
        button_flag[i]=0;  // reset button flag
        if(i== CENTER_KEY) key=CENTER_KEY;
      }
    }
  }

}

// Convert ADC value to key number
char get_key(unsigned int input)
{
  char k;

  for (k = 0; k < NUM_KEYS; k++)
  {
    if (input < adc_key_val[k])
    {

      return k;
    }
  }

  if (k >= NUM_KEYS)
    k = -1;     // No valid key pressed

  return k;
}

void update_adc_key(){
  int adc_key_in;
  char key_in;
  byte i;

  adc_key_in = analogRead(0);
  key_in = get_key(adc_key_in);
  for(i=0; i<NUM_KEYS; i++)
  {
    if(key_in==i)  //one key is pressed
    {
      if(button_count[i]<DEBOUNCE_MAX)
      {
        button_count[i]++;
        if(button_count[i]>DEBOUNCE_ON)
        {
          if(button_status[i] == 0)
          {
            button_flag[i] = 1;
            button_status[i] = 1; //button debounced to 'pressed' status
          }

        }
      }

    }
    else // no button pressed
    {
      if (button_count[i] >0)
      { 
        button_flag[i] = 0; 
        button_count[i]--;
        if(button_count[i]<DEBOUNCE_OFF){
          button_status[i]=0;   //button debounced to 'released' status
        }
      }
    }

  }
}

// Timer2 interrupt routine -
// 1/(160000000/256/(256-6)) = 4ms interval

ISR(TIMER2_OVF_vect) { 
  TCNT2  = 6;
  update_adc_key();
}
AUCUNE AIDE PAR MP

infobarquee

#6
Apr 21, 2017, 12:39 pm Last Edit: Apr 22, 2017, 08:31 pm by infobarquee
petites photos



AUCUNE AIDE PAR MP

bentp3

bonjours je vient de tombé sur votre projet qui m'intéresse grandement  je souhaiterais savoir sur quel pin de l'Arduino vous cabler les pin cs sck mosi misco du sd adaptater cordialement

Go Up