Skocz do zawartości

Arduino - odczyt stanu pinu niski zamiast wysokiego


MarekWilo

Pomocna odpowiedź

Witam, mam prosty problem z programem Arduino, niestety jestem zielony i sam nie dam rady tego ogarnąć. 

Jak tutaj zmienić żeby program reagował na stan wysoki a nie niski na pinie 15. Teraz po uruchomieniu od razu wysyła alert a potrzebuje żeby wysłał dopiero po podaniu stanu wysokiego na ten pin. 

 

#include <SoftwareSerial.h>
//-----------------------------------------------------------------------------------
//Alert reciever's phone number with country code
const String PHONE_1 = "+480000";
const String PHONE_2 = ""; //optional
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
#define rxPin 4
#define txPin 0
SoftwareSerial sim800L(rxPin,txPin);
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
int alarm_sensor = 15;
int Alarm_detected;
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
void setup()
{
  //-----------------------------------------------------------------------------------
  //Begin serial communication: Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  //-----------------------------------------------------------------------------------
  //Begin serial communication: SIM800L
  sim800L.begin(9600);
  
  //-----------------------------------------------------------------------------------
  pinMode(alarm_sensor, INPUT);
  //----------------------------------------------------------------------------------
  delay(1000);             // 15 sec delay
  Serial.println("Initializing...");
  //Once the handshake test is successful, it will back to OK
  sim800L.println("AT");
  delay(1000);
  sim800L.println("AT+CMGF=1");
  delay(1000);
  //-----------------------------------------------------------------------------------
}
void loop()
{
  while(sim800L.available()){
  Serial.println(sim800L.readString());
  }
  
  Alarm_detected = digitalRead(alarm_sensor);
  Serial.println(Alarm_detected);
  //delay(100);
  //-----------------------------------------------------------------------------------
  //The fire is detected, trigger Alarm and send sms
  if (Alarm_detected == 0)
  {
      Serial.println("!! Piwnica Alarm !!");
      send_multi_sms();
      make_multi_call();
    }
//-----------------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------------
void send_multi_sms()
{
  if(PHONE_1 != ""){
    Serial.print("Phone 1: ");
    send_sms("!! Piwnica Alarm !!", PHONE_1);
  }
  if(PHONE_2 != ""){
    Serial.print("Phone 2: ");
    send_sms("!! Piwnica Alarm !!", PHONE_2);
  }
}
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
void make_multi_call()
{
  if(PHONE_1 != ""){
    Serial.print("Phone 1: ");
    make_call(PHONE_1);
  }
  if(PHONE_2 != ""){
    Serial.print("Phone 2: ");
    make_call(PHONE_2);
  }
}
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
void send_sms(String text, String phone)
{
    Serial.println("sending sms....");
    delay(50);
    sim800L.print("AT+CMGF=1\r");
    delay(1000);
    sim800L.print("AT+CMGS=\""+phone+"\"\r");
    delay(1000);
    sim800L.print(text);
    delay(100);
    sim800L.write(0x1A); //ascii code for ctrl-26 //Serial2.println((char)26); //ascii code for ctrl-26
    delay(5000);
}
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
void make_call(String phone)
{
    Serial.println("calling....");
    sim800L.println("ATD"+phone+";");
    delay(20000); //20 sec delay
    sim800L.println("ATH");
    delay(1000); //1 sec delay
}

 

Link do komentarza
Share on other sites

14 minut temu, MarekWilo napisał:

Tak już wcześniej próbowałem, niestety wtedy w ogóle program nie działa. W serial monitorze cały czas wyskakują "1".

 

 

Bo musisz ustalić jakiś konkretny stan na tym pinie...adru posiada tylko podciąganie sprzętowe na high...ty potrzebujesz podciąganie na low, czyli musisz dodać zewnętrzny rezystor między pin a gnd...coś w granicach 10k

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

(edytowany)

To nie Arduino tylko ESP8266 (Wemos D1 mini) + moduł SIM800L sterowany komendami AT, sorki że nie doprecyzowałem.

Mam też inny wsad który tylko wysyła SMS, i tam to działa tak jak trzeba wystarczy podać napięcie z pinu 3.3V na pin 15.

Tak wygląda ten działający kod:

 

#include <SoftwareSerial.h>

//Alarm reciever's phone number with country code
const String PHONE = "+48*******";

//GSM Module RX pin to Arduino 3
//GSM Module TX pin to Arduino 2
#define rxPin 4
#define txPin 0
SoftwareSerial sim800(rxPin,txPin);

//the pin that the pir sensor is atteched to
int pir_sensor = 15;

void setup() {
  pinMode(pir_sensor, INPUT);    // initialize sensor as an input
  delay(2000);
  Serial.begin(9600);          // initialize serial
  sim800.begin(9600);
  Serial.println("SIM800L software serial initialize");
  delay(15000);             // 15 sec delay
  sim800.println("AT");
  sim800.println("AT+CSQ");
}

void loop(){

//////////////////////////////////////////////////
while(sim800.available()){
  Serial.println(sim800.readString());
}
//////////////////////////////////////////////////
while(Serial.available())  {
  sim800.println(Serial.readString());
}
//////////////////////////////////////////////////
delay(3000);
  int val = digitalRead(pir_sensor);  // read sensor value
  if (val == HIGH) {                  // check if the sensor is HIGH
    //state = HIGH;
    Serial.println("Motion detected!");
sim800.print("AT+CMGF=1\r");
    delay(100);
    sim800.print("AT+CMGS=\""+PHONE+"\"\r");
    delay(100);
    sim800.print("!! ALARM PIWNICA !!");
    delay(100);
    sim800.write(0x1A); //ascii code for ctrl-26 //sim800.println((char)26); //ascii code for ctrl-26
    delay(1000);
    Serial.println("SMS Sent Successfully.");
    delay(300000);                    // 5 min delay
  }
}

 

Chodzi o tą funkcje?:

 

 int val = digitalRead(pir_sensor);  // read sensor value
  if (val == HIGH) {                  // check if the sensor is HIGH
    //state = HIGH;

 

 

Edytowano przez MarekWilo
Link do komentarza
Share on other sites

Ustawiasz pin na INPUT więc nie wiadomo jaki tam stan występuje bo nie jest "przypięty" do żadnej szyny zasilania...nie wiem czy esp8266 ma piny na low, ale pewnie ma...spróbuj 

pinMode(pir_sensor, INPUT_PULLDOWN);

Reszta bez zmian (ten if(val== 1) ma zostać)

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

4 minuty temu, farmaceuta napisał:

Reszta bez zmian (ten if(val== 1) ma zostać)

Ale mi chodzi o przerobienie tego pierwszego wsadu z pierwszego postu:

 

#include <SoftwareSerial.h>
//-----------------------------------------------------------------------------------
//Alert reciever's phone number with country code
const String PHONE_1 = "+480000";
const String PHONE_2 = ""; //optional
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
#define rxPin 4
#define txPin 0
SoftwareSerial sim800L(rxPin,txPin);
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
int alarm_sensor = 15;
int Alarm_detected;
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
void setup()
{
  //-----------------------------------------------------------------------------------
  //Begin serial communication: Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  //-----------------------------------------------------------------------------------
  //Begin serial communication: SIM800L
  sim800L.begin(9600);
  
  //-----------------------------------------------------------------------------------
  pinMode(alarm_sensor, INPUT);
  //----------------------------------------------------------------------------------
  delay(1000);             // 15 sec delay
  Serial.println("Initializing...");
  //Once the handshake test is successful, it will back to OK
  sim800L.println("AT");
  delay(1000);
  sim800L.println("AT+CMGF=1");
  delay(1000);
  //-----------------------------------------------------------------------------------
}
void loop()
{
  while(sim800L.available()){
  Serial.println(sim800L.readString());
  }
  
  Alarm_detected = digitalRead(alarm_sensor);
  Serial.println(Alarm_detected);
  //delay(100);
  //-----------------------------------------------------------------------------------
  //The fire is detected, trigger Alarm and send sms
  if (Alarm_detected == 0)
  {
      Serial.println("!! Piwnica Alarm !!");
      send_multi_sms();
      make_multi_call();
    }
//-----------------------------------------------------------------------------------
}
//-----------------------------------------------------------------------------------
void send_multi_sms()
{
  if(PHONE_1 != ""){
    Serial.print("Phone 1: ");
    send_sms("!! Piwnica Alarm !!", PHONE_1);
  }
  if(PHONE_2 != ""){
    Serial.print("Phone 2: ");
    send_sms("!! Piwnica Alarm !!", PHONE_2);
  }
}
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
void make_multi_call()
{
  if(PHONE_1 != ""){
    Serial.print("Phone 1: ");
    make_call(PHONE_1);
  }
  if(PHONE_2 != ""){
    Serial.print("Phone 2: ");
    make_call(PHONE_2);
  }
}
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
void send_sms(String text, String phone)
{
    Serial.println("sending sms....");
    delay(50);
    sim800L.print("AT+CMGF=1\r");
    delay(1000);
    sim800L.print("AT+CMGS=\""+phone+"\"\r");
    delay(1000);
    sim800L.print(text);
    delay(100);
    sim800L.write(0x1A); //ascii code for ctrl-26 //Serial2.println((char)26); //ascii code for ctrl-26
    delay(5000);
}
//-----------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------
void make_call(String phone)
{
    Serial.println("calling....");
    sim800L.println("ATD"+phone+";");
    delay(20000); //20 sec delay
    sim800L.println("ATH");
    delay(1000); //1 sec delay
}

 

 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.