Stránka 3 z 4
Re: Elektro zámok
Napsal: 12 čer 2020, 11:03
od KamilV
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

Re: Elektro zámok
Napsal: 12 čer 2020, 17:02
od kiRRow
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ě.
Re: Elektro zámok
Napsal: 12 čer 2020, 17:37
od Sperhak
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.
Re: Elektro zámok
Napsal: 12 čer 2020, 17:43
od KamilV
Zkusím to naposledy. Hodláš nám ukázat kód se kterým máš problém?
Re: Elektro zámok
Napsal: 12 čer 2020, 17:49
od kiRRow
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 ...

... já ruku zvedám
Re: Elektro zámok
Napsal: 12 čer 2020, 18:05
od Sperhak
Ja som sa do nikoho neopieral, oni sa opierali do mňa, ale to je jedno ja som urazený neni

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é.
Re: Elektro zámok
Napsal: 12 čer 2020, 18:16
od Sperhak
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 ....

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

Teda na na úpravu toho kódu od martinusa na celý kód by som neprišiel ani za týžden

Re: Elektro zámok
Napsal: 12 čer 2020, 18:31
od kiRRow
otázkou je : "A rozumíš teď tomu ? ", pokud ne, tak jsme neuspěli.
Re: Elektro zámok
Napsal: 12 čer 2020, 18:41
od Sperhak
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;
}
}
Re: Elektro zámok
Napsal: 12 čer 2020, 18:55
od KamilV
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...