Skocz do zawartości

Wysłanie SMS z pomiarem wilgotności DHT


Pomocna odpowiedź

Napisano

Cześć,

Pobieram z czujnika DHT temperaturę i wilgotność w postaci int-ów.

Chcę wysłać je sms-em. Do wysyłania smsów mam następujący kod:

    gsm.write("AT+CMGS=\"+48600200300\"\r\n");
    delay(100);
    gsm.write("temperatura pojemnika powyzej MAX!");
    gsm.write((char)26);
    delay(100);
    gsm.write("AT+CMGD=1,4\r\n");

Na co i jak mam rzutować int wilgotnosc albo int temperatura, aby gsm.write( ) to zaakceptował? 

(edytowany)

A write nie ma funkcji przesylania tablic? (Chociaz nie wiem jak by to bylo wyswietlane na tel)

Nie....chyba tak nie zadziala jak mowie...

Edytowano przez farmaceuta

String wilgotnosc_string;            
            wilgotnosc_string = String(wilgotnosc_pojemnika);    //zamiana int na String i przypisanie do zmiennej String wilgotnosc_string


    delay(100);
    gsm.write("AT+CMGS=\"+48200300400\"\r\n");
    delay(100);
    gsm.write(wilgotnosc_string);
    gsm.write((char)26);
    delay(100);
    gsm.write("AT+CMGD=1,4\r\n");

Kiedy tworzę zmienną String wilgotnosc_string, zamieniam int wilgotnosc_pojemnika na String i wrzucam zmienną do gsm.write(wilgotnosc_string) to dostaję błąd: no matching function for call to 'SoftwareSerial::write(String&)'

 

 

 

(edytowany)

Nigdy z tego nie korzystalem, ale wydaje mi sie ze tak to ma byc..

String zmienna = wartoscint;

gps.write(zmienna.c_str());

Lub ewentualnie rzutowac na String "wartoscint" (ale jak mowie, nie korzystalem, sam musisz sprawdzic czy to tak ma byc)

Edytowano przez farmaceuta

Dla int nie warto używać String skoro oczekujemy tablicy char dla funkcji biblioteki GSM, lepiej już wspomniany wcześniej sprintf.

uint32_t czasTeraz,czasPoprzedni,tik=10; //tik musi byc mniejszy niz 1000 i dzilic 1000ms na rowne czesci
uint8_t nTik,sekundy,minuty,godziny,dni; //liczniki tikow, sekund, itd.
bool fnTik,fsekundy,fminuty,fgodziny,fdni; //flagi zdarzen nowy tik, nowa sekunda,minuta, godzina, dzien
char napis[10]; 
void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
pinMode(LED_BUILTIN,OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
 czas();






if(fsekundy) 
{
sprintf(napis,"%03d:%02d:%02d",godziny,minuty,sekundy);
Serial.println(napis); 
}

if(fnTik&&! (nTik%20)) digitalWrite(LED_BUILTIN,! digitalRead(LED_BUILTIN));//gdy nowy tik i co 20 tikow
}


void czas()
{
  czasTeraz=millis();
 fnTik=fsekundy=fminuty=fgodziny=fdni=0;
if((uint32_t)(czasTeraz-czasPoprzedni)>=tik) //tan napisany warunek jest odporny na "klątwe 50 dni millis()"
{
  czasPoprzedni=czasTeraz;
  fnTik=1;
  nTik++;
  if(nTik>=(1000/tik))
  {
    nTik=0;
    sekundy++;
    fsekundy=1;
     if (sekundy>=60)
    {
      sekundy=0;
      minuty++;
      fminuty=1;
      if (minuty>=60)
      {
        minuty=0;
        godziny++;
        fgodziny=1;
        if (godziny>=24)
        {
          godziny=0;
          fdni=1;
          dni++;
    
        }
      }
    }
  }
}
}

 

(edytowany)
1 godzinę temu, farmaceuta napisał:

Nigdy z tego nie korzystalem, ale wydaje mi sie ze tak to ma byc..




String zmienna = wartoscint;

gps.write(zmienna.c_str());

Lub ewentualnie rzutowac na String "wartoscint" (ale jak mowie, nie korzystalem, sam musisz sprawdzic czy to tak ma byc)

OK..działa

jedna linijka rzutowanie i potem ta druga linijka z tą funkcją c_str()

Dziękuję Ci bardzo!

 

Ale to jeszcze nie koniec walki. Ta funkcja c_str() działa. Zsumowałem do jednej zmiennej String napis "wilgotnosc wynosi: " i zrzutowanego na Stringa inta. Przechodzi to przez funkcję c_str() i jest wysyłane przez gsm.write()

ale 🙂

jak wartość wilgotności jest np 82 a ja mam w programie ifa, że jeśli moduł SIM odbierze sms o wartości 2 to ma spracować przekaźnik, to ta dwójka, która jest teraz w wartości 82 wyzwala mi przekaźnik.

Mam nadzieję, że nie piszę zbyt zagmatwanie. Oczywiście już to zmieniłem w programie i teraz zadziałanie przekaźnika jest sterowane literą, ale ... nie rozumiem jak działa program i dlaczego wysyłana wartość działa tak jak wartość jaką moduł dostałby sms-em.

Jakieś sugestie dla mnie?

Edytowano przez cheppeniathan

A mnie się wydaje, że gdybym znał C++, gdybym dużo lepiej znał C, gdybym rozumiał co się dzieje w bibliotece gsm.. to wiedziałbym co robi moja biedna, skołowana moim kodem Atmega 🙂

A tak to przypomina to wszystko łatanie dziur w starej skarpecie 🙂 i żaden python mi nie pomoże 🙂 (chociaż jego też dobrze znać!)

 

Jeszcze raz dzięki dla ethanaka i farmaceuty za podpowiedzi! Pozdrawiam

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...