Terminal se sériovou komunikaci

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Terminal se sériovou komunikaci

Příspěvek od Patrik » 27 led 2021, 15:21

Nebo dalo by se to třeba přes Bluetooth a mobil? Že bych si pořídil Bluetooth modul?

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Terminal se sériovou komunikaci

Příspěvek od ondraN » 27 led 2021, 15:33

Pak by jsi potřeboval nějakou terminálovou apku. Možná něco takového existuje, nevím.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Terminal se sériovou komunikaci

Příspěvek od KamilV » 27 led 2021, 19:51

Ale psal jsi, že údaje o uživateli by se doplnily na PC. Takže nějaké spojení s PC tam je, nebo ne? Těžko se hledá řešení, když neznáme kontext a odkrýváš ho postupně.
Vytvářet nějaký HW terminál bude samozřejmě vývoj prodražovat. I následný servis, protože každá oprava = přehrátí firmware.
Pokud tomu nic nebrání (a zatím není jasné, zda ano), skutečně bych zvážil udržování databáze mimo čip. I aplikace na správu půjde napsat mnohem rychleji, tím i levněji. Aktualizovatelná bude také snadněji.
Rozhodně by mě nebavilo zakládat 10 nových uživatelů a točit nějakým enkoderem a listovat v abecedě, když na PC to bude naťukaný za 10 vteřín...

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Terminal se sériovou komunikaci

Příspěvek od ondraN » 27 led 2021, 20:18

Tady je pro ukázku jedno menu, které slouží pro nastavení jednotky. Je to z rozsáhlejšího programu, takže spousta věcí tam není definovaná, ale názvy jsou celkem výstižné.
Jednotka se připojí na PC přes převodník sériového portu na USB. Na PC si pustím terminálový program na COM toho převodníku a už to jede.

Kód: Vybrat vše

//---------------- Setup mode
// V setup modu se vzdy komunikuje na 9600bd pres terminal, radio je vypnute, nekontroluje se stav baterie
  if(digitalRead(Setup)==LOW){ //setup mode
    char MMChoice;
    digitalWrite(RadioReset,LOW);
    delay(5);                      //nechame RM resetovane, protoze se bude komunikovat jen pres terminal
    digitalWrite(LedB,HIGH);  //indikacni led fialova
    digitalWrite(LedR,HIGH);
    do{
      MMChoice=MainMenu();
      switch(MMChoice){
        case '1': //nastaveni mericiho kanalu baterii
          Menu1();
        break;
        case '2': //nastaveni adresy modulu
          Menu2();
        break;
        case '3': //kontrola vystupu z GPS modulu
          Menu3();
        break;
      }
    }while(MMChoice!='0');
    digitalWrite(LedR,LOW);
    digitalWrite(LedB,LOW);  //indikacni led zhasnout
    ResetArduino();   //SW reset arduina
  }//---------------- End Setup mode
  //***************************************************************************************************

char MainMenu(){  //zobrazi nabidku a vrati znak vyberu
  char Choice=0;
  Serial.println();
  Serial.println(F("####################  SETUP HLAVNI MENU  ######################\n"));
  Serial.println(F(" 1 Kalibrace mereni napeti baterie."));  
  Serial.println(F(" 2 Nastaveni adresy."));
  Serial.println(F(" 3 Kontrola vypisu dat z GPS modulu"));
  Serial.println(F(" 0 Exit a restart.\n\n"));
  Serial.println(F("Zadejte volbu."));
  while(Serial.available()>0) Serial.read();
  do{
    if(Serial.available()>0){
      Choice=Serial.read();
    }
  }while(Choice<'0' || Choice>'3');
  return Choice;
}; //End of MainMenu()

//***************************************************************************************************

void Menu1(void){  //  podmenu nastaveni mericiho kanalu   
  char ch=0;
  float VBatt,VInput;
  do{
    Serial.println();
    Serial.println(F("####################  MENU KALIBRACE  ######################"));
    Serial.println(F("Nastaveni korekce mereni napeti Li-ion akumulatoru.\n"));
    Serial.print(F("Nekorigovana hodnota napeti="));
    VBatt=GetRAWVoltage(BatterySense);
    Serial.println(VBatt,3);
    Serial.print(F("Korigovana hodnota napeti="));
    Serial.println(VBatt*CorrectionMeasure,3);
    Serial.print(F("Korekcni konstanta="));
    Serial.println(CorrectionMeasure,4);
    Serial.println();
    Serial.println(F(" 1 Zadani zmereneho napeti akumularoru."));
    Serial.println(F(" 2 Ulozeni korekcni konstanty do EEPROM."));
    Serial.println(F(" 3 Periodicke mereni napeti akumulatoru."));
    Serial.println(F(" 0 Zpet do hlavniho menu."));
    Serial.println(F("Zadej neco jineho pro aktualizaci stranky."));
    while(Serial.available()>0) Serial.read();
    while(Serial.available()==0) delay(1);
    ch=Serial.read();  
    if(ch=='1'){
      while(Serial.available()>0) Serial.read();
      Serial.println();
      Serial.println(F("###############  SKUTECNE NAPETI  #################"));
      Serial.println(F("Zadej zmerene napeti akumulatoru ve tvaru X.XXX, napr. 3.605"));  
      while(Serial.available()==0) delay(1);
      VInput=Serial.parseFloat();
      if(VInput<2.0 || VInput>4.5){
        Serial.println(F("Chybne zadani, bude ignorovano!!"));
        digitalWrite(Beep,HIGH);     //chybu zvukove signalizujeme  
        delay(1000);
        digitalWrite(Beep,LOW);      
        delay(5000);
      }else{
      CorrectionMeasure=VInput/VBatt;
      }
    }
    if(ch=='2'){
      Serial.println();
      Serial.println(F("###############  ULOZENI KONSTANTY  #################"));
      while(Serial.available()>0) Serial.read();
      if(CorrectionMeasure>MaxCorr || CorrectionMeasure<MinCorr){
        Serial.println(F("Korekcni konstanta mimo povolenou toleranci!! Nemohu ji ulozit!!"));
        digitalWrite(Beep,HIGH);     //chybu zvukove signalizujeme  
        delay(1000);
        digitalWrite(Beep,LOW);      
        delay(10000);
      }else{
        EEPROM.put(NVBaseAdr+1,CorrectionMeasure);   
        Serial.println(F("Korekcni konstanta byla ulozena."));
      }
    }
    if(ch=='3'){
      Serial.println();
      Serial.println(F("###############  MERENI NAPETI  #################"));
      Serial.println(F("Pro ukonceni zadejte cokoli."));
      while(Serial.available()>0) Serial.read();
      do{
        Serial.print(F("Napeti akumulatoru="));
        Serial.println(GetVoltage(BatterySense),3);
        delay(250);
      }while(Serial.available()==0);
      while(Serial.available()>0) Serial.read();
    }
  }while(ch!='0');
};  //  END podmenu nastaveni mericiho kanalu



Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Terminal se sériovou komunikaci

Příspěvek od Patrik » 27 led 2021, 22:07

KamilV píše:
27 led 2021, 19:51
Ale psal jsi, že údaje o uživateli by se doplnily na PC. Takže nějaké spojení s PC tam je, nebo ne? Těžko se hledá řešení, když neznáme kontext a odkrýváš ho postupně.
Vytvářet nějaký HW terminál bude samozřejmě vývoj prodražovat. I následný servis, protože každá oprava = přehrátí firmware.
Pokud tomu nic nebrání (a zatím není jasné, zda ano), skutečně bych zvážil udržování databáze mimo čip. I aplikace na správu půjde napsat mnohem rychleji, tím i levněji. Aktualizovatelná bude také snadněji.
Rozhodně by mě nebavilo zakládat 10 nových uživatelů a točit nějakým enkoderem a listovat v abecedě, když na PC to bude naťukaný za 10 vteřín...
No, počítač bych měl jen já... Ostatní by ho určitě netahali s sebou... A mně upřímně se taky s ním nechce tahat všude... Prostě dejme tomu, že potkám uživatele, kterému chci umožnit vstup... Tak bych vzal administratorsky čip, načetl bych ho na RFID čtečce a třeba na 10 s by bylo možné přidat dalšího uživatele (buď by se dalo ručně - přes ten terminál). Nebo mě napadlo, že by během těchto 10 sekund daný uživatel přiložil taky kartu (uložilo by se číslo čipu a ostatní by se nastavilo na nějaké vychozí hodnoty a zbytek bych doladil časem v PC) - hlavně že by mu ta karta fungovala...

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Terminal se sériovou komunikaci

Příspěvek od KamilV » 28 led 2021, 09:19

A online, nebo alespoň v dosahu lokální sítě, to místo není?

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Terminal se sériovou komunikaci

Příspěvek od Patrik » 28 led 2021, 10:20

Je v dosahu lokální sítě, ale kdysi jsem chtěl zprovoznit WiFi modul, ale nějak mi to nefungovalo... Jako wifi byla vidět, připojil jsem se na ni bez problémů, ale to bylo vše.. Na modulu začala blikat modrá led, jako že jsem připojený.. A pak jak jsem ten modul studoval, tak jsem zjistil, že potřebuji nějaký programátor a ten jsem neměl.. Tak jsem si říkal, že se k tomu vrátím, až vyřeším důležitější věci.. 😁 Mám modul ESP 8266, 01.

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Terminal se sériovou komunikaci

Příspěvek od Patrik » 28 led 2021, 10:30

Já jsem tu wifi chtěl použít jen kvůli bezdrátovému přehrávání programu.. Nic víc.. Prostě abych nemusel propojovat arduino s notebookem pomocí kabelu.

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Terminal se sériovou komunikaci

Příspěvek od Patrik » 29 led 2021, 09:19

KamilV píše:
28 led 2021, 09:19
A online, nebo alespoň v dosahu lokální sítě, to místo není?
Proč??? 🤪 Nějaké rady??

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Terminal se sériovou komunikaci

Příspěvek od KamilV » 29 led 2021, 09:51

To už jsem psal 2x.
Pokud by do bylo na síti, nemuselo by se ke čtečce připojovat žádné PC, ale mohla se kontaktovat databázi někde na síti a ověřovat karty tam.
Na administraci databáze pak půjde velmi rychle napsat třeba i pěkná grafická administrace, pro PC, pro mobily... Nebo, pokud na to není čas a rozpočet, vezme se nějaký již existující sql tool a bude se administrace karet dělat přes něj. V čipu bych si pak již třeba jen uchovával ID povolených karet, kdyby náhodou čtečka byla na chvíli offline, aby fungovala i v nějakém nouzovém režimu.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů