GSM alarm

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

GSM alarm

Příspěvek od Sperhak » 22 čer 2018, 20:04

Zdravím som tu nový tak ma neukameňujte. Chcem si postaviť alarm no musí ísť z bateriek takže by som rád použil sleep mode, lenže som s ním ešte nerobil.Niečo som zbúchal a mám taký problém. Po spustení ardurina sa program spustí prejde do sleep modu a čaká kým sa rozopne kontakt (na pine dva úroveň LOW) všetko by aj fungovalo len je to náchilné na rušenie zapnem vedla neho spájkovačku alebo zapnem zosík a arduino sa preberie zo sleep modu a pokračuje v programe. Je to asi spôsobené tým že tam nemám debounce ale neviem ako sa do sleep modu dáva. Ked nemám použitý sleep mode ale normálne čítam pin s digital read tak na rušenie náchylné nieje.

Druhý problém mám s delay chcel som ju odstrániť aby som mohol po spustení programu alarm vypnúť do niekoľkých sekúnd no bez nej sa program správa úplne blbo lebo sa všetko spustí naraz alebo ja neviem čo.Ako by som to vedel odstrániť.Tu sú kódy jeden s delay kde volanie funguje ale tým pádom nefunguje tlačítko a druhý kde volanie blbne ale tlačítko už funguje.
bez delay.txt
(6.18 KiB) Staženo 156 x
s delay.txt
(5.55 KiB) Staženo 156 x

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: GSM alarm

Příspěvek od AstroMiK » 23 čer 2018, 08:42

Místo řádky:

Kód: Vybrat vše

pinMode(wakePin, INPUT);
bych zkusil:

Kód: Vybrat vše

pinMode(wakePin, INPUT_PULLUP);
Tím už by měl mít ten spouštěcí pin jasně definovanou úroveň při rozepnutém tlačítku.

Mimochodem, dělal jsem něco podobného:
http://www.astromik.org/raspi/gsmalarm/index.htm

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

Re: GSM alarm

Příspěvek od Sperhak » 23 čer 2018, 08:55

Ďakujem zlepšilo sa to tak o polovicu, ešte ho skúsim oplechovať a hádam sa to zredukuje. Ono teraz to mám napájané zo sieťe a rušia mi to indukčne zátaže,vo finále to bude z bateriek na samoťe ale obávam sa bleskou a iných výbojov, aby keď príde búrka arduino nezblblo a nezačalo volať.

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

Re: GSM alarm

Příspěvek od Sperhak » 25 čer 2018, 16:27

Tak som pokročil vyriešil som to volanie.Teraz by som potreboval vyriešiť pozastavenie sleep modu mám približnú predstavu ale potreboval by som pomôcť s týmto tlačítkom mám takýto kód,funguje tak že keď držím tlačítko 5s zapne sa ledka a ked ho držím druhý krát 5s vypne sa ledka. Potreboval by som aby sa menila premenná int z 0 na 1 no neviem ako to spraviť keď to skúšam tak s tým výkričníkom ako je písaná tá ledka nefunguje mi to.

Kód: Vybrat vše

const int buttonPin = A4; // číslo pinu tlačítka
const int ledPin = 2; // číslo pinu LED

// 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 = LOW; // 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 = 500; // čas debounce prodlevy; pokud výstup bliká, 
                                            //je potřeba čas „zvětšit“

void setup() {
    pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);
    
    // nastavte počáteční stav LED
    digitalWrite(ledPin, 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 == HIGH) {
                ledState = !ledState;
            }
        }
    }
    
    // nastavte LED:
    digitalWrite(ledPin, ledState);
    
    // načtené hodnoty uložte. V příští smyčce bude označeno jako lastButtonState:
    lastButtonState = reading;
}

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: GSM alarm

Příspěvek od AstroMiK » 25 čer 2018, 16:56

A co to dělá, když to nefunguje?
S vykřičníkem by to neměl být přece žádný problém.

Snad jedině .... pokud jsi tu proměnnou nazval opravdu tak, jak píšeš: "int".
To se nesmí (zakázané názvy proměnných).

rejze69
Příspěvky: 174
Registrován: 02 dub 2018, 18:56
Reputation: 0

Re: GSM alarm

Příspěvek od rejze69 » 26 čer 2018, 02:00

Proměnnou int tam nikde nevidim. Je tam víc proměnných deklarovaných jako int typ. Hlavně tam nikde nevidim těch 5s prodlevy mezi vypnutím/zapnutím led. Navíc jsou tam proměnně pracující s millis() deklarované jako long a to si tipnu nestačí. Je třeba deklarovat unsigned long. Naproti tomu debounceDelay=500 bohatě stačí int a nejlépe const int,všechny ty proměnné stateCokoli jsou dvojstavové HIGH/LOW a tam stačí byte a to ani nemluvím o const int pin=A4 .Do int nelze ukláday písmena a vůbec mi nedochází co má ta deklarace znamenat.. Myslím, že by to chtělo důkladněji prostudovat typy proměnných. Je tam zdá se víc nesprávných deklerací a to ve větším projektu bude dělat problémy.

rejze69
Příspěvky: 174
Registrován: 02 dub 2018, 18:56
Reputation: 0

Re: GSM alarm

Příspěvek od rejze69 » 26 čer 2018, 02:37

To jsem si teď ještě všiml, že lastDebounceTime=millis() máš před if(millis()- lastDebounceTime) { a má to být až potom. Takhle po stisku tlačítka zarovnáš lastDebounceTime s millis() a hned v dalším kroku by to mělo být větší než půl sekundy,takže to nebude platit nikdy.Vážně ten sketch funguje?

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

Re: GSM alarm

Příspěvek od Sperhak » 26 čer 2018, 12:56

Už som našiel chybu bola v inej časti. Mne nebolo jasné ako by b = !b mohlo prehadzovať b na 1 alebo 0 lebo som nikde nezadefinoval že 0 a 1 tak som si myslel že chyba je tu v tom tlačítku,lenže som si naštudoval ten výkričník odskúšal tento kód na serialy a naozaj fungoval sem som ten int nedal lebo som vôbec nevedel ako by to fungovalo a nechcel som Vás zmiasť.Ano sem som hodil omylom 0.5s držanie lebo som to skúšal a nechcelo sa mi čakať 5 s pri pokusoch.Teraz to vyzerá takto a funguje to

Kód: Vybrat vše

const int buttonPin = A4; // číslo pinu tlačítka
const int ledPin = 2; // číslo pinu LED

int ledState = HIGH; // současný stav výstupního pinu
int buttonState; //nejnovější hodnota načtená ze vstupního pinu
int lastButtonState = LOW; // předchozí hodnota načtení ze vstupního pinu

long lastDebounceTime = 0; // čas posledního změny výstupního pinu
long debounceDelay = 5000; // čas debounce prodlevy; pokud výstup bliká, 
int b = 0;                                            

void setup() {
    pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);
    
    // nastavte počáteční stav LED
    digitalWrite(ledPin, ledState);
}

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

        lastDebounceTime = millis();
    }
    
    if ((millis() - lastDebounceTime) > debounceDelay) {

        if (reading != buttonState) {
            buttonState = reading;
            
              if (buttonState == HIGH) {
                ledState = !ledState;
                b = !b;
            }
        }
    }
    digitalWrite(ledPin, ledState);
    lastButtonState = reading;
}
Takže hovoríš že long debounceDelay = 500; stačí dať int.Skúsim nechcem zbytočne mrhať pamäťou nech sa to naučím v základoch správne.

rejze69
Příspěvky: 174
Registrován: 02 dub 2018, 18:56
Reputation: 0

Re: GSM alarm

Příspěvek od rejze69 » 26 čer 2018, 21:30

Stačí int a vzhledem k tomu že to je neměnná hodnota lépe dát const int. Bude to sice fungovat i s int, ale kdyby jsi někde do té proměnné omylem chtěl dát jinou hodnotu, tak const int tě kompilátor upozorní na chybu.

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

Re: GSM alarm

Příspěvek od Sperhak » 27 čer 2018, 21:14

Ked mám takúto podmienku

Kód: Vybrat vše

 if (b == 1 && buttonState == HIGH ) {
    a = 0;
    delay(15000);
    sleepNow();
Treba b1 a button na HIGH držať 15s aby sa uspal alebo stačí na par ms splniť podmienku a spraví sa všetko čo je v nej?

Odpovědět

Kdo je online

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