• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Prośba o sprawdzenie kodu
#1
Witam
Na początku pragnę poinformować że dopiero raczkuje z elektroniką i programowaniem.W związku z tym proszę o wyrozumiałość : >
Chcę za pomocą arduino + neoway m590 + czujnik temperatury DS18B20 przesyłać temperaturę po wysłaniu smsa z komendą.Przy wsparciu książek+internetu wyskrobałem taki kod:

Kod:
#include <DallasTemperature.h>
#include <OneWire.h>
#include <SoftwareSerial.h>
String textForSMS;
float currentTemp;
char inchar;

SoftwareSerial cellSerial(4,5); // numery pinów tx rx chyba?
#define ONEWIRE_PIN 2             /// numer pinu czujnika temp.
byte address[8] = {0x28, 0xFF, 0xFC, 0xDA, 0x84, 0x16, 0x5, 0x50}; /// adres czujnika temp.

OneWire onewire(ONEWIRE_PIN);
DallasTemperature sensors(&onewire);

void setup()
{
cellSerial.begin(57600); /// boud rate modułu GSM
Serial.begin(9600); /// rate sensora temp.
delay(3000);
sensors.begin();
}

void SendTextMessage(String message) ///funkcja do wysyłania wiadomości SMS
{
cellSerial.print("AT+CMGF=1\r"); // przełączenie modułu na text mode
delay(300);
cellSerial.println("AT+CSCS=\"GSM\"\r"); /// ustawianie znaków GSM
delay(300);
cellSerial.println("AT+SMGS=\"+48697516999\"\r"); // numer telefonu do którego ma wysłać
delay(300);
cellSerial.println(message); // zawartość wiadomości SMS
cellSerial.println((char)26); // kod26 to zakończenie "CTRL+Z"
delay(2000);
cellSerial.println();
}


void loop()
{
if (cellSerial.available() > 0)
{
 inchar = cellSerial.read();
 if (inchar == '#') // początek polecenia w komendzie SMS
 {
   delay(20);
   inchar = cellSerial.read();
   if (inchar == 't')
   {
     delay(20);
     inchar = cellSerial.read();
     if (inchar == 'm')
     {
       delay(20);
       inchar = cellSerial.read();
       if (inchar == 'p')
      {
      Serial.println ("rozpoczecie odczytu temperatury");
      currentTemp = sensors.getTempCByIndex(0);
      textForSMS = "Temperatura:";
      textForSMS = (textForSMS, currentTemp);
      Serial.println("wiadomosc:");
      Serial.println(textForSMS);
      SendTextMessage (textForSMS);
      delay(30000);
      Serial.println("zakonczono czas oczekiwania");
      }
      }
      cellSerial.println("AT+CMGD=3"); // usuwanie smsów
     }
   }
 }
}



Z góry dziękuję za wyrozumiałość i pomoc.
 
Odpowiedź
#2
A w czym masz problem jakieś błędy zgłasza, coś ci nie działa, na co mamy zwrócić uwage.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
Napisałem kod od nowa ( zaktualizowany u góry ).Po wgraniu i wysłaniu komendy #tmp nic sie nie dzieje : /
 
Odpowiedź
#4
Zamień piny. Jest TX RX, a powinno być RX TX.
A po co się tak męczyć z odczytywaniem znaków?
Myślisz, że jak poczekasz 20ms to zdążysz odczytać następnego?
Czy nie lepiej było by przeczytać cały string na raz?
Na przykład:
string komenda = cellSerial.readString();
if (komenda=="#tmp") {
cośtam cośtam
}
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#5
(30-08-2017, 09:30)Robson Kerman napisał(a): Zamień piny. Jest TX RX, a powinno być RX TX.
A po co się tak męczyć z odczytywaniem znaków?
Myślisz, że jak poczekasz 20ms to zdążysz odczytać następnego?
Czy nie lepiej było by przeczytać cały string na raz?
Na przykład:
string komenda = cellSerial.readString();
if (komenda=="#tmp") {
cośtam cośtam
}
Ok,dzięki.Spróbuje tak tez zrobic i dam znac czy cos sie zmienilo
 
Odpowiedź
#6
Jak zamieniłem piny to modem nie chodzi.Gdy dzwonie jest niedostępny.Na arduino mruga dioda RX.
 
Odpowiedź
#7
cellSerial.begin(57600) na pewno masz ustawione tak w GSM bo mnie się wydaje ze 9600 powiano być.
I spróbuj w setup wysłać 2 razy komendę AT i zobacz w terminalu czy zwróci ok jak tak to połączenie masz poprawne.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#8
Aktualnie sytuacja wygląda tak.Komunikacja jest ok.W monitorze wyrzuca OK na komendy AT które są w kodzie (CMGF,CMNI).Lecz po wysłaniu sms dalej cisza.Zmieniłem także ten string.Aktualnie kod wygąda tak:

Kod:
#include <DallasTemperature.h>
#include <OneWire.h>
#include <SoftwareSerial.h>
String textForSMS;
float currentTemp;
char inchar;

SoftwareSerial cellSerial(2,3); // numery pinów tx rx chyba?
#define ONEWIRE_PIN 5             /// numer pinu czujnika temp.
byte address[8] = {0x28, 0xFF, 0xFC, 0xDA, 0x84, 0x16, 0x5, 0x50}; /// adres czujnika temp.

OneWire onewire(ONEWIRE_PIN);
DallasTemperature sensors(&onewire);

void setup()
{
Serial.begin(9600); /// boud rate modułu GSM
cellSerial.begin(57600); /// rate sensora temp.
Serial.println("stabilizacja modemu...");
delay(10000);
Serial.println("modem test");
delay(300);
cellSerial.println("AT\r");
delay(300);
getcellSerial();
cellSerial.println("AT\r");
delay(200);
getcellSerial();
cellSerial.println("AT+CMGF=1\r");
delay(200);
getcellSerial();
cellSerial.println("AT+CNMI=2,1,0,0,0\r");
delay(200);
getcellSerial();
sensors.begin();
}
void getcellSerial()
{
 while (cellSerial.available() > 0)
 Serial.write(cellSerial.read()); // przekazanie danych na UART
}
void SendTextMessage(String message) ///funkcja do wysyłania wiadomości SMS
{
cellSerial.print("AT+CMGF=1\r"); // przełączenie modułu na text mode
delay(300);
cellSerial.println("AT+CSCS=\"GSM\"\r"); /// ustawianie znaków GSM
delay(300);
cellSerial.println("AT+CNMI=2,1,0,0,0\r");
delay(300);
cellSerial.println("AT+CMGW=\"+48697516999\"\r"); // numer telefonu do którego ma wysłać
delay(300);
cellSerial.println(message); // zawartość wiadomości SMS
cellSerial.println((char)26); // kod26 to zakończenie "CTRL+Z"
delay(2000);
cellSerial.println();
}


void loop()
{
String komenda = cellSerial.readString();
if (cellSerial.available() > 0)
{
 inchar = cellSerial.read();
if (komenda=="#tmp"){
      {
      Serial.println ("rozpoczecie odczytu temperatury");
      currentTemp = sensors.getTempCByIndex(0);
      delay(200);
      textForSMS = "Temperatura:";
      textForSMS = (textForSMS, currentTemp);
      delay(200);
      Serial.println("wiadomosc:");
      Serial.println(textForSMS);
      delay(200);
      SendTextMessage (textForSMS);
      delay(30000);
      Serial.println("zakonczono czas oczekiwania");
      }
      }
      cellSerial.println("AT+CMGD=3"); // usuwanie smsów
     }
   }
Może źle ustawił komende "CNMI".Nie mogłem znaleść jak powinno wyglądać ustawienie formatu wiadomości i ustawiłem sugerowaną w instrukcji M590.
 
Odpowiedź
#9
http://www.jarzebski.pl/arduino/komponen...im908.html

Przejrzyj to może coś ci pomoże.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości