Forum: Mikrocontroller und Digitale Elektronik SIM900 & MRC522


von Micha B. (michaelmitch_m)


Lesenswert?

Hallo zusammen,

seit Tagen versuche ich die beiden Module miteinander zum laufen zu 
bekommen. Als Basis dient ein Arduino UNO.

Ich kann mit dem SIM900 SMS empfangen !
Ich kann mit dem MFC522 die UID meiner Tags / Karten auslesen.

Das Problem:
Schließe ich die Stromversorgung an.. Dann Schicke ich meine PIN etc mit 
den AT Befehlen per Softwareserial an den SIM900. Während der nun auf 
Netzsuche ist, kann ich die Karte gegen den RC522 halten und ich bekomme 
meine UID ausgegeben.

Sobald aber von der SIM900 der Status +CREG: 2 kommt, kann ich keine 
Karten mehr auslesen.
Dann Starte ich den Arduino neu (reset) Der SIM900 läuft von sich aus 
natürlich weiter und bleibt im Netz. Nun kann ich wider die Karten 
auslesen.
Schicke ich aber nun eine SMS an meine SIM900, kann ich nach empfang 
wieder keine Karten lesen...

Ich denke irgendwie nicht dass es am Code liegt. Der Arduino 
kommuniziert ja nur per Serielle Schnittstelle mit dem SIM900.

Könnte da irgendwas E-Magnetisches den SPI Bus stören beim Empfangen?
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
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.