Skocz do zawartości

Zmiana typu zmiennej


fauke

Pomocna odpowiedź

Chce przesłać temperature z czujnika DHT11 na nadajnik RF:

 int *msg = (int)DHT11.temperature;
 vw_send((uint8_t *)msg, strlen(msg));

No i jak widać wywala błąd:

HelloWorld.ino: In function 'void loop()':
HelloWorld.ino:47:25: error: invalid conversion from 'int' to 'int*' [-fpermissive]
HelloWorld.ino:50:39: error: cannot convert 'int*' to 'const char*' for argument '1' to 'size_t strlen(const char*)'

W oryginalnym przykladzie jest tak, i działa poprawnie:

    
const char *msg = "hello";
vw_send((uint8_t *)msg, strlen(msg));

Jak sie z tym uporać?

Link do komentarza
Share on other sites

Kompilator jasno dał Ci znać, co jest nie tak. Miejsce błędu:

HelloWorld.ino: In function 'void loop()': 

Pierwszy błąd, który mówi, że nie możesz zamienić int na wskaźnik na int:

HelloWorld.ino:47:25: error: invalid conversion from 'int' to 'int*' [-fpermissive] 

oraz drugi błąd, który mówi, że funkcja powinna przyjąć parametr o typie 'const char*' a nie 'int*':

HelloWorld.ino:50:39: error: cannot convert 'int*' to 'const char*' for argument '1' to 'size_t strlen(const char*)'

Wg mnie tak możesz to naprawić:

vw_send(&DHT11.temperature, sizeof(DHT11.temperature)); 
Link do komentarza
Share on other sites

Wg mnie tak możesz to naprawić:

vw_send(&DHT11.temperature, sizeof(DHT11.temperature)); 
HelloWorld.ino:50:58: error: cannot convert 'int*' to 'uint8_t* {aka unsigned char*}' for argument '1' to 'uint8_t vw_send(uint8_t*, uint8_t)'

🙄

Link do komentarza
Share on other sites

Nie napisałeś w jakim formacie chcesz przesyłać te dane. Jeśli chcesz wysłać dane w postaci binarnej, wystarczy wymusić rzutowanie typu i kompilator nie będzie miał zastrzeżeń.

Wydaje mi się jednak, że nie to próbujesz uzyskać. Wygląda mi na to, że chcesz zmienić liczbę na napis i dopiero napis przesłać dalej.

Możesz np. użyć funkcji sprintf, przykład znajdziesz tutaj: http://forum.arduino.cc/index.php?topic=45187.0

char msg[24];
sprintf(msg, "%d", DHT11.temperature);
vw_send((uint8_t *)msg, strlen(msg));
  • Lubię! 1
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

Nie napisałeś w jakim formacie chcesz przesyłać te dane. Jeśli chcesz wysłać dane w postaci binarnej, wystarczy wymusić rzutowanie typu i kompilator nie będzie miał zastrzeżeń.

Wydaje mi się jednak, że nie to próbujesz uzyskać. Wygląda mi na to, że chcesz zmienić liczbę na napis i dopiero napis przesłać dalej.

Możesz np. użyć funkcji sprintf, przykład znajdziesz tutaj: http://forum.arduino.cc/index.php?topic=45187.0

char msg[24];
sprintf(msg, "%d", DHT11.temperature);
vw_send((uint8_t *)msg, strlen(msg));

Działa, cudownie! Tylko mój obiornik odbiera teraz temperature w postaci: "32 35

" zamiast liczby 24

Kod na odbiór:

    uint8_t buf[VW_MAX_MESSAGE_LEN];
   uint8_t buflen = VW_MAX_MESSAGE_LEN;

   if (vw_get_message(buf, &buflen))
   {
int i;
Serial.print("Got: ");
for (i = 0; i < buflen; i++)
{
    Serial.print(buf[i], HEX);
    Serial.print(" ");
}
Serial.println("");
   }
Link do komentarza
Share on other sites

Chyba jednak myliłem się co do formatu... Jak chcesz wysyłać binarnie to napisz:

vw_send((uint8_t*)&DHT11.temperature, sizeof(DHT11.temperature));

[ Dodano: 03-10-2015, 11:58 ]

Albo nie wypisuj liczb w hex-ach, tylko jako znaki, zamiast:

       Serial.print(buf[i], HEX); 

użyj:

       Serial.print((char)buf[i]); 
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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