Létezik egy Serial.find() utasítás, amit kipróbáltam és egész jó volt.
Viszont van egy kis gond, de valószínűleg én nem csinálok jól valamit.
Modemből olvasok ki adatokat. Ha valami történik, kírja soros porton. Például ha összeáll a DSL kapcsolat, akkor "ADSL link up, interleaved, us=639, ds=12470" ha szétesik akkor pedig "ADSL link down"
Odáig eljutottam, ha jön az adat és talál benne "us=" részt, akkor az utána jövő 2 számértéket az UPSTREAM és a DOWNSTREAM változókba teszi és a DSLOK változót 1-re állítja.
Viszont bármikor megszakadhat, ezért folyamatosan kell figyelni, hogy van-e "down" szüvegrész. Ha igen, akkor az UPSTREAM , DOWNSTREAM értékeket nullázza és a DSLOK = 0.
Folyamatosan jönnek adatok a sorosportról viszonylag ritka időközönként, ha minden normális, viszont én onnan fogom lekérni majd az aktuális paramétereket (küldök soros porton parancsot és a modem válaszol, ebből kiszűröm ami nekem kell) de közben is megszakadhat a kapcsolat és közben is jön az "ADSL link down" információ.
Emiatt ennek a figyelésnek minden ciklusban le kellene futni szerintem. Gondoltam arra is, hogy egyszerűbb lennie a DSL LED-et figyelni, de az egy másik problémakör.
Az a problémám, hogy nem frissül az UPSTREAM és a DOWNSTREAM érték, akkor sem ha csatlakozott a modem. Amíg nem vizsgáltam a "down" szövegrészt addig működött.
Én erre az eljárásra gondoltam, amit akkor hív meg a főprogram, ha a modem üzemben van (van erre egy MODE változóm):
void dsl(){
if (mode == 2){
if (Serial.available() > 0) {
if (Serial.find("down")) DSLOK = 0;
if (Serial.find("up")) {
UPSTREAM = Serial.parseInt();
DOWNSTREAM = Serial.parseInt();
DSLOK = 1;
}
}
}
else DSLOK = 0;
}
Keresés soros port adatokból
Re: Keresés soros port adatokból
Ennyit változtattam, de nem segít:
Kód: Egész kijelölése
void dsl(){
if ((mode == 2) && (DSLOK = 0)){
if (Serial.available() > 0) {
if (Serial.find("us=")) {
UPSTREAM = Serial.parseInt();
DOWNSTREAM = Serial.parseInt();
DSLOK = 1;
}
}
}
else DSLOK = 0;
if ((mode == 2) && (DSLOK = 1)){
if (Serial.available() > 0) {
if (Serial.find("down")) DSLOK = 0;
}
}
}Re: Keresés soros port adatokból
Így már beállítja az UPSTREAM és a DOWNSTREAM értéket, viszont ha elküldöm neki a "down" szót, nem nullázza le a DSLOK változót.
Kód: Egész kijelölése
void dsl(){
//if ((mode == 2) && (DSLOK = 0)) {
if (Serial.available() > 0) {
if (Serial.find("us=")) {
UPSTREAM = Serial.parseInt();
DOWNSTREAM = Serial.parseInt();
DSLOK = 1;
}
else {
if (Serial.find("down")) {
DSLOK = 0;
}
}
}
}Re: Keresés soros port adatokból
Így működik:
Kód: Egész kijelölése
void dsl(){
switch (DSLOK) {
case 0:
if (Serial.available() > 0) {
if (Serial.find("us=")) {
UPSTREAM = Serial.parseInt();
DOWNSTREAM = Serial.parseInt();
DSLOK = 1;
}
}
break;
case 1:
if (Serial.available() > 0) {
if (Serial.find("down")) {
UPSTREAM = 0;
DOWNSTREAM = 0;
DSLOK = 0;
}
}
break;
}
}