Schleifen / Anweisungs problem
-
Guten Abennd,
bin dabei ein Steuerungsprgramm unteranderen für eine Jalousiesteuerung zu schreiben. Ich hatte für eine jalousie den Code fertig und der ging. Nun haabe ich (aus faulheit) mal eine Schleife geschrieben die 8 mal das ganze durchläuft. Das funktiniert auch soweit blos das er jeden ausgang nach 30 sek löscht macht er nicht. Er löscht alle ca nach 60sek.
Die funktion sollte eigentlich so sein:
Drücke Taste(0) schaltet Ausgang(0) für 30 sek. Wird während der 30 sek taste(0) erneut gedrückt schaletet sich Ausgang(0) aus. Drückt man nun erneut Taste(0) wird Ausgang(1) geschaltet.
Es soll eine Jalousie mit ein Tastersteuerung darstellen.
Wie gesagt alleine klappe es blos seit dem die schleife drum ist und diverser Veränderungen gemacht wurden, schaltet sich nicht jeder Ausgang(0-7) alleine nach ca 30sek aus.
Könnte mir da jemand vieleicht weiter helfen ??mfg Michael
void Platinenabfrage::pabfrage() { for(;;) { try { //*** Uhrzeitabfrage intern *** tm *ptm; time_t *cur_time; cur_time = new time_t; ptm = new tm; time(cur_time); ptm = localtime(cur_time); usleep(200000); inputsja = mbja.read_discrete_inputs(255, 0, 16); outputsja_tmp = outputsja = mbja.read_coils(255, 0, 16); //********** Test jalousie ***** int oua, oub; oua = 0; for (uint16_t in = 0; in < 8; in++) { //*** Jalousie eingang 0-7 ausgang 0-15*** oub = oua +1; if (ptm->tm_sec == (zeitwertja[in] + 30)) { outputsja[oua] = 0; outputsja[oub] = 0; } if ((inputsja[in] > 0 ) & !inputsstandja[in] ) { if ((outputsja[oua] < 1 ) & (outputsja[oub] < 1 )) { if ((outputsstandja[in] <1) & (outputsja[oua] <1)) { if (ptm->tm_sec <30) { zeitwertja[in] = ptm->tm_sec;} else { zeitwertja[in] = ptm->tm_sec - 60;} outputsja[oua] = 0; outputsja[oub] = 1; outputsstandja[in] = outputsja[oub]; } if ((outputsstandja[in] >0 ) & (outputsja[oub] <1 )) { if (ptm->tm_sec <30) {zeitwertja[in] = ptm->tm_sec;} else {zeitwertja[in] = ptm->tm_sec - 60;} outputsja[oub] = 0; outputsja[oua] = 1; outputsstandja[in] = outputsja[oub]; } } else {outputsja[oua] = 0; outputsja[oub] = 0;} } inputsstandja[in] = inputsja[in]; oua = oua + 2; } //***** testende ***************** for (uint16_t i = 0; i < 16; i++) { if (outputsja[i] != outputsja_tmp[i]) { mbja.write_coil(255, i, outputsja[i]); } } } catch (std::exception& e) { // exception thrown is logged anyway sleep(3); } } }
-
Hab den fehler wohl anscheinend gefunden. Hab es SArray <bool> gemacht und vergessen das Zeitwertja ja int ist
bool ist doch nur wahr/falsch oder ?
mfg Michael
-
Brusko schrieb:
Hab den fehler wohl anscheinend gefunden. Hab es SArray <bool> gemacht und vergessen das Zeitwertja ja int ist
bool ist doch nur wahr/falsch oder ?
mfg Michaelwahr falsch, true false, 1 0 wie du willst

-
jepp war ebend der Fehler, so speichert er ja nicht die Sek drin :-).
Mal eine andere Frage, wenn ich per Thread ein Wert schütze und dieser Wert in eine if (geschützer wert =0 ) wird die anweisung denn immer übersprungen ?