SOFTWARESERIAL GSM SIM 800L
- Войдите на сайт для отправки комментариев
Пнд, 01/06/2020 - 20:54
Здравствуйте.
Возможно кто-то мне поможет.
Делаю проект на Ардуино уно.
использую
VOICE RECOGNITION
MP3
GSM SIM800L
все один нуждаються в uart.
voice recognition и mp3 вместе работают нормально.
но когда поключаю gsm sim800l он не работает с ними.
Использую serial.end();
но конкретно gsm не работает.
но когда поключаю gsm sim800l он не работает с ними.
Использую serial.end();
но конкретно gsm не работает.
И я не понимаю почему.
Заранее спасибо.
Код прилагается.
Заранее спасибо.
Код прилагается.
Функция sim - первая.
Использую ее в loop.
Остальное полностью рабочее.
Использую ее в loop.
Остальное полностью рабочее.
Спасибо
код вставьте по правилам форума прямо в сообщение
#include <OneWire.h> #include <SoftwareSerial.h> #include "VoiceRecognitionV3.h" #include <DFPlayer_Mini_Mp3.h> String SMSNUMBER = "xxxxxxxxxxxx"; // !!!!!!!! SoftwareSerial sms (10, 11); SoftwareSerial mp3 (0,1); VR myVR(2, 3); // voice recognition uint8_t records[7]; // save record uint8_t buf[64]; int ledyellow = 5 ; int ledblue = 8; int ledred = 9; int pirmove = 4; //sensormove int z = 0; int m = 0; char pass[4] = {'1', '2', '3', '4'}; //keypad char buttons[4] = {'0', '0', '0', '0'}; int k = 0; int b = 0; #define on (0) //voice comand #define off (1) #define tm (2) int ret; int p; //temperature OneWire ds(13); int g=0; void sms1() { myVR.end(); mp3.end(); sms.begin(9600); sms.print("AT+CMGF=1\r"); delay(100); // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS sms.print("AT+CMGS=\"" + SMSNUMBER + "\"\r"); delay(200); // Send the SMS sms.print("Security works\r"); delay(400); // End AT command with a ^Z, ASCII code 26 sms.println((char)26); delay(200); sms.end(); delay(100); return; } void setup() { //myVR.begin(9600); //Serial.begin (9600); pinMode(ledblue, OUTPUT); pinMode(ledred, OUTPUT); pinMode(ledyellow, OUTPUT); pinMode(pirmove, INPUT); //move mp3.begin(9600); mp3_set_serial (mp3); // mp3 delay(100); mp3_set_volume(15); mp3.end(); } void loop() { int z = 0; c: digitalWrite(ledred, LOW); digitalWrite(ledyellow, LOW); int BV = analogRead(0); if (BV>5 && BV<488){ digitalWrite(ledyellow, HIGH); delay(200); voice_check(); z=2; } //button check if (BV > 488) { digitalWrite(ledyellow, HIGH); key_pad(); z = 2; } int pirvalue = digitalRead(pirmove); if (pirvalue == HIGH || z >= 2) { //1:if 1 time move digitalWrite(ledblue, LOW); delay(1000); z = z + 1; if (pirvalue == HIGH || z >= 2) { //2: if 2 times move digitalWrite(ledred, HIGH); sms1(); delay(200); mp3.begin(9600); mp3_play (4); // remove protection delay(1200); mp3.end(); //send sms about move do { mp3.begin(9600); mp3_play (5); //buzzer delay(1000); mp3.end(); int BV = analogRead(0); if (BV>5 && BV<488){ digitalWrite(ledyellow, HIGH); delay(200); voice_check(); } //button ckeck if (BV > 10) { key_pad(); } } while (m < 100); } else { //2: goto c; } } else if (pirvalue == LOW) { //1: digitalWrite(ledblue, HIGH); delay(2000); z = 0; goto c; } } //////////////////////////////////////////////////////////////////// void homie(){ //home mode digitalWrite(ledred, LOW); digitalWrite(ledyellow, LOW); digitalWrite(ledblue, LOW); a: int g = 0; int z = 0; int ret; myVR.begin(9600); ret = myVR.recognize(buf, 50); if(ret>0){ switch(buf[1]){ case off: myVR.end(); mp3.begin(9600); digitalWrite(ledblue, LOW); mp3_play (2); //"mp3/0002.mp3" put security delay(2000); mp3.end(); loop(); break; case tm: //temperature myVR.end(); temper(); break; } } myVR.end(); int BV = analogRead(0); //button check if (BV>10){ key_pad1(); } else{ goto a; } } //////////////////////////////////////////////////// void voice_check(){ digitalWrite(ledyellow, LOW); int g=0; do{ int ret; myVR.begin(9600); ret = myVR.recognize(buf, 50); //voice check //myVR.print("33"); if (ret > 0) { switch(buf[1]){ case on: // myVR.print("33"); myVR.end(); mp3.begin(9600); digitalWrite(ledblue, HIGH); mp3_play (3); // hi delay(2000); mp3_play (1); // remove protection delay(2000); mp3.end(); temper(); //temperature homie(); break; } //myVR.end(); } delay(50); g=g+1; myVR.end(); //return; } while (g<100); return; } ////////////////////////////////////////////////////////////////////// void temper(){ f: byte data[2]; ds.reset(); ds.write(0xCC); ds.write(0x44); delay(1000); ds.reset(); ds.write(0xCC); ds.write(0xBE); data[0] = ds.read(); data[1] = ds.read(); float tem = ((data[1] << 8) | data[0]) * 0.0625; for(p=14; p<35; p++){ if(tem>=(p-0.5) && (p+0.5)>tem) { mp3.begin(9600); mp3_play (p); delay(3500); mp3.end(); return; } } goto f; } ///////////////////////////////////////////////////////////////////////////// void key_pad1 (){ char buttons[4]={'0', '0', '0', '0'}; int k=0; int b=0; f: if (k>3){ return; } if(b == 4){ if (buttons[0] == pass[0] && buttons[1] == pass[1] && buttons[2] == pass[2] && buttons[3] == pass[3]){ digitalWrite(ledblue, HIGH); mp3.begin(9600); mp3_play (2); // put security delay(2000); mp3.end(); loop(); } else{ return; } } digitalWrite(ledyellow, HIGH); int BV = analogRead(0); if (BV>1000){ buttons[b]='1'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; } if (BV>910 && BV<930){ buttons[b]='2'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; } if (BV>835 && BV<855){ buttons[b]='3'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>770 && BV<790){ buttons[b] = '4'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>712 && BV<740){ buttons[b] = '5'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>662 && BV<685){ buttons[b]='6'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>622 && BV<645){ buttons[b]='7'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>575 && BV<610){ buttons[b]='8'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>545 && BV<572){ buttons[b]='9'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>515 && BV<540){ buttons[b]='*'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>488 && BV<512){ buttons[b]='0'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>465 && BV<485){ buttons[b]='#'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; } goto f; } ////////////////////////////////////////////////////////////////////////////////// void key_pad (){ char buttons[4]={'0', '0', '0', '0'}; int k=0; int b=0; d: if (k>3){ return; } if(b == 4){ if (buttons[0] == pass[0] && buttons[1] == pass[1] && buttons[2] == pass[2] && buttons[3] == pass[3]){ digitalWrite(ledblue, HIGH); mp3.begin(9600); mp3_play (3); // delay(2000); mp3_play (1); // delay(2000); mp3.end(); temper(); homie(); } else{ return; } } digitalWrite(ledyellow, HIGH); int BV = analogRead(0); if (BV>1000){ buttons[b]='1'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; } if (BV>910 && BV<930){ buttons[b]='2'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; } if (BV>835 && BV<855){ buttons[b]='3'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>770 && BV<790){ buttons[b] = '4'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>712 && BV<740){ buttons[b] = '5'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>662 && BV<685){ buttons[b]='6'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>622 && BV<645){ buttons[b]='7'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>575 && BV<610){ buttons[b]='8'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>545 && BV<572){ buttons[b]='9'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>515 && BV<540){ buttons[b]='*'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>488 && BV<512){ buttons[b]='0'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; }if (BV>465 && BV<485){ buttons[b]='#'; delay(500); if (buttons[b] != pass[b]){ k=k+1; b = -1; } b=b+1; } goto d; }Сразу самое очевидное - зачем вы mp3 повесили на пины 0 и 1 ? Там находится аппаратный Сериал. Если вам аппаратный сериал ни для чего другого не нужен - используйте его для mp3 вместо программного.
но так как сейчас - программный сериал поверх аппаратного - это дискость и работать не будет.
раньше просто использовал mp3 не инициализируя его отдельно от serial.begin
сейчас поменял
SoftwareSerial mp3 (6,7);
но проблему мою это не решает.
всё так же работеат без gsm.
раньше просто использовал mp3 не инициализируя его отдельно от serial.begin
сейчас поменял
SoftwareSerial mp3 (6,7);
но проблему мою это не решает.
всё так же работеат без gsm.
ну тогда попробуйте повесить gsm на аппаратный сериал.
И. для начала - вы отдельно GSM на ардуине запускать пробовали? Ответы приходили? Вы знаете, как их обрабатывать? - что-то не вижу этого в коде...
Работает отдельно отлично.
в коде минимум функций, только смс. надо для начала чтобы хотя бы это работало.
Сейчас попробую подключить на апаратный.
спасибо большое.
А слабо 10 Software serial запустить ???
А где в loop работа с модемом?
Код не жизнеспособен, delay убивает всю интерактивность - обработку кнопок и работу с модемом.
Рекомендую сделать код работы со звуком без единого delay, потом уже крутить все остальное.
Скетч не хочет заходить на контролер когда gsm на 0 1.
... А вы как думали будет ? Либо порт для заливки либо периферия. Ещё и работать не будет, пока вы не оставите ОДНО устройство на шине !
Не понял вас, если чесно.
Какие функции gsm должны быть в loop?
delay нужны после озвучки, чтобы она была. То есть delay ровно столько, сколько длиться запись.
mp3 работает же на 0 1. И при этом и mp3 и voice recognition работают вместе. просто mp3 на обычном serial.
Вместо delay использовать таймеры или millis
Если из модема приходит какая либо информация по uart и в этот момент у вас delay, то вы просто потеряете этот ответ, соответственно и смс может корректно не отправиться или приняться.
В качестве примера http://arduino.ru/forum/apparatnye-voprosy/vse-o-sim800l-i-vse-chto-s-ni...
Скетч не хочет заходить на контролер когда gsm на 0 1.
на время загрузки скетча отлючайте модем, потом подключайте обратно
Usbasp проще купить.