Skocz do zawartości

Wysłanie SMS z pomiarem wilgotności DHT


cheppeniathan

Pomocna odpowiedź

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ł? 

Link do komentarza
Share on other sites

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&)'

 

 

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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
Link do komentarza
Share on other sites

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++;
    
        }
      }
    }
  }
}
}

 

Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.