Hallo zusammen,
Ich arbeite gerade an einem Seriellen Chat mit dem ich vom Computer aus über den Arduino eine beliebige SMS senden kann.
Ich zerbreche mir schon lange den Kopf wegen diesem Fehler:
'str' does not name a type
Und das ist mein aktueller Code:
### Send SMS messages
1. This example is used to test DFRobot_SIM808 GPS/GPRS/GSM Shield's send SMS func.
2. Open the SIM808_SendSMS example or copy these code to your project
3. Replace the phoneNumber:#define PHONE_NUMBER "187******39"
4. Download and dial the function switch to Arduino, and enjoy it
create on 2016/09/23, version: 1.0
by jason
*/
#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>
//Mobile phone number,need to change
#define PHONE_NUMBER "+491623497654"
#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;
char phone[16];
char datetime[24];
char copy[50];
char rx_byte = 0;
String str = "";
str.toCharArray(copy, 50); // the error
//The content of messages sent
#define PIN_TX 10
#define PIN_RX 11
SoftwareSerial mySerial(PIN_TX,PIN_RX);
DFRobot_SIM808 sim808(&mySerial);//Connect RX,TX,PWR,
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
//******** Initialize sim808 module *************
while(!sim808.init()) {
delay(1000);
Serial.print("Sim808 init error\r\n");
}
Serial.println("Sim808 init success");
}
void loop() {
if (Serial.available() > 0) { // is a character available?
rx_byte = Serial.read(); // get the character
if (rx_byte != '\n') {
// a character of the string was received
str += rx_byte;
}
else {
Serial.println("Start to send message ...");
//******** define phone number and text **********
Serial.println(str);
sim808.sendSMS(PHONE_NUMBER,copy);
//*********** Detecting unread SMS ************************
messageIndex = sim808.isSMSunread();
Serial.print("messageIndex: ");
Serial.println(messageIndex);
//*********** At least, there is one UNREAD SMS ***********
if (messageIndex > 0) {
sim808.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
//***********In order not to full SIM Memory, is better to delete it**********
sim808.deleteSMS(messageIndex);
Serial.print("From number: ");
Serial.println(phone);
Serial.print("Datetime: ");
Serial.println(datetime);
Serial.print("Recieved Message: ");
Serial.println(message);
}
}
}
}
Kann mir bitte jemand helfen?
Ich freue mich auf Antworten.
Wenn Du den copy-Array weglässt, str als char str[50] deklarierst (magic number wären aber besser zu vermeiden) und dann noch einen Index einführst, kannst Du die empfangenen Zeichen direkt in den Character-Array schreiben. Danach kannst Du mit str genauso weiterarbeiten wie jetzt mit copy.
int index = 0;
...
str[index]= rx_byte;
index++;
// Prüfung und Behandlung Index-Überlauf
...
// Prüfung auf String-Ende - dann den C-String mit einer 0 abschließen.
str[index] = '\0';
Die eigentliche Frage bei sowas ist fast immer "wieso kopiert man das überhaupt in ein char Array"? In aller Regel ist das überflüssig. Das braucht man nur wenn man schreibend auf das String Objekt zugreifen will. Meistens geht es aber nur um einen reinen Lese-Zugriff um ein String Objekt an eine Methode zu übergeben die einen C String (char*) möchste
Dafür gibt es c_str():
Dass da "konvertiert" auf der Seite steht ist genaugenommen falsch. Man bekommt einfach direkt einen konstanten Zeiger auf das interne Array zurück. Umgewandelt oder kopiert wird da nichts. Weshalb es besser als toCharArray() ist
/*
### Send SMS messages
1. This example is used to test DFRobot_SIM808 GPS/GPRS/GSM Shield's send SMS func.
2. Open the SIM808_SendSMS example or copy these code to your project
3. Replace the phoneNumber:#define PHONE_NUMBER "187******39"
4. Download and dial the function switch to Arduino, and enjoy it
create on 2016/09/23, version: 1.0
by jason
*/
#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>
//Mobile phone number,need to change
#define PHONE_NUMBER "+491627537482"
#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;
char phone[16];
char datetime[24];
char copy[50];
char rx_byte = 0;
String str = "";
//The content of messages sent
#define PIN_TX 10
#define PIN_RX 11
SoftwareSerial mySerial(PIN_TX,PIN_RX);
DFRobot_SIM808 sim808(&mySerial);//Connect RX,TX,PWR,
void setup() {
mySerial.begin(9600);
Serial.begin(9600);
//******** Initialize sim808 module *************
while(!sim808.init()) {
delay(1000);
Serial.print("Sim808 init error\r\n");
}
Serial.println("Sim808 init success");
}
void loop() {
str.toCharArray(copy, 50);
if (Serial.available() > 0) { // is a character available?
rx_byte = Serial.read(); // get the character
if (rx_byte != '\n') {
// a character of the string was received
str += rx_byte;
}
else {
Serial.println("Start to send message ...");
//******** define phone number and text **********
Serial.println(str);
sim808.sendSMS(PHONE_NUMBER,copy);
str.remove(0, 50); // damit die Nachrichten nicht zu einer großen SMS werden
//*********** At least, there is one UNREAD SMS ***********
Serial.println("checking index...");
//*********** Detecting unread SMS ************************
messageIndex = sim808.isSMSunread();
Serial.println(messageIndex);
if(messageIndex > 0)
{
sim808.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
//***********In order not to full SIM Memory, is better to delete it**********
sim808.deleteSMS(messageIndex);
Serial.print("From number: ");
Serial.println(phone);
Serial.print("Datetime: ");
Serial.println(datetime);
Serial.print("Recieved Message: ");
Serial.println(message);
sim808.deleteSMS(messageIndex);
}
}
}
}