Wpis z mikrobloga

Mirki jest ktoś kto dobrze ogarnia #arduino? mam pytanie co do kodu:

void loop()
{

if (esp8266.find("asdf"))
{
while (!esp8266.find("asdfstop"))
Serial.write(blabla);
}
}

Mam moduł esp8266 przez który otrzymuje pewne dane( w tym przypadku string asdf). Jeżeli znajduje mi ten ciąg to ma wyświetlać na porcie szeregowym słowo "blabla" dopóki nie pojawi się ze strony esp fraza "asdfstop". Coś mi działa, bo gdy przychodzi te słowo "asdf" to na monitorze portu szeregowego wyświetla mi te blabla ale w odstępach ok 1s, a chciałbym żeby to leciało szybko. Wygląda to tak jakby w tej pętli while ta komenda serial.write wykonywała się co 1s. Ma ktoś jakies pomysły?

#programowanie
  • 22
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@wytrzzeszcz: nie czaję, przecież dopóki nie wrzucę z esp tego "asdfstop" to powinno na porcie szeregowym walić ostrym spamem te blabla jakby to w loopie chodziło
  • Odpowiedz
@mix3d: find() działa tak że czeka aż ten string się pojawi w streeamie więc może on Ci po prostu wolno dochodzi i wina leży w tym czym nadajesz to i w predkosci transmisji?

a może FindUntil() rozwiąże Twoje problemy?
  • Odpowiedz
@wytrzzeszcz: Nie rozumiem za bardzo o co Ci chodzi
@PiotrekSul: Właśnie coś z tym może być tylko że jak robię coś takiego:

if(esp8266.available())
Serial.write(esp8266.read());

to co wrzucę na esp to od razu mi się pojawia na szeregowym monitorze.
  • Odpowiedz
@PiotrekSul: bo ja chciałbym np te asdfstop wrzucić powiedzmy za 10sekund i do tego czasu chcę żeby mi szybko spamowało tym blabla na szeregowym monitorze, a nie co sekundę to wyświetlało
  • Odpowiedz
@mix3d: Poczytaj sobie w dokumentacji co robi metoda "find"

Serial.find() reads data from the serial buffer until the target string of given length is found. The function returns true if target string is found, false if it times out.
  • Odpowiedz
@PiotrekSul: chyba dałem tu zły przykład, bo ten program ma działać cały czas i tam będą pojawiać się różne komendy z tego esp po parę razy, to jak będę wszystko zapisywać do stringa to potem chcąc wyszukać bieżącą frazę znajdzie mi jakąś która przyszła kiedyś tak? Trochę to inaczej zapiszę:

void loop()
{
  • Odpowiedz
@PiotrekSul: Tylko jak próbuję czytać stringi np string x=esp8266.readString() to to przychodzi mi z opóźnieniem, a jak czytam esp8266.read() to jest ok, tylko to wtedy nie jest string
  • Odpowiedz
Dawno nie grzebałem w tych zabawkach ale jak zerknąłem w dokumentacje to chyba takie coś Ci wystarczy:

string blabla;
while(esp8266.available())
{
char x = esp8266.read();
  • Odpowiedz
@PiotrekSul: a jak np zrobię int x=esp8266.read() i potem Serial.write(x) to wyswietla mi bez opoznien teksty, tylko jak w tym przeszukać żeby wybrać odpowiednią frazę
  • Odpowiedz