Нужна помощь в объяснении кода для школьного проекта.
- Войдите на сайт для отправки комментариев
Чт, 09/07/2020 - 20:36
Я школьник, у меня есть проект который я должен выполнить на Arduino. В принципе все готово но мне не понятно пару моментов по коду. ЗА небольшое вознаграждение если кто может помогите пожалуйста. У меня управление реле через SMS, вопрос такой, почему в мониторе порта, после отправки СМС проскакивает 2 раза
SMS send started
SMS send complete
AT+CMGS="+7"
> Heater - ON
SMS send started
SMS send complete
И очень долго отправляется ответная смс, в первом варианте у меня при отсылке СМС начинали валится ответные без остановки, но они отправлялись очень быстро. И для чего нужно ((char)26)) в функции отправки СМС.
#include <SoftwareSerial.h>
#define PIN_RELAY 5
SoftwareSerial mySerial(4, 3);
char incomingByte;
String inputString;
int otpr;
void setup() {
pinMode(PIN_RELAY, OUTPUT);
digitalWrite(PIN_RELAY, HIGH);
Serial.begin(57600);
mySerial.begin(57600);
while(!mySerial.available()){
mySerial.println("AT");
delay(1000);
Serial.println("Connecting…");
}
Serial.println("Connected!");
mySerial.println("AT+CMGF=1");
delay(1000);
//mySerial.println("AT+IPR=57600");
//delay(1000);
mySerial.println("AT+CNMI=1,2,0,0,0");
delay(1000);
mySerial.println("AT+CMGL=\"REC UNREAD\"");
}
void loop()
{
otpr = 0;
if(mySerial.available())
{
delay(100);
while(mySerial.available())
{
incomingByte = mySerial.read();
inputString += incomingByte;
}
delay(10);
Serial.println(inputString);
inputString.toUpperCase();
if (inputString.indexOf("ON") > -1 && otpr == 0)
{
otpr == 1;
digitalWrite(PIN_RELAY, LOW);
sms(String("Heater - ON"), String("+7"));
}
delay (50);
if (inputString.indexOf("OFF") > -1 && otpr == 0)
{
otpr == 1;
digitalWrite(PIN_RELAY, HIGH);
sms(String("Heater - OFF"), String("+7"));
}
delay(50);
if (inputString.indexOf("OK") == -1)
{
mySerial.println("AT+CMGDA=\"DEL ALL\"");
delay(200);
}
inputString = "";
}
}
void sms(String text, String phone)
{
Serial.println("SMS send started");
mySerial.println("AT+CMGS=\"" + phone + "\"");
delay(200);
mySerial.print(text);
delay(200);
mySerial.print((char)26);
delay(200);
Serial.println("SMS send complete");
delay(200);
}
в строчках 43 и 51 ошибка
Мне сказали сделать переменную, чтобы при отправке она менялась и соответственно не повторялась отправка СМС до бесконечности
Антифриз, давайте начистоту - вы этот код писали сами или где-то нашли готовый и ничерта не понимаете? Я Вам написал точные номера строк, где у вас ошибка, там в каждой строке буквально по пять символов. Если вы не видите там ошибку - значит вы язык программирования не знаете совсем. так?
короче. исправьте "==" на "=" в этих строчках
Антифриз, давайте начистоту - вы этот код писали сами или где-то нашли готовый и ничерта не понимаете? Я Вам написал точные номера строк, где у вас ошибка, так в каждой строке буквально по пять символов. Если вы не видите там ошибку - значит вы язык программирования не знаете совсем. так?
Я же написал что учусь в школе, делаю проект. Брал код готовый, делал под себя, но у меня по факту отправлял СМС с ответом до бесконечности, чтобы отправлял только 1 раз мне сказали сделать переменную, присвоить ей 0, после отправки сделать ее единичкой. Я и прошу помощи, потому как не все понимаю. Если поменять на = то ничего не меняется.
мне сказали сделать переменную, присвоить ей 0, после отправки сделать ее единичкой.
вы не спорьте, а слушайте. Конструкция otpr == 1; не присваивает переменной единичку, то есть не делает то, что вам сказали.
Я уже понял что == используется в условии, но одинарный знак = не помогает в решении проблемы.
еще строчку otpr = 0; со строки 29 переставьте между строкой 62 и 63
и строчку 73 поменять на mySerial.write(26);
А если три === поставить?
И кстати антифриз! Пришедши к незнакомым людям в компанию и желая от них что то поиметь, неплохо было бы здравия пожелать присутствующим. Особенно если ты школьник пришел к взрослым дядям за помощью.
а во-вторых напиши ка к каждой строке комментарии, которые исчерпывающе описывают что именно эта каждая строка должна делать по-твоему.
ведь ты же просил объяснений, а не исправлений ?