Схема подключения модема и код из видео.
Так всё было подключено:
Код:
Парсинг требует доработки, в таком виде работает не так, как хотелось бы (
// #include <SoftwareSerial.h> SoftwareSerial gsm(7, 6); // RX, TX void setup() { Serial.begin(9600); gsm.begin(9600); pinMode(13, OUTPUT); gsm.setTimeout(100); // задаем задержку для Serial.parseInt() } void loop() { gsm.println("AT"); // иначе модем засыпает if(gsm.find("RING")){ // если нашли RING Serial.println("RING!"); gsm.println("AT+DDET=1"); // включаем DTMF delay(10); gsm.println("ATA"); // поднимаем трубку while(1){ // в цикле if (gsm.find("+DTMF:")){ // ищим DTMF int cmd = gsm.parseInt(); // читаем команду // gsm.flush(); switch(cmd){ // и в зависимости case 0: // выполняем действие, отправляем в Serial, Serial.println("0"); break; case 1: Serial.println("1"); break; case 2: Serial.println("2"); break; case 3: Serial.println("3"); break; case 4: Serial.println("4"); break; case 5: Serial.println("5"); break; case 6: Serial.println("6"); break; case 7: Serial.println("7"); break; case 8: Serial.println("8"); break; case 9: Serial.println("9"); break; default: Serial.println("error"); break; } } else{ // иначе gsm.println("AT+CPAS"); // спрашиваем состояние модема delay(100); if (gsm.find("+CPAS: 0")) break; // и если он в "готовности", выходим из цикла } // если звонок в процессе, возвращает +CPAS: 3 } Serial.println("OK!"); } }