Aktywne Wpisy
Mantusabra +7
(づ•﹏•)づ
Dzonsin 0
#odcisk
Jak się pozbyć odciska na kciuku u stopy? Macie jakiś specyfik godny polecenia? Próbowałem kilku, ale wraca jak boomerang. Próbowałem go wyciąć nożyczkami, ale dwa tygodnie i znów jest
Jak się pozbyć odciska na kciuku u stopy? Macie jakiś specyfik godny polecenia? Próbowałem kilku, ale wraca jak boomerang. Próbowałem go wyciąć nożyczkami, ale dwa tygodnie i znów jest
Mam problem z komunikacją po bluetooth.
Chcę wyświetlić proste menu. Pierwsza opcja to pobranie imienia i nazwiska. Pozostałe opcje to pierdoły.
Pierwszy problem: program napiernicza tym menu do klienta - no wiadomo, w pętli jest...
Jak to sensownie wyświetlić raz, gdy klient się podłączy?
Gorszy problem, wybór menu działa ale po dokonaniu wyboru opcji 1, owszem pyta o imie i nazwisko ale olewa całkiem dane z bluetooth. Nie czeka na dane, nie wczytuje aż nastąpi podanie znaku \n. Wywalone, przelatuje przez to...
#include <BluetoothSerial.h>
// utwórz obiekt BluetoothSerial
BluetoothSerial SerialBT;
void setup() {
// inicjalizuj Bluetooth SerialBT
SerialBT.begin("ESP32 Bluetooth");
}
void loop() {
// wyświetl menu
SerialBT.println("Wybierz opcję:");
SerialBT.println("1. Wprowadź imię i nazwisko");
SerialBT.println("2. Wyślij 'Witaj'");
// sprawdź, czy jest dostępny nowy strumień danych
if (SerialBT.available()) {
// odczytaj dane z Bluetooth SerialBT
String dane = SerialBT.readStringUntil('\n');
// usuń końcowy znak nowej linii
dane.trim();
// sprawdź wybraną opcję
if (dane == "1") {
// opcja 1: wczytaj imię i nazwisko
SerialBT.println("Wprowadź imię:");
String imie = SerialBT.readStringUntil('\n');
imie.trim();
SerialBT.println("Wprowadź nazwisko:");
String nazwisko = SerialBT.readStringUntil('\n');
nazwisko.trim();
SerialBT.println("Witaj, " + imie + " " + nazwisko);
}
else if (dane == "2") {
// opcja 2: wyślij "Witaj"
SerialBT.println("Witaj");
}
else {
// nieznana opcja: wyślij komunikat o błędzie
SerialBT.println("Nieznana opcja");
}
}
}
@defoxe: nie da się, bo nie wiesz kiedy klient się podłącza. Możesz co najwyżej zareagować na jakiś klawisz, np. Enter, albo ctrl-l i wyświetlić ponownie menu. Możesz też po stronie klienta użyć terminala, który rozumie kody sterujące np. VT100 (putty) i wtedy przed wyświetleniem menu możesz kazać wyczyścić ekran, żeby nie było ściany tekstu.
if (SerialBT.connected()) wyswietlKomunikat();
jesli chodzi o to ze kolejne wywolania readStringUntil nie zwracaja nic to pewnie problem ze bufor odbiorczy jest pusty w momencie gdy probujesz go czytac, przed kazdym odczytem musisz sprawdzic z SerialBT.available() IMO. Mozesz sprobowac wymusisz odczekanie na bufor przez dodatkowe petle:
while (!SerialBT.available()) sleep(50);
String imie = SerialBT.readStringUntil('\n');
Co do tego "jak to inni robią" to co probujesz