MarekWilo Napisano Styczeń 10, 2023 Udostępnij Napisano Styczeń 10, 2023 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 More sharing options...
StefanekP Styczeń 10, 2023 Udostępnij Styczeń 10, 2023 Jeżeli dobrze zrozumiałem kod i pytanie, chyba wystarczy zamienić if (Alarm_detected == 0) na if (Alarm_detected == 1) Link do komentarza Share on other sites More sharing options...
MarekWilo Styczeń 10, 2023 Autor tematu Udostępnij Styczeń 10, 2023 Tak już wcześniej próbowałem, niestety wtedy w ogóle program nie działa. W serial monitorze cały czas wyskakują "1". Link do komentarza Share on other sites More sharing options...
farmaceuta Styczeń 10, 2023 Udostępnij Styczeń 10, 2023 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 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
MarekWilo Styczeń 10, 2023 Autor tematu Udostępnij Styczeń 10, 2023 (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 Styczeń 10, 2023 przez MarekWilo Link do komentarza Share on other sites More sharing options...
farmaceuta Styczeń 10, 2023 Udostępnij Styczeń 10, 2023 (edytowany) 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 Styczeń 10, 2023 przez farmaceuta Link do komentarza Share on other sites More sharing options...
MarekWilo Styczeń 10, 2023 Autor tematu Udostępnij Styczeń 10, 2023 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 More sharing options...
farmaceuta Styczeń 10, 2023 Udostępnij Styczeń 10, 2023 Mówisz że masz problem z guzikiem...no to napisałem co masz zrobic Link do komentarza Share on other sites More sharing options...
MarekWilo Styczeń 10, 2023 Autor tematu Udostępnij Styczeń 10, 2023 Ale w kodzie nie mam: 38 minut temu, farmaceuta napisał: Reszta bez zmian (ten if(val== 1) ma zostać) Link do komentarza Share on other sites More sharing options...
farmaceuta Styczeń 10, 2023 Udostępnij Styczeń 10, 2023 1 godzinę temu, MarekWilo napisał: Ale w kodzie nie mam: Jeżeli chcesz zmienić stan reagowania guzika na drugi stan to w kodzie też to musisz to uwzględnić Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »