Chyba v OR alebo if statemente?

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

martinius96

Chyba v OR alebo if statemente?

Príspevok od používateľa martinius96 » 13 Sep 2017, 19:25

Ahojte, programujem NodeMCU a chcel som rozšíriť možnosť použitia pre 4 ledky na skúšku s pridaním OR a doplnením rôznych ďalších možností, nakoľko hlas sa občas preloží ako let a nie led a niekedy to zapíše led ako LED. Je zápis v if statementoch s OR dobrý? Mám takýto problém. Ak hlasom poviem/napíšem Zapni LED 1 tak sa nestane nič. Ak však poviem Zapni, zapnú sa všetky diódy. Ak chcem jednu zhasnúť, príklad Vypni LED 3 tak sa vypnú všetky LED diódy a ak aj chcem zapnúť po jednej, nefunguje to. Viete mi poradiť, kde by som mohol mať problém?

Kód: Vybrať všetko

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
int led1 = 16;
int led2 = 5;
int led3 = 4;
int led4 = 0;
const char* ssid = "moj-sinet-2929";
const char* password = "chefrolet";

const char* host = "arduino.php5.sk";
const int httpsPort = 443;

// Use web browser to view and copy
// SHA1 fingerprint of the certificate
const char* fingerprint = "13 9f 87 1d b1 85 be e6 bd 73 c1 8d 04 63 58 99 f0 32 43 92";

void setup() {
  Serial.begin(115200);
  Serial.println();
    pinMode(led1, OUTPUT);
   pinMode(led2, OUTPUT);
    pinMode(led3, OUTPUT);
     pinMode(led4, OUTPUT);
  Serial.print("connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

}

void loop() {

   WiFiClientSecure client;
  Serial.print("connecting to ");
  Serial.println(host);
  if (!client.connect(host, httpsPort)) {
    Serial.println("connection failed");
    return;
  }

  if (client.verify(fingerprint, host)) {
    Serial.println("certificate matches");
  } else {
    Serial.println("certificate doesn't match");
  }

String url = "/abakis/preklady.txt";
  Serial.print("requesting URL: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "User-Agent: NodeMCU\r\n" +
               "Connection: close\r\n\r\n");

  Serial.println("request sent");
  while (client.connected()) {
    String line = client.readStringUntil('\n');
   
    if (line == "\r") {
      Serial.println("headers received");
      break;
    }
  }
  String line = client.readStringUntil('\n');
 
  Serial.println("reply was:");
  Serial.println("==========");
  Serial.println(line);

  if(line=="Zapni LED 1" || "Zapni led 1" || "Zapni let 1" || "Zapni LED jeden" || "Zapni LED1" || "Zapni led1"){
     digitalWrite(led1, HIGH);
    }
     if(line=="Vypni LED 1" || "Vypni led 1" || "Vypni let 1" || "Vypni LED jeden" || "Vypni LED1" || "Vypni led1"){
     digitalWrite(led1, LOW);
    }
      if(line=="Zapni LED 2" || "Zapni led 2" || "Zapni let 2" || "Zapni LED dva" || "Zapni LED2" || "Zapni led2"){
     digitalWrite(led2, HIGH);
    }
     if(line=="Vypni LED 2" || "Vypni led 2" || "Vypni let 2" || "Vypni LED dva" || "Vypni LED2" || "Vypni led2"){
     digitalWrite(led2, LOW);
    }
      if(line=="Zapni LED 3" || "Zapni led 3" || "Zapni let 3" || "Zapni LED tri" || "Zapni LED3" || "Zapni led3"){
     digitalWrite(led3, HIGH);
    }
     if(line=="Vypni LED 3" || "Vypni led 3" || "Vypni let 3" || "Vypni LED tri" || "Vypni LED3" || "Vypni led3"){
     digitalWrite(led3, LOW);
    }
      if(line=="Zapni LED 4" || "Zapni led 4" || "Zapni let 4" || "Zapni LED styri" || "Zapni LED4" || "Zapni led4"){
     digitalWrite(led4, HIGH);
    }
     if(line=="Vypni LED 4" || "Vypni led 4" || "Vypni let 4" || "Vypni LED styri" || "Vypni LED4" || "Vypni led4"){
     digitalWrite(led4, LOW);
    }
    if(line=="Vypni"){
     
      digitalWrite(led1, LOW);
       digitalWrite(led2, LOW);
        digitalWrite(led3, LOW);
        digitalWrite(led4, LOW);
    }
     if(line=="Zapni"){
     
      digitalWrite(led1, HIGH);
       digitalWrite(led2, HIGH);
        digitalWrite(led3, HIGH);
        digitalWrite(led4, HIGH);
    }
  


   
  Serial.println("==========");
  Serial.println("closing connection");
}
Pridával som naraz tie ORy a k tomu aj to rozsvietenie všetkých diód. Prakticky funguje iba Vypni a Zapni, teda posledné 2 if statementy. Ak dám vypnúť jednu diódu, vypne to všetky. Som už zúfalý :( premennú line porovnávam so stringom cez == pre totožnosť..

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2561
Dátum registrácie: 20 Júl 2010, 00:00
Bydlisko: okolie KE
Vek: 27

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa maskrtnik01 » 13 Sep 2017, 19:39

Martin, keď vidím tie tvoje ORy, čudujem sa že ti to skompilovalo. Takto sa to nedá skracovať. Daj tam takéto riadky:

Kód: Vybrať všetko

if(line == "vypni led 1" || line == "vypni let 1")
0

martinius96

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa martinius96 » 13 Sep 2017, 19:40

Myslel som si, že to bude možno v tom! :) Vďaka!
Odtestované, funguje to báječne :) :potlesk: Pridal by som karmu, ale neukazuje mi možnosť pridať.

Používateľov profilový obrázok
Andy99
Stály člen
Stály člen
Príspevky: 339
Dátum registrácie: 05 Mar 2008, 00:00
Bydlisko: BA
Vek: 35

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa Andy99 » 13 Sep 2017, 20:06

Myslel som si, ze neprispejem, ale neda mi to. Ale tvoj kod ma presvedcil o opaku. Zamyslal si sa niekedy na kodom este predtym, ako si ho napisal?
Ak ano, tak skus to spravit niekolko-krat. Nikdy neexistuje len jedine riesenie a vzdy sa snaz vymysliet este lepsie, aby bolo z coho vyberat.
Ak nie, tak by si s tym mal zacat.

Ak ti nejde o rychlost, ale skor prehladnost, nebolo by lepsie ten X-nasobny if prepisat do jedneho?
Neviem, ci ma arduino regexp, resp. ako je spravena optimalizacia. Ale mohla by to byt jedna z variant.
Druha, mne milsia varianta je napr. pouzitie funkcie strtok. Pomocou nej dokazes velmi elegantne nasekat vstupny retazes podla separatora. asledne porovnas len cast, ktoru potrebujes.

Dalsi hint je pouzit makra na opakujuce sa vyrazy (prehladnost, aj tak to za teba doplni preprocesor a dalsia vec, nemusis tolko trapit stack).

Kazdopadne som to nemyslel zle, skor to ber ako ponaucenie, ktore sa ti moze zist ;).
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6200
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa pocitujlasku » 14 Sep 2017, 08:01

Andy99: vzdy sa da kod vylepsit. Ja napr. robim tak, ze skusam, az kym program nefunguje ako chcem a potom otvorim novy projekt a snazim sa ho prepisat rozumnejsie. Na zaciatku nikdy nevies ktorou cestou pojdes a co sa casom vyskytne. Mozno je to aj tento pripad. Najskor nejako posklada funkcny kod a potom vysledok optimalizuje.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa boraicho » 14 Sep 2017, 14:45

Co pouzivas na zaznam hlasu a prevod na text?
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

martinius96

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa martinius96 » 14 Sep 2017, 18:10

Používam javascript na spustenie mikrofónu a cez webkit sa to preloží na text a ten následne uložím do .txt súboru cez PHP, ktorý si vie NodeMCU stiahnuť a tam sa už následne podľa reťazca vykoná akcia. Vraj sa ten webkit nepoužíva a našiel som x riešení s ním, kde už nefungoval, no toto riešenie bolo jediné, kde mi fungoval. Potom existujú rôzne Web speech API ale tie som neskúšal. Inak ten Webkit plne podporuje Slovenčinu, Češtinu a samozrejme Angličtinu a možno aj všetky jazyky. Funguje to na akomkoľvek zariadení, ktoré ma ovšem mikrofón, pozor ale na built-features v prehliadačoch. Ak máš stránku na HTTP tak neradi spúšťajú mikrofón :)

martinius96

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa martinius96 » 14 Sep 2017, 21:16

Návod ako nato urobím a bude tu uverejnený ako článok... Chcem ale vedieť, či to bude fungovať s Firefoxom alebo Operou.. Môžem vám poprosiť o láskavosť a pridať prostredníctvom hlasu niečo do systému? https://arduino.php5.sk/abakis/ Vďaka! Pod Chrome to chodí, podľa niektorých zdrojov to funguje iba tam. Po kliknutí na mikrofón sa spustí váš mikrofón (možno ho musíte prvý krát povoliť) Následne sníma asi 5 sekúnd hlas. Následne si zobrazte .txt súbor a prípadne ho refreshnite cez Ctrl + F5. Vďaka!

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa boraicho » 15 Sep 2017, 11:45

zaujima ma to, prevod hlasu na text som chcel dávno. ale niečo kde nemusi byť použitý net.

a ako spušťaš ten java script? cez webony prehliadač?
a to všetko robiš v v počitači? nepouživaš MCU? mohol by si mi zhruba popisať ako to je všetko? urobiš zaznam hlasu, potom ho prevedieš na text a ten text spracuješ v dalšej aplikacii? či ako? diky
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa peterple » 15 Sep 2017, 12:07

Samozrejmé že na to potrebuješ net. Celé to rozpoznanie hlasu robia servery goooglu a preto sa ani moc nečudujem že to inde ako v chrome nejde. Alebo si myslíte že obyčajný PC, alebo ešte lepšie chabý mobil má na to aby rozoznal reč v ľubovolnom jazyku?.

Momentálne som použil v android aplikácii rozoznávanie bar kódov od googlu. To už má možnosť aj offline chodu. Stiahneš niečo do mobilu a rozpozná ti to čiarové kódy na čo ukážeš. Kolega čo má 15Mpx foťák urobil rekord, rozpoznalo to 23 kódov naraz. Ešte to vie robiť aj OCR a detekciu usmiatych tvárí. Ale o offline rozpoznávaní reči zatiaľ neviem.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

martinius96

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa martinius96 » 15 Sep 2017, 18:57

Rozdelím to takto:
ONLINE RIEŠENIE (MOJE):
  • Mám webstránku, kde beží Javascript, Jquery a Webkit Speech Recognition (pravdepodobne Webkit funguje iba v Chrome)
  • Web si otvorím a mám tam buď HTML input na text, ktorý musím napísať, stlačiť Enter, alebo kliknúť na odoslať formulár, ten mi odošle obsah poľa do .txt súboru.
  • Ak kliknem na mikrofón na stránke, tak mi začne mikrofón nahrávať, pokým nie je "ticho" následne to uloží do .txt súboru automaticky cez AJAX (Jquery)
  • Do toho istého súboru sa to uloží či to hovorím hlasom, alebo píšem na do HTML inputu.
  • NodeMCU sa napojí na textový súbor a stiahne si jeho obsah. Následne porovnám, či sa zhoduje s niektorou podmienkou.
    Napr: if line=="Zapni LED 1" a platí to tak digitalWrite(led1, HIGH); Neviem to jednoduchšie vysvetliť
  • K môjmu riešeniu bude čoskoro článok tu na Svetelektro. Aj s kódmi atď.. Je to skrátka len prevod hlasu na text a ten je v textovom súbore a ty ho stiahneš. Nič viac, nič menej. Podmienka je tu ale HTTPS. Google Chrome nerád púšťa mikrofón na Non-HTTPS stránke :)
OFFLINE RIEŠENIE:
  • Existuje Speech Recognition module k Arduinu, zaberá mnoho pinov, čiže ti ostane málo pinov na celkový projekt (napr UNO)
  • Neviem o ňom mnoho, podporuje iba 15 príkazov rozdelených do 3 skupín, v každej po 5. Ale neviem, či náhodou nie sú pevno nastavené. Podporuje to nejaké jazyky, náš myslím nie.
Obrázok
Obrázok

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa boraicho » 15 Sep 2017, 19:36

čo je ten nodeMCU?

tie offline rozpoznavače ani niesu vlastne rozpoznavače. len to nahraje zvuk a ked potom ten zvuk zaregistruje tak to niečo spravi. nemusis tam ani hovoriť, stači si prdnuť a ked si prdneš presne tak isto aj druhykrat, tak si vieš rozsvietit svetlo .

ale aby som nebol s cesty, tento som si kupil už dávnejšie
http://www.tme.eu/sk/details/mikroe-153 ... kup-click/
jednoducho sa to použiva a zarazilo ma ako rychlo to dokaže vyhodnotiť.

ale chcel by som niečo take skusiť s rozpoznavanim hlasu. ja by som skor išiel cestou nie ako ty že tam nahadžem rozne tvary jedneho slova, ale napriklad , ak sa nejake slovo zhoduje so slovom v databaze aspon s 80% a plus dať tam tabuľky akože "slovesa, predmety, čísla"
v databaze mame rozdelen slova v slovesach mame: zapni, vypni,... v predmetach mame: žiarovka, ventilator,... čislach mame čisla.
a teraz ak poviem zapni svetlo tak vie že zapni je sloveso že ma stav vyhodiť do logickej jednotky a svetlo že ma do logickej jednotky nahodiť svetlo. a samozrejme stači ak sa bude slovo zhodovať aspon s 80% čiže zapni alebo zapny sa bude na minimalne 80% zhodovať so slovom zapni v tabuľke a slovo svetlo alebo svedlo sa bude tiež zhodovať aspon na 80% so slovom svetlo.

si myslim že takto by to bolo určite super....
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

martinius96

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa martinius96 » 15 Sep 2017, 20:32

Zaujímavá doska, je aj dosť veľká, alebo sa mi to zdá iba podľa tej foto?
NodeMCU je doska, ktorá má čip ESP8266 (stará sa o wifi a o výpočtovú časť) má jedno jadro a je to 32-bitový procesor. Prostredníctvom neho stiahnem textový súbor a vyčítam z neho obsah. Nakoľko Chrome blokuje mikrofón na HTTP stránke bez šifrovania tak som bol nútený prejsť na HTTPS a okrem toho NodeMCU zvláda šifrovanie. Napríklad pri Arduine Wiznet W5100, čo je najpoužívanejší Ethernet Shield nepodporuje, takže by mi bol nanič.. :) NodeMCU sa dá programovať aj ako Arduino. Niečo také sa určite dá, pri tom by som použil niečo na štýl Elastic Search.. :) i keď.. Ja si myslím, že sa to bude miešať, ak tam bude viacero príkazov pre zapni a tak.

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa boraicho » 15 Sep 2017, 21:07

nie , ten plošak ja vcelku malý, 3x6cm?

nebude sa miešať, lebo zapni svetlo, zapni ventilator, zapni hudbu, zapni dačo, .... stale je tam to "zapni" čiže uved do LOG1 a druhe bude označovať ČO ma zapnuť.
a opačne čiže vypni svetlo, vypni ...., .... čiže uvedie do LOG0 čiže prikazy zapni a vypni tam doslova budu v databaze iba 1x

odkiaľ si?
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

martinius96

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa martinius96 » 15 Sep 2017, 22:15

Chápem už :) Som z okolia Popradu a za dva týždne už budem na internáte v KE cez týždeň

Používateľov profilový obrázok
boraicho
Ultimate člen
Ultimate člen
Príspevky: 12406
Dátum registrácie: 03 Feb 2007, 00:00
Bydlisko: Prešov
Vek: 35
Kontaktovať používateľa:

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa boraicho » 15 Sep 2017, 23:30

budeš to mať aj s hardwerom na intraku? veľmi rád by som prišiel niečo o tom podiskutovať a poskušať niečo.
0
"Aj nevinne vyzerajúca súčiastka, môže byť príčinou nefunkčnosti zariadenia a tou kondenzator 100% je"
3D REBEL II + PLA + PETG
CNC 1810 na DPS

martinius96

Re: Chyba v OR alebo if statemente?

Príspevok od používateľa martinius96 » 15 Sep 2017, 23:42

Zrejme ano :) len najprv musim dať dokopy izbu, lebo vyzerá hrozivo :D ale potom ťa rád privítam.
Článok na Svetelektro bol zaslaný no stále ešte nie je pridaný. Je to taký Guide How to pre čo najjednoduchší systém. Keď urobím ďalšiu verziu, ktorá bude mať lepšie použitie, tak to tiež pridám.
https://www.pcforum.sk/ovladanie-hlasom ... 94363.html

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok