1 | #include <Arduino.h>
|
2 | #include <SoftwareSerial.h>
|
3 | #include <SPI.h>
|
4 | #include <MFRC522.h>
|
5 | #include <EEPROM.h>
|
6 |
|
7 | #define RST_PIN 9 // SPI Reset Pin
|
8 | #define SS_PIN 10 // SPI Slave Select Pin
|
9 |
|
10 | MFRC522 mfrc522(SS_PIN, RST_PIN);
|
11 | SoftwareSerial SIM900(7, 8);
|
12 |
|
13 | String pinCode = "";
|
14 | String textMessage;
|
15 | String IncDataSerial = "";
|
16 |
|
17 | const uint8_t EE_ADDR_PIN = 0;
|
18 |
|
19 | void writeStringToEEPROM(int addrOffset, const String &strToWrite)
|
20 | {
|
21 | byte len = strToWrite.length();
|
22 | EEPROM.write(addrOffset, len);
|
23 | for (int i = 0; i < len; i++)
|
24 | {
|
25 | EEPROM.write(addrOffset + 1 + i, strToWrite[i]);
|
26 | }
|
27 | }
|
28 |
|
29 | String readStringFromEEPROM(int addrOffset)
|
30 | {
|
31 | int newStrLen = EEPROM.read(addrOffset);
|
32 | char data[newStrLen + 1];
|
33 | for (int i = 0; i < newStrLen; i++)
|
34 | {
|
35 | data[i] = EEPROM.read(addrOffset + 1 + i);
|
36 | }
|
37 | return String(data);
|
38 | }
|
39 |
|
40 | void powerUpSIM900(){
|
41 | // pinMode(9, OUTPUT);
|
42 | // digitalWrite(9,LOW);
|
43 | // delay(1000);
|
44 | // digitalWrite(9,HIGH);
|
45 | // delay(2500);
|
46 | // digitalWrite(9,LOW);
|
47 | // delay(3500);
|
48 | }
|
49 |
|
50 | void initSIM900(){
|
51 | Serial.println("START... Warte...");
|
52 | SIM900.begin(19200);
|
53 | pinCode = readStringFromEEPROM(EE_ADDR_PIN);
|
54 | Serial.println(pinCode);
|
55 | if(pinCode.length() != 256){
|
56 | SIM900.print("AT+CPIN=5343\r");
|
57 | delay(100);
|
58 | SIM900.print("AT+CMGF=1\r");
|
59 | delay(100);
|
60 | // Set module to send SMS data to serial out upon receipt
|
61 | SIM900.print("AT+CNMI=2,2,0,0,0\r");
|
62 | delay(100);
|
63 | }else
|
64 | {
|
65 | Serial.println("Pin eingabe erforderlich");
|
66 | }
|
67 |
|
68 | }
|
69 |
|
70 | void setup()
|
71 | {
|
72 | Serial.begin(19200);
|
73 | SPI.begin();
|
74 | powerUpSIM900();
|
75 | initSIM900();
|
76 | mfrc522.PCD_Init();
|
77 | }
|
78 |
|
79 | void loop()
|
80 | {
|
81 | if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ) {
|
82 | Serial.print("Gelesene UID:");
|
83 | for (byte i = 0; i < mfrc522.uid.size; i++) {
|
84 | // Abstand zwischen HEX-Zahlen und führende Null bei Byte < 16
|
85 | Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
|
86 | Serial.print(mfrc522.uid.uidByte[i], HEX);
|
87 | }
|
88 | Serial.println();
|
89 |
|
90 | // Versetzt die gelesene Karte in einen Ruhemodus, um nach anderen Karten suchen zu können.
|
91 | mfrc522.PICC_HaltA();
|
92 | delay(1000);
|
93 | }
|
94 |
|
95 | if(SIM900.available()){
|
96 | mfrc522.PCD_AntennaOff();
|
97 | delay(100);
|
98 | textMessage = SIM900.readString();
|
99 | Serial.println(textMessage);
|
100 | delay(100);
|
101 | mfrc522.PCD_AntennaOn();
|
102 | }
|
103 |
|
104 | if(Serial.available()){
|
105 | Serial.println("serila");
|
106 | String recSerial = Serial.readString();
|
107 | if(recSerial == "1"){
|
108 | Serial.println("pin Eingeben.");
|
109 | }else{
|
110 | pinCode = recSerial;
|
111 | writeStringToEEPROM(EE_ADDR_PIN, pinCode);
|
112 | initSIM900();
|
113 | };
|
114 | }
|
115 |
|
116 |
|
117 | }
|