Szanowni Państwo,
Mam pewien problem z dekodowaniem zmiennych w ramce usart po string hex. Procesor Attiny1614 połączony z modułem bluetooth po TTL. Zaznaczam że ze zwykłymi stringami nie mam problemu tylko jak mam przekonwertować z string hex na int i odesłać. Procek wysyła proste rozkazy np: włącz, wyłącz, włącz na określoną moc, włącz na określoną moc na określony czas. Ramka po string wygląda tak (z modulu bluetooth na uC): +UUBTGRW:0,32,0503010203,1
Przykład powyżej mówi że włączam na moc 1 (8bit), na 2 min i 3 sek. Poniżej fragment kodu odpowiedzialny za odbior tej ramki i odesłanie potwierdzenia.
Poniżej jak to wygląda w praktyce. Zamiast modułu BLE jest teraz podłączony pod zwykły konwerter USB->RS232.
Końcówka powinna być taka sama ale dlaczego nie jest. Jesli mam komende z jedną zmienną no to wszystko jest ok np ustaw moc +UUBTGRW:0,32,0501FE,1 dostaję normalnie AT+UBTGSN=0,25,06FE gdzie FE to zdekodowana wartość mocy z string hex na int i z int z powrotem na hex string.
Anomalie też są jeśli chce przesłać czas włączenia urządzenia w formacie hh;mm;ss
W takim przypadku wyswietla mi w miejscu sekund minuty w miejscu minut zera a godziny poprawnie. Poniżej kod:
W przerwaniu funkcja printf
Jak zrobię tak to działa:
Zmienne godziny, minuty, sekundy są zmiennymi globalnymi maja volatile. Tak samo jest jak chcę przesłać dane o czasie w innych miejscach w przerwaniu np w petli głownej. Dlaczego tak jest?
Z wyrazami szacunku K
Mam pewien problem z dekodowaniem zmiennych w ramce usart po string hex. Procesor Attiny1614 połączony z modułem bluetooth po TTL. Zaznaczam że ze zwykłymi stringami nie mam problemu tylko jak mam przekonwertować z string hex na int i odesłać. Procek wysyła proste rozkazy np: włącz, wyłącz, włącz na określoną moc, włącz na określoną moc na określony czas. Ramka po string wygląda tak (z modulu bluetooth na uC): +UUBTGRW:0,32,0503010203,1
Przykład powyżej mówi że włączam na moc 1 (8bit), na 2 min i 3 sek. Poniżej fragment kodu odpowiedzialny za odbior tej ramki i odesłanie potwierdzenia.
Kod: C / C++
Poniżej jak to wygląda w praktyce. Zamiast modułu BLE jest teraz podłączony pod zwykły konwerter USB->RS232.
Końcówka powinna być taka sama ale dlaczego nie jest. Jesli mam komende z jedną zmienną no to wszystko jest ok np ustaw moc +UUBTGRW:0,32,0501FE,1 dostaję normalnie AT+UBTGSN=0,25,06FE gdzie FE to zdekodowana wartość mocy z string hex na int i z int z powrotem na hex string.
Anomalie też są jeśli chce przesłać czas włączenia urządzenia w formacie hh;mm;ss
W takim przypadku wyswietla mi w miejscu sekund minuty w miejscu minut zera a godziny poprawnie. Poniżej kod:
W przerwaniu funkcja printf
Kod: C / C++
Jak zrobię tak to działa:
Kod: C / C++
Zmienne godziny, minuty, sekundy są zmiennymi globalnymi maja volatile. Tak samo jest jak chcę przesłać dane o czasie w innych miejscach w przerwaniu np w petli głownej. Dlaczego tak jest?
Z wyrazami szacunku K