Библиотека SIM900, АТ команды, запрос баланса.
- Войдите на сайт для отправки комментариев
Вс, 21/01/2018 - 17:06
Есть рабочий код вывода баланса в сериал:
#include "SIM900.h"
#include <SoftwareSerial.h>
int numdata;
char inSerial[40];
int i=0;
#include <Wire.h>//айтуси библиотека
#include <LiquidCrystal_I2C.h>//библиотека экрана
LiquidCrystal_I2C lcd(0x27,16,2);//определяем лсд - адрес, кол-во столбцов, кол-во строк
void setup()
{
lcd.init(); //вкл экран
lcd.backlight( ); //вкл подсветка
//Serial connection.
Serial.begin(9600);
Serial.println("GSM Shield testing.");
//Start configuration of shield with baudrate.
//For http uses is raccomanded to use 4800 or slower.
if (gsm.begin(9600)) {
Serial.println("\nstatus=READY");
lcd.setCursor(0, 0);
lcd.print ("OK");
}
else {Serial.println("\nstatus=IDLE");
lcd.setCursor(0, 0);
lcd.print ("FAIL");
}
delay(2000);
//Стираем
lcd.clear();
};
void loop()
{
//Read for new byte on serial hardware,
//and write them on NewSoftSerial.
serialhwread();
//Read for new byte on NewSoftSerial.
serialswread();
};
void serialhwread()
{
i=0;
if (Serial.available() > 0) {
while (Serial.available() > 0) {
inSerial[i]=(Serial.read());
delay(10);
i++;
}
inSerial[i]='\0';
if(!strcmp(inSerial,"/END")) {
Serial.println("_");
inSerial[0]=0x1a;
inSerial[1]='\0';
gsm.SimpleWriteln(inSerial);
}
//Send a saved AT command using serial port.
if(!strcmp(inSerial,"TEST")) {
Serial.println("BALANCE");
// gsm.SimpleWriteln("AT+CSQ"); //СИГНАЛ
// gsm.SimpleWriteln("AT+COPS?"); //ОПЕРАТОР
gsm.SimpleWriteln(" ATD*105*5#"); //БАЛАНС
} else {
Serial.println(inSerial);
gsm.SimpleWriteln(inSerial);
}
inSerial[0]='\0';
}
}
void serialswread()
{
gsm.SimpleRead();
}
Который при вводе "TEST" выдает в сериал :
BALANCE OK +CUSD: 0,"OCTATOK 406.10 p.",64
Так вот никак не могу понять, как он работает, что и куда нужно вставить чтобы он написал последнюю строчку на экране lcd.
В конечном итоге строчка будет отправляться в смс, но пока хотябы так.
библиотеку кажись отсюда брал: https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield
Убрал из кода все лишнее:
#include "SIM900.h" #include <SoftwareSerial.h> int i=0; void setup() { Serial.begin(9600); }//setup void loop() { if (i==0) { gsm.SimpleWriteln("ATD*105*5#"); //БАЛАНС i=300; } gsm.SimpleRead(); }//loopв итоге монитор выдает
Внимание вопрос!
Где почитать как эту строку прочитать и записать в переменную char?
хз, насколько верно, но работает:
#include "SIM900.h" #include <SoftwareSerial.h> int i=0; String currStr = ""; String balance = ""; #include <Wire.h>//айтуси библиотека #include <LiquidCrystal_I2C.h>//библиотека экрана LiquidCrystal_I2C lcd(0x27,16,2);//определяем лсд - адрес, кол-во столбцов, кол-во строк void setup() { lcd.init(); //вкл экран lcd.backlight( ); //вкл подсветка Serial.begin(9600); }//setup void loop() { if (i==0) { gsm.SimpleWriteln("ATD*105*5#"); //БАЛАНС i++; } if (gsm.available()){ char simbol = gsm.read(); // Serial.write(simbol); if ('\r' == simbol) { //если символ перевод каретки if (currStr.startsWith("+CUSD: 0,")) { int b = currStr.indexOf('.p'); balance=currStr.substring(10,b+2); //баланс на сим карте Serial.print(balance); } currStr = ""; } else if ('\n' != simbol) { //если символ НЕ новая строка currStr += String(simbol); } } lcd.setCursor(0, 0); lcd.print (balance); }//loop