SIM900 & MRC522

OP #6314300
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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.