-
gps
کد
#include <SoftwareSerial.h>
SoftwareSerial gpsSerial(10, 11); // RX, TX (TX not used)
const int sentenceSize = 80;
int state;
long times=0;
long timer=0;
long timel=0;
long timen=0;
char sentence[sentenceSize];
void setup()
{
Serial.begin(9600);
pinMode(2,INPUT);
gpsSerial.begin(9600);
}
void loop()
{
static int i = 0;
if (gpsSerial.available())
{
state=digitalRead(2);
char ch = gpsSerial.read();
if (ch != '\n' && i < sentenceSize)
{
sentence[i] = ch;
i++;
}
else
{
sentence[i] = '\0';
timen=millis();
timel=timer - timen;
i = 0;
if(state == HIGH)
{
state=0;
displayGPSemerg();
}
if(state==LOW && timel <= 0){
times = millis();
timer = times+4000;
displayGPS();
}
}
}
}
void displayGPS()
{
char field[20];
getField(field, 0);
if (strcmp(field, "$GPRMC") == 0)
{
// Set up the SMS
Serial.println("AT");
delay(20);
Serial.println("AT+CMGF=1");
delay(20);
Serial.println("AT+CMGS=\"09356256637\""); //CHANGE TO DESTINATION NUMBER
delay(20);
// Send the GPS data
Serial.print("Lat: ");
getField(field, 3); // number
Serial.print(field);
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);
// End the SMS
Serial.write(26);
delay(500);
}
}
void displayGPSemerg()
{
char field[20];
getField(field, 0);
if (strcmp(field, "$GPRMC") == 0)
{
// Set up the SMS
Serial.println("AT");
delay(20);
Serial.println("AT+CMGF=1");
delay(20);
Serial.println("AT+CMGS=\"09356256637\""); //CHANGE TO DESTINATION NUMBER
delay(20);
// Send the GPS data
Serial.print("Lat: ");
getField(field, 3); // number
Serial.print(field);
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);
Serial.print(" Im not very well !!!! ");
// End the SMS
Serial.write(26);
delay(500);
}
}
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';
}
سلام تو این کد من میخوام هر ۲۵ دقیقه موقیعت جغرافیایی رو به موبایل ارسال کنه و همچنین اگه کلید روشن شد دوباره اون اطلاعات رو بفرسته به همراه یک جمله حالا من می خوام اگه کلید ۲ دقیقه خاموش شد اون مختصات با جمله ارسال بشه ( اگه حتی یک دقیقه و سی ثانیه هم خاموش بود اون مختصات ارسال نشه و برنامه به کار خود ادامه بده تا ۲۵ دقیقه طول بکشه تا اطلاعات رو بفرسته و اگه تا قبل از این ۲۵ دقیقه کلید ۲ دقیقه خاموش شد اون مختصات رو با جمله بفرسته و وقتی ۲۵ دقبقه کامل شد مختصات رو بفرسته بدون هیچ جمله ای و برنامه بعد به کار خود ادامه بده ....... بدون هیچ توقفی )
ممنون میشم کمک کنید فقد سریع چون عجله دارم .....
-
کسی نیست کمک کنه من واقعا عجله دارم باید تا پس فردا این رو تحویل بدم مشکل من فقط تو این که اگه ممکن هست راهنمایی کنید و اگه می توانید کدش رو برام بفرستید چون من چند بار براش کد رو نوشتم جواب نميده .....
-
دوست عزیز بعید میدونم کسی وقت داشته باشه براتون کد رو آماده بنویسه
شما بفرمایید از کدوم قسمتش جواب نگرفتید؟
-
اینکه اگه کلید دو دقیقه خاموش بود موقعیت جغرافیایی با جمله فرستاده شه که جمله رو تو کد خودم نوشتم پس فقط اگه کلید دو دقیقه خاموش شد اون جمله رو بفرسته
-
فقط یک نکته تو کدی که فرستادم دو نوع موقعیت میفرسته یکی به صورت اتوماتیک هر ۲۵ دقیقه و یکی موقیت با یک جمله که اگه کلیدبه مدت ۲ دقهقه خاموش شد موقعیت با جمله ارسال شه که من تو این مشکل دارم .....
-
-
نقل قول:
نوشته اصلی توسط
peyman180
کسی نیست کمک کنه .....
ببین من نمیتونم تو کدت دست ببرم ولی برات کدی می نویسم که وصعیت یک پین رو هر 2 دقیقه چک کنه و اگر تو دقیقه خاموش بود بعد از دو دقیقه یه کاری بکنه :
کد:
const int SWpin = 13; // the number of the LED pin
long previousMillis = 0; // will store last time LED was updated
long interval = 120000; // interval at which to blink (milliseconds)
void setup() {
// set the digital pin as output:
pinMode(SWpin, INPUT);
}
void loop()
{
unsigned long currentMillis = millis();
if ( swState() == LOW) {
if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
//send GPS data
}
}
if ( swState() == HIGH) {
previousMillis = currentMillis;
}
}
bool swState() {
int data = digitalRead(SWpin);
if (data == HIGH) {
return HIGH;
}
if (data == LOW) {
return LOW;
}
}
روند این کد به این صورت هست که میاد توی لوپ وضعیت پین سوئیچ رو دائم چک می کنه
اگر LOW بود میاد چک میکنه از آخرین باری که دیتا ارسال شده دو دقه گذشته یا نه
اگه گذشته باشه دستور ارسال دیتا رو می نویسه
اگر نگذشته باشه کاری نمی کنه
اگر هم وضعیت سوئیچ HIGH بود میاد آخرین زمان رو آپدیت می کنه
SEO by vBSEO