Re: Terminal se sériovou komunikaci
Napsal: 27 led 2021, 15:21
Nebo dalo by se to třeba přes Bluetooth a mobil? Že bych si pořídil Bluetooth modul?
České fórum pro všechny nadšence do Arduina a dalších technologií.
https://forum.hwkitchen.cz/
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
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íše: ↑27 led 2021, 19:51Ale 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...