Skrzynka na listy po kablu

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
BlackAdder
Młodszy majsterkowicz
Posty: 14
Rejestracja: 20 paź 2013, 23:28

Skrzynka na listy po kablu

Post autor: BlackAdder » 8 lis 2013, 13:26

Witam, zainteresowany artykułem "Prosty system powiadamiania o nowych listach znajdujących się w skrzynce pocztowej" chciałbym go zrobić po kablu. Obecnie w testach używam Hallotronu, przy zbliżeniu magnesu dioda się nie świeci (po oddaleniu zapala). Mam pytanie co zrobić, żeby dioda po zapaleniu nie zgasła (tzn. podnosimy klapkę skrzynki dioda się zapala, zamykamy klapkę dioda pali się nadal)?

const int hallPin = 8;
const int ledPin = 13;

int hallState = 0;

void setup(){
pinMode(hallPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(hallPin, HIGH);
}

void loop(){
hallState = digitalRead(hallPin);

if (hallState == HIGH){
digitalWrite(ledPin, HIGH);
}
else{
digitalWrite(ledPin, LOW);
}
}

Jeszcze będę chciał dodać przycisk reset do kodu.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


mj_2000
Młodszy majsterkowicz
Posty: 16
Rejestracja: 30 paź 2013, 16:43

Re: Skrzynka na listy po kablu

Post autor: mj_2000 » 8 lis 2013, 20:59

Zmień:

if (hallState == HIGH){
digitalWrite(ledPin, HIGH);
}
else{
digitalWrite(ledPin, LOW);
}


na:

if (hallState == HIGH){
digitalWrite(ledPin, HIGH);
}

Przycisk RESET będzie podobny np.:
rstState = digitalRead(rstPin);
if (rstState == LOW){ // aktywny stan niski
digitalWrite(ledPin, LOW);
}
BlackAdder
Młodszy majsterkowicz
Posty: 14
Rejestracja: 20 paź 2013, 23:28

Re: Skrzynka na listy po kablu

Post autor: BlackAdder » 9 lis 2013, 09:39

Dzięki bardzo za pomoc. Chciałbym otrzymywać sms, kiedy w skrzynce są listy. Dlatego dodałem dodatkowy Led (GSM) i podłączyłem komórkę. Wysyłanie smsów mam podpięte pod (hallPin == HIGH). Czasami się jednak zdarza, że listonosz nie zamyka klapki od skrzynki i wtedy miałbym cały czas hallotron w pozycji HIGH (wysyłanie ciągle smsów, dopóki nie przejdzie w stan LOW). Czy możecie mi chociaż rzucić hasło jak to obejść.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2);

const int hallPin = 8;
const int ledPin = 13;
const int GsmLedPin = 6;
const int rstPin = 7;
int hallState = 0;
int rstState = 0;

void setup(){
pinMode(hallPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(GsmLedPin, OUTPUT);
digitalWrite(rstPin, HIGH);
digitalWrite(hallPin, HIGH);
mySerial.begin(4800);
}

void loop(){

hallState = digitalRead(hallPin);

if (hallState == HIGH){
digitalWrite(ledPin, HIGH);
}

if (hallState == HIGH){
digitalWrite(GsmLedPin, HIGH);
mySerial.println("AT");
delay(500);
mySerial.println("AT+CMGF=1");
delay(1000);
mySerial.println("AT+CMGW=\"+48...................\""); // wasz numer telefonu
delay(1000);
mySerial.print("Masz nowa poczte w skrzynce.");
delay(1000);
mySerial.write(byte(26));
delay(1000);
mySerial.println("AT+CMSS=1");
digitalWrite(GsmLedPin, LOW);
delay(250);
digitalWrite(GsmLedPin, HIGH);
delay(10000);
mySerial.println("AT+CMGD=1");
digitalWrite(GsmLedPin, LOW);
delay(250);
}

rstState = digitalRead(rstPin);
if (rstState == LOW){
digitalWrite(ledPin, LOW);
}}
Awatar użytkownika
Marhef
Złota rączka
Posty: 1246
Rejestracja: 18 lis 2011, 02:18

Re: Skrzynka na listy po kablu

Post autor: Marhef » 9 lis 2013, 10:28

Rozumiem, że zamknięcie skrzynki jest sygnalizowane przez hallState == LOW?
Wtedy w instrukcji:
BlackAdder pisze:
if (hallState == HIGH){
digitalWrite(GsmLedPin, HIGH);
mySerial.println("AT");
delay(500);
mySerial.println("AT+CMGF=1");
delay(1000);
mySerial.println("AT+CMGW=\"+48...................\""); // wasz numer telefonu
delay(1000);
mySerial.print("Masz nowa poczte w skrzynce.");
delay(1000);
mySerial.write(byte(26));
delay(1000);
mySerial.println("AT+CMSS=1");
digitalWrite(GsmLedPin, LOW);
delay(250);
digitalWrite(GsmLedPin, HIGH);
delay(10000);
mySerial.println("AT+CMGD=1");
digitalWrite(GsmLedPin, LOW);
delay(250);
}
dodałbym:

Kod: Zaznacz cały

if (hallState == HIGH && wyslano == 0){ 
digitalWrite(GsmLedPin, HIGH); 
mySerial.println("AT"); 
delay(500);
mySerial.println("AT+CMGF=1"); 
delay(1000); 
mySerial.println("AT+CMGW=\"+48...................\""); // wasz numer telefonu
delay(1000);
mySerial.print("Masz nowa poczte w skrzynce."); 
delay(1000);
mySerial.write(byte(26)); 
delay(1000);
mySerial.println("AT+CMSS=1"); 
digitalWrite(GsmLedPin, LOW); 
delay(250);
digitalWrite(GsmLedPin, HIGH); 
delay(10000); 
mySerial.println("AT+CMGD=1"); 
digitalWrite(GsmLedPin, LOW);
delay(250);
wyslano = 1;
}
i dodatkowa instrukcja:

Kod: Zaznacz cały

if (hallState == LOW){ 
wyslano = 0;
Dodajesz warunek, który sprawdza, czy wysłany został SMS. Jeśli tak, omija blok wysyłania.
Kolejne wysłanie jest możliwe po zamknięciu i ponownym otworzeniu skrzynki
Awatar użytkownika
Marhef
Złota rączka
Posty: 1246
Rejestracja: 18 lis 2011, 02:18

Re: Skrzynka na listy po kablu

Post autor: Marhef » 10 lis 2013, 12:41

Rozumiem, że zadziałało?
W ostatnim kodzie zapomniałem dodać "}" na końcu
ODPOWIEDZ

Strony partnerskie: