GSM alarm
GSM alarm
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.
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.
Re: GSM alarm
Místo řádky:
bych zkusil:
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
Kód: Vybrat vše
pinMode(wakePin, INPUT);
Kód: Vybrat vše
pinMode(wakePin, INPUT_PULLUP);
Mimochodem, dělal jsem něco podobného:
http://www.astromik.org/raspi/gsmalarm/index.htm
Re: GSM alarm
Ď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ť.
Re: GSM alarm
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;
}
Re: GSM alarm
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).
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).
Re: GSM alarm
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.
Re: GSM alarm
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?
Re: GSM alarm
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
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.
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;
}
Re: GSM alarm
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.
Re: GSM alarm
Ked mám takúto podmienku
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?
Kód: Vybrat vše
if (b == 1 && buttonState == HIGH ) {
a = 0;
delay(15000);
sleepNow();
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 5 hostů