Цикл while и отправка смс
- Войдите на сайт для отправки комментариев
Пт, 18/11/2016 - 21:20
Доброго времени суток. Столкнулся с проблемой при отправке смс с модулем Neoway.
написал код чтобы отправлялось смс по событию, но программа висит в цикле while и из за этого не грузится остальная часть прошивки. Подскажите пожалуйста как правильно выйти из цикла чтобы тело цикла всегда выполнялось 1 раз при заданном условии.
void setup() {
delay(2000);
Serial.begin(9600);
pinMode(6, INPUT_PULLUP);
Serial.println("AT+CMGF=1");
delay(100);
Serial.println("AT+CSCS=\"GSM\"");
delay(100);
}
void loop() {
boolean var = true;
while(digitalRead(6) == LOW) var = true;
delay(200);
if (var) {
while(1){
Serial.println("AT+CPAS");
if (Serial.find("0")) break;
delay(100);}
Serial.println("AT+CMGS=\"+700000000\"");
delay(100);
Serial.print("Text"); // отправляем текст
delay(100);
Serial.print((char)26); // символ завершающий передачу
}
while(digitalRead(6) == HIGH) var = true;
delay(200);
if (var) {
while(1){
Serial.println("AT+CPAS");
if (Serial.find("0")) break;
delay(100);}
Serial.println("AT+CMGS=\"+700000000\""); /
delay(100);
Serial.print("Text"); // отправляем текст
delay(100);
Serial.print((char)26); // символ завершающий передачу
}
}
http://arduino.ru/Reference/While
строка 16 и 29, выполнять пожизненно (как loop), а должно быть условие :)
Здорово видеть код, написаный топикстартером самостоятельно, каким бы он ни был.
Вынесите часть кода (17-24, она же 30-37), отправляющую СМС, в отдельную функцию.
void loop() станет проще и короче и Вам будет легче понять, как всё должно быть на самом деле.
http://arduino.ru/Reference/While
строка 16 и 29, выполнять пожизненно (как loop), а должно быть условие :)
попробуйте цикл Do.. While без break а с условием
Пробовал так, как я знаю условие в do выполняется один раз, даже если значение в цикле ложно, но как можно сделать ложное значение ,если мне нужно обрабатывать и высокий и низкий уровень порта.
do { delay(100); Serial.println("AT+CMGS=\"+700000000\""); delay(100); Serial.print("Text"); // отправляем текст delay(100); Serial.print((char)26); // символ завершающий передачу delay(200); } while(digitalRead(6) == LOW); do { Serial.println("AT+CMGS=\"+700000000\""); delay(100); Serial.print("Text"); // отправляем текст delay(100); Serial.print((char)26); // символ завершающий передачу } while(digitalRead(6) == HIGH);можно с помощью флага
можно с помощью флага
Valera19701 и Araris Благодарю за подсказку.