Elektro zámok

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Elektro zámok

Příspěvek od KamilV » 12 čer 2020, 11:03

Nevím, na co si stěžuješ. Prostě jsme ti jen řekli, že to co ty považuješ za strašnou věc, se nám všem děje běžně. Čím dřív to příjmeš, tím líp pro tebe. A můžeš se teď vztekat jak chceš.

Fakt to nefunguje tak, že nad něčím strávíš pár hodin, řekneš že už tě to neba a někdo to udělá za tebe. Ani na fóru, ani v životě.

Ok, tak ses tady opřel do lidí, kteří ve svém volném čase pomáhají druhým. Budu rád, když si tenhle post vygooglíš za 5 let a řekneš si v duchu, jestli seš na něj pořád pyšnej.

A teď k věci. Říkal jsi, že si něco udělal a ono to stále nešlo. Ukaž nám, co jsi udělal. Fakt nevíme, co ti na tom nejde, když nám to neodtajníš. Pošli poslední kód, ve kterém je vidět ta snaha. A určitě tě někdo popostrčí dál. Možná i někdo z lidí, o který sis teď utřel boty. Zdejší lidi jsou totiž fajn ;)

Uživatelský avatar
kiRRow
Příspěvky: 1163
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Elektro zámok

Příspěvek od kiRRow » 12 čer 2020, 17:02

Sperhak píše:
10 čer 2020, 15:40
Tak som nad tým strávil ďalšie 3 hodiny a na nič som neprišiel, kašlem nato.
Myslím, že se to zvrhlo právě tady.

Programování a projektování je velmi náročná práce na psychiku a čas. Smiř se stím. Najdi si na forum "Mini CNC osa Z" ... lidi ti budou radit a pomáhat, když se budeš chovat, tak jak jsme zde zvyklí. Slušně, trpělivě.

Sperhak
Příspěvky: 46
Registrován: 22 čer 2018, 19:49
Reputation: 0

Re: Elektro zámok

Příspěvek od Sperhak » 12 čer 2020, 17:37

No tak uznaj že 3 hodiny stráviť nad takou banalitou je dosť a proste som sa začal venovať dôležitejším veciam v programe než tlačítku. A na to mi hneď píšu že mám zmeniť povolanie, že to mám k maturite a želajú mi aby som neprešiel, že mám dostať ban. Tak sa nedivte že sa bránim.
Na riešenie som neprišiel sám, neprišiel som naň sa vašou pomocou, neprišli ste naňho vy. Tak to proste bude tak ako to je teraz, neviem čo vám stále vadí. Mám sa blbému tlačítku venovať ďalších 6 hodin? Mne to zato nestojí, tak tam bude nedokonalosť, program aj zariadenie pôjde aj s tým. Kebyže je to vec kvôli ktorej to zariadenie nebude fungovať tak to riešim, ale takto mi to za ten čas nestojí.
Preto som sa obrátil na vás, nie aby ste mi tu trávili čas vymíšlaním kódu, ale dúfal som že možno niekto v minulosti niečo také robil spraví ctrl a je to. Keď nie nič sa nedeje, naozaj neviem čo vás tak rozčulujete.
Ja som sa nesťažoval nato, že ste to nespravili zamňa, ale nato že ste mali blbé moralistické keci.

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

Re: Elektro zámok

Příspěvek od KamilV » 12 čer 2020, 17:43

Zkusím to naposledy. Hodláš nám ukázat kód se kterým máš problém?

Uživatelský avatar
kiRRow
Příspěvky: 1163
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Elektro zámok

Příspěvek od kiRRow » 12 čer 2020, 17:49

Najdi si to téma ... tlačítko jsme řešili měsíc, řízení programu půl roku ... vše naprosto v klidu. Dneska tu borec co měsíc řešil debounce tlačítka občas slušně poradí lidem. Hold nabral tím půlročním babráním s absolutně nevyužitelnou kravinou zkušnosti.
Nikdo tě tu nemoralizuje, všichni tě jen upozorňují na to že se máš obrnit trpělivostí. Chovej se slušně, neopírej se do lidí co ti chcou poradit, posílej celý kód ... komentáře a struktůra kódu taky hodně pomohou ..... vědět k čemu to nakonec bude je taky dobrý .... a měj trpělivost. Programátor se bez trpělivosti neobejde. A bez slušného chování taky ne.

PS:
ať zvedne ruku kdo ví jak tenhle problém vyřešit ... :D ... já ruku zvedám

Sperhak
Příspěvky: 46
Registrován: 22 čer 2018, 19:49
Reputation: 0

Re: Elektro zámok

Příspěvek od Sperhak » 12 čer 2020, 18:05

Ja som sa do nikoho neopieral, oni sa opierali do mňa, ale to je jedno ja som urazený neni :D
Dobre tak to skúsim ešte raz. Kód mám tento, lebo všetky neúspešné pokusy som vymazal. Viem že ten kód je určený na niečo iné, ale zatial mi funguje najlepšie a všetky jeho úpravy skončili neúspechom.

Kód: Vybrat vše

// konstanty použité k nastavení čísel pinů se nezmění:
const int buttonPin = 10; // číslo pinu tlačítka
const int ledPin = 11; // číslo pinu LED
const int ledPin2 = 13;

// Proměnné se změní:
int ledState = HIGH; // současný stav výstupního pinu
int buttonState; //nejnovější hodnota načtená ze vstupního pinu
int lastButtonState = HIGH; // předchozí hodnota načtení ze vstupního pinu

// Následné proměnné jsou typu long, jelikož čas měřený v milisekundách se
//rychle změní na větší číslo, jež nemůže být uloženo v int
long lastDebounceTime = 0; // čas posledního změny výstupního pinu
long debounceDelay = 1500; // čas debounce prodlevy; pokud výstup bliká,
//je potřeba čas „zvětšit“

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);

  // nastavte počáteční stav LED
  digitalWrite(ledPin, ledState);
  digitalWrite(ledPin2, ledState);
}

void loop() {
  // Stav spínače přiřaďte do místní proměnné:
  int reading = digitalRead(buttonPin);

  // Zkontroluje, zda-li jste stlačili tlačítko
  // (tj. že vstup se z LOW změnil na HIGH), a od posledního zmáčknutí jste čekali
  // dostatečně dlouho na to, aby byl veškerý šum ignorován:

  // Pokud se spínač změnil kvůli šumu nebo stlačení:
  if (reading != lastButtonState) {
    // upravte proměnou lastDebounceTime
    lastDebounceTime = millis();
     
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // Ať už je načtená hodnota jakákoliv, byla tam déle než debounce prodleva,
    // berme ji tedy jako aktuální stav:

    // Pokud se stav tlačítka změnil:
    if (reading != buttonState) {
      buttonState = reading;

      // LED přepněte pouze když je nový stav tlačítka označen jako HIGH
      if (buttonState == LOW) {
        ledState = !ledState;


      }
    }
  }

  // nastavte LED:
  digitalWrite(ledPin, ledState);
  digitalWrite(ledPin2, ledState);

  // načtené hodnoty uložte. V příští smyčce bude označeno jako lastButtonState:
 lastButtonState = reading;
}
Potom mi tu jeden člen napísal tento kód, ktorý tiež nefunguje podla mojich predstáv a všetky moje úpravy skončili taktiež neúspechom.

Kód: Vybrat vše

const int buttonPin = 10; // číslo pinu tlačítka
const int ledPin = 11; // číslo pinu LED
const int ledPin2 = 13;

long lastDebounceTime = 0;
long debounceDelay = 1500;
int buttonState1 = HIGH;
int lastButtonState1 = LOW;
unsigned long debounceInterval = 50;
unsigned long timer = 0;
unsigned long lastDebounceTime1 = 0;
int reading;
int rezim = 0;
void setup() {
  Serial.begin(115200);
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
}

void loop() {
  switch (rezim) {
    case 0:
      reading = digitalRead(buttonPin);
      Serial.println(reading);
      if (reading == LOW) {
        timer = millis();
        reading = digitalRead(buttonPin);
        while (reading == LOW) {
          reading = digitalRead(buttonPin);
          if (millis() - timer >= debounceDelay) {
            digitalWrite(ledPin2, HIGH);
            rezim = 1;
            Serial.println("LED ZAPNUTA");
            break;
          }
        }
      }
      break;
    default:
      reading = digitalRead(buttonPin);
      if (reading != lastButtonState1) {
        lastDebounceTime1 = millis();
      }
      if (((millis() - lastDebounceTime1) > debounceInterval)&& lastDebounceTime1!=0){
        if (reading != buttonState1) {
          buttonState1 = reading;
          if (buttonState1 == LOW) {
            digitalWrite(ledPin2, LOW);
            rezim = 0;
            Serial.println("LED VYPNUTA");
          }
        }
      }
      lastButtonState1 = reading;
      break;
  }
}
Rad by som to pochopil ale zatiaľ to nechapem. Bude to na self latching ,ale myslím že je to nepodstatné.

Sperhak
Příspěvky: 46
Registrován: 22 čer 2018, 19:49
Reputation: 0

Re: Elektro zámok

Příspěvek od Sperhak » 12 čer 2020, 18:16

Kód: Vybrat vše

const int buttonPin = 10; // číslo pinu tlačítka
const int ledPin = 12; // číslo pinu LED
const int ledPin2 = 13;

long lastDebounceTime = 0;
long debounceDelay = 1500;
int buttonState1 = HIGH;
int lastButtonState1 = LOW;
unsigned long debounceInterval = 50;
unsigned long timer = 0;
unsigned long lastDebounceTime1 = 0;
int reading;
int rezim = 0;
int ledState;
void setup() {
  Serial.begin(115200);
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
}

void loop() {
  switch (rezim) {
    case 0:
      reading = digitalRead(buttonPin);
      Serial.println(reading);
      if (reading == LOW) {
        timer = millis();
        reading = digitalRead(buttonPin);
        while (reading == LOW) {
          reading = digitalRead(buttonPin);
          if (millis() - timer >= debounceDelay) {
            ledState = !ledState;
            digitalWrite(ledPin2, ledState);
            rezim = 1;
            Serial.println("LED ZAPNUTA");
            break;
          }
        }
      }
      break;
    default:
      reading = digitalRead(buttonPin);
      if (reading != lastButtonState1) {
        lastDebounceTime1 = millis();
      }
      if (((millis() - lastDebounceTime1) > debounceInterval)&& lastDebounceTime1!=0){
        if (reading != buttonState1) {
          buttonState1 = reading;
          if (buttonState1 == LOW) {
            rezim = 0;
            Serial.println("LED VYPNUTA");
          }
        }
      }
      lastButtonState1 = reading;
      break;
  }
}
Tak sa mi to podarilo. Naposledy som to robil 1 hodinu potom som to vzdal. Teraz som dostal nápad a bolo to za 2 min hotové. Je mi jasné že teraz namna zasa zosypete príspevky typu no vidíš, ale to mám u .... :D Proste som nechcel tlačitku venovať dalšie 3 a viac hodín, ale keby som vedel že nato prídem za 2 min tak sme sa mohli zaobísť bez všetkých tých sporov :D
Teda na na úpravu toho kódu od martinusa na celý kód by som neprišiel ani za týžden :D

Uživatelský avatar
kiRRow
Příspěvky: 1163
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Elektro zámok

Příspěvek od kiRRow » 12 čer 2020, 18:31

otázkou je : "A rozumíš teď tomu ? ", pokud ne, tak jsme neuspěli.

Sperhak
Příspěvky: 46
Registrován: 22 čer 2018, 19:49
Reputation: 0

Re: Elektro zámok

Příspěvek od Sperhak » 12 čer 2020, 18:41

No niečomu hej niečomu nie. Spravil som tam komentáre niečo si myslím že viem a niečo sa tam pýtam, ak by si mi to vysvetlil bol by som rád.
Ešte neviem je to nepodstatné, ale keď už sa pýtam. Keď stlačím tlačítko aby sa zapla led treba ho držať 1500ms alebo 1550ms kým sa zapne?

Kód: Vybrat vše

const int buttonPin = 10; // číslo pinu tlačítka
const int ledPin = 12; // číslo pinu LED
const int ledPin2 = 13;

long lastDebounceTime = 0;
long debounceDelay = 1500;
int buttonState1 = HIGH;
int lastButtonState1 = LOW;
unsigned long debounceInterval = 50;
unsigned long timer = 0;
unsigned long lastDebounceTime1 = 0;
int reading;
int rezim = 0;
int ledState;
void setup() {

  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
}

void loop() {
  switch (rezim) {
    case 0:
      reading = digitalRead(buttonPin);// tu sa cita tlacitko
      if (reading == LOW) {
        timer = millis();
        reading = digitalRead(buttonPin);// preco je tu toto ved uz sa z tlacitka cita hore?
        while (reading == LOW) {
          reading = digitalRead(buttonPin);// a zase
          if (millis() - timer >= debounceDelay) {
            ledState = !ledState;// nastavi sa vzdy opacny stav ako je
            digitalWrite(ledPin2, ledState);
            digitalWrite(ledPin, ledState);
            rezim = 1; // nastavi sa rezim 1 aby sa  rezim 0 nespustal pri zakmitoch tlacitka
            break;
          }
        }
      }
      break;// preco je to tu 2x
    default:// neviem ale asi sa to robi vzdy
      reading = digitalRead(buttonPin);
      if (reading != lastButtonState1) {
        lastDebounceTime1 = millis();
      }
      if (((millis() - lastDebounceTime1) > debounceInterval) && lastDebounceTime1 != 0) {
        if (reading != buttonState1) {
          buttonState1 = reading;
          if (buttonState1 == LOW) {
            rezim = 0; // ak sa tlacitko drzi dlchsie ako debounceInterval čo je 50ms tak sa spusti rezim 0         
          }
        }
      }
      lastButtonState1 = reading;
      break;
  }
}

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

Re: Elektro zámok

Příspěvek od KamilV » 12 čer 2020, 18:55

Musíš rozlišovat dva časy. Debounce tlačítka, což je teď 50 ms, a délku stisku, který má spustit akci, což je teď 1500 ms.

Do reading to načítáš opakovaně, abys zachytil, zda se nezměnil stav tlačítka (tedy zda nebylo upuštěno). Osobně si také myslím, že to není napsáno úplně šťastně a asi by mi přišlo lepší:

Kód: Vybrat vše

do {
 reading = digitalRead(buttonPin);
 if (millis() - timer >= debounceDelay) {
 ...
 }
} while (reading == LOW);
První break vyskakuje z cyklu,
ten druhý break ukončuje case blok toho switche.
Default se vykoná, pokud žádná case neodpovídá switchované proměnné.

Pokud je rezim jen 0 a 1, asi by tam mohl být jen IF...

Odpovědět

Kdo je online

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