5
Σύνδεσα σειριακά ένα παλιό Ericsson T65 με το Arduino
http://pinouts.ru/CellularPhones-P-W...8_pinout.shtml
T65 ------------------------Arduino
Pin4(Rx)--------22K-------Pin8(Tx)
Pin5(Tx)------------------- Pin7(Rx)
Pin10(Gnd)
Pin11(Vcc +5V)
και μέσω ATCommands
Όταν δέχετε κλήση από συγκεκριμένο νούμερο μετά από 2 χτυπήματα (rings) κλείνει την γραμμή και δίνει HIGH στο pin2 όπου είναι συνδεμμένο ένα relay.
Στη συνέχεια στέλνει ένα SMS επιβαιβέωσης ότι η OUT1 είναι ON
Επίσης δέχεται SMS απο συγκεκριμένο νούμερο πάλι. Αν το μύνημα λέει OUT1 ON τότε δίνει HIGH στο pin2, αν λέει OUT1 OFF τότε δίνει LOW.
Στη συνέχεια στέλνει ένα SMS επιβαιβέωσης ότι η OUT1 είναι ON ή OFF ανάλογα.
Το πρόβλημα είναι ότι το T65 έχει μόνο PDU mode για τα SMS.
Δείτε τη σειριακή κονσόλα του Arduino
Δείτε τον κώδικα του ArduinoΚώδικας:Modem reset... Echo Off... Caller ID enabled... Phone Memory Selected for SMS... New SMS Indication Activated... Ready... xxxxxxxxxx is calling... xxxxxxxxxx is calling... OUT1 ON... Sending SMS <OUT1 ON OK>..... Message Sent... SMS Received... OUT1 OFF... Sending SMS <OUT1 OFF OK>..... Message Sent... SMS Received... OUT1 ON... Sending SMS <OUT1 ON OK>..... Message Sent... SMS Received... OUT1 OFF... Sending SMS <OUT1 OFF OK>..... Message Sent...
Παρακαλώ ελεύθερα ότι θέλετε να ρωτήσετε ή να προτείνετε.Κώδικας:#include <SoftwareSerial.h> //Software Serial Port #define RxD 7 #define TxD 8 #define pinOUT1 2 SoftwareSerial ericssonSerial(RxD,TxD); String phonenum="xyxyxyxyxy"; String phonePDU="yxyxyxyxyx"; String OUT1ON="0C31D98C067A56A931D0D309"; String OUT1OFF="0D31D98C067A56A931D0D36804"; String OUT1FAIL="09CF2A35063206934C"; String OUT1ONOK="0ACF2A35067A3A41CF25"; String OUT1OFFOK="0BCF2A35067A1A8DA0E712"; void setup() { Serial.begin(9600); pinMode(RxD, INPUT); pinMode(TxD, OUTPUT); pinMode(pinOUT1, OUTPUT); ericssonSerial.begin(9600); delay(500); Init(); } void Init(){ while (send_command("AT&F",500) != "&F\r\r\nOK\r\n") { delay(1000); } Serial.println("Modem reset..."); while (send_command("ATE=0",500) != "E=0\r\r\nOK\r\n") { delay(1000); } Serial.println("Echo Off..."); while (send_command("AT+CLIP=1",500) != "\r\nOK\r\n") { delay(1000); } Serial.println("Caller ID enabled..."); while (send_command("AT+CPMS=\"ME\"",500).indexOf("CPMS")==0) { delay(1000); } Serial.println("Phone Memory Selected for SMS..."); while (send_command("AT+CNMI=,1",500) != "\r\nOK\r\n") { delay(1000); } Serial.println("New SMS Indication Activated..."); Serial.println("Ready..."); } String send_command(String at_cmd, int dly){ String msg; char incomingByte; ericssonSerial.println(at_cmd); delay(dly); while (ericssonSerial.available() > 0) { incomingByte = (ericssonSerial.read()); msg = msg + incomingByte; } //delay(1000); return msg; } void sendSMS(String num,String txt){ String pduTxt; int pduLength; pduTxt="0011000C9103"+num+"0000AA"+txt; pduLength=(pduTxt.length()-2)/2; //Serial.println(pduTxt); //Serial.println(pduLength); ericssonSerial.print("AT+CMGS="+String(pduLength)+"\r"); delay(5000); ericssonSerial.print(pduTxt); delay(5000); ericssonSerial.write(26); delay(1000); } void loop() { char recvChar; String recvStr; int ringCount=0; String incSMS=0; while(1){ recvStr=0; while (ericssonSerial.available()>0){ recvChar = ericssonSerial.read(); recvStr=recvStr+recvChar; //Serial.print(recvChar); } if (recvStr.indexOf("CLIP")>0){ if (recvStr.indexOf(phonenum)>0) { Serial.println(phonenum+" is calling..."); ringCount=ringCount+1; recvStr=0; //Serial.println(ringCount); }else{ while (send_command("AT+CHUP",700) != "\r\nOK\r\n"){ delay(1000); } Serial.println("Unauthorized caller.."); } } if (ringCount==2){ while (send_command("AT+CHUP",700) != "\r\nOK\r\n"){ delay(1000); } digitalWrite(pinOUT1,HIGH); Serial.println("OUT1 ON..."); //delay(5000); //digitalWrite(pinOUT1,LOW); //Serial.println("LED OFF..."); ringCount=0; Serial.println("Sending SMS <OUT1 ON OK>....."); sendSMS(phonePDU, OUT1ONOK); } if (recvStr.indexOf("CMTI")>0){ Serial.println("SMS Received..."); ericssonSerial.println("AT+CMGR=1"); //delay(500); } if (recvStr.indexOf(phonePDU)>0){ //Serial.print(recvStr); if (recvStr.indexOf(OUT1ON)>0){ digitalWrite(pinOUT1,HIGH); Serial.println("OUT1 ON..."); delay(1000); ericssonSerial.println("AT+CMGD=1"); delay(1000); Serial.println("Sending SMS <OUT1 ON OK>....."); sendSMS(phonePDU,OUT1ONOK); } else if (recvStr.indexOf(OUT1OFF)>0){ digitalWrite(pinOUT1,LOW); Serial.println("OUT1 OFF..."); delay(1000); ericssonSerial.println("AT+CMGD=1"); delay(1000); Serial.println("Sending SMS <OUT1 OFF OK>....."); sendSMS(phonePDU,OUT1OFFOK); } else { Serial.println("Invalid SMS..."); delay(1000); ericssonSerial.println("AT+CMGD=1"); delay(1000); } } if (recvStr.indexOf("CMGS")>0){ Serial.println("Message Sent..."); } while (Serial.available()){ recvChar = Serial.read(); ericssonSerial.print(recvChar); } } }
Ευχαριστώ
Κώστας Κόκορας