Jak przekonwertować int n
na ciąg, aby wysyłany przez numer seryjny był wysyłany jako ciąg?
Oto, co mam do tej pory:
int ledPin=13;
int testerPin=8;
int n=1;
char buf[10];
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(testerPin, OUTPUT);
Serial.begin(115200);
}
void loop()
{
digitalWrite(ledPin, HIGH);
sprintf(buf, "Hello!%d", n);
Serial.println(buf);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
n++;
}
Odpowiedzi:
Użyj w ten sposób:
Więcej przykładów znajdziesz tutaj .
źródło
użyj
itoa()
funkcji zawartej wstdlib.h
źródło
Możesz po prostu zrobić:
który automatycznie konwertuje
n
na łańcuch ASCII. Zobacz dokumentacjęSerial.println()
.źródło
Wystarczy owinąć go wokół obiektu String w następujący sposób:
Możesz też:
źródło
Jest to zoptymalizowane pod kątem szybkości rozwiązanie do konwersji int (16-bitowej liczby całkowitej ze znakiem) na łańcuch.
Ta implementacja unika używania dzielenia, ponieważ 8-bitowy AVR używany dla Arduino nie ma sprzętowej instrukcji DIV, kompilator tłumaczy podział na czasochłonne powtarzalne odejmowania. Dlatego najszybszym rozwiązaniem jest użycie gałęzi warunkowych do zbudowania łańcucha.
Stały bufor 7 bajtów przygotowany od początku w pamięci RAM, aby uniknąć dynamicznej alokacji. Ponieważ ma tylko 7 bajtów, koszt stałego użycia pamięci RAM jest uważany za minimalny. Aby pomóc kompilatorowi, dodajemy modyfikator rejestru do deklaracji zmiennej, aby przyspieszyć wykonywanie.
Ten szkic jest kompilowany do 1082 bajtów kodu przy użyciu avr-gcc, który jest dołączony do Arduino w wersji 1.0.5 (rozmiar samej funkcji int2str wynosi 594 bajty). W porównaniu z rozwiązaniem wykorzystującym obiekt String, który został skompilowany do 2398 bajtów, ta implementacja może zmniejszyć rozmiar kodu o 1,2 Kb (zakładając, że nie potrzebujesz innej metody obiektowej String, a liczba jest ściśle związana z typem int ze znakiem).
Tę funkcję można dodatkowo zoptymalizować, pisząc ją w odpowiednim kodzie asemblera.
źródło
Rozwiązanie jest o wiele za duże. Spróbuj tego prostego. Proszę podać bufor znaków 7+, bez sprawdzania.
Można go łatwo zmodyfikować, aby oddać koniec bufora, jeśli odrzucisz indeks „l” i bezpośrednio zwiększysz bufor.
źródło
po więcej możesz odwiedzić stronę arduino https://www.arduino.cc/en/Serial/Println
Chciałbym, żeby ci to pomogło. dzięki!
źródło
Poniżej znajduje się własna skomponowana myitoa (), która ma znacznie mniejszy kod i rezerwuje STAŁĄ tablicę 7 (łącznie z zakończeniem 0) w char * mystring, co jest często pożądane. Jest oczywiste, że zamiast tego można zbudować kod za pomocą przesunięcia znaków, jeśli potrzebny jest łańcuch wyjściowy o zmiennej długości.
źródło
To po prostu działa dla mnie:
źródło