Вывод ответа на AT-запрос на дисплей
- Войдите на сайт для отправки комментариев
Здравствуйте, проблема следующая - имеется SIM900, Arduino Mega, обычный дисплей 2.4 "TFT LCD SHIELD" - все нормально работает в множестве программ, кроме описанной ниже.
Отправляется запрос AT+CNETSCAN, ком-порт стандартно выдает построчно 6 пунктов (мобильные операторы и информация о MSC,MCC и далее), но вот дисплей в ответ на это показывает только четверть из ожидаемого материала и скетч просто продолжает работу, не зависает и не вылетает. Были попытки изменять delay, к успеху не привели. Шрифт роли не играет, помещались и бОльшие объемы данных. Идей нет уже абсолютно никаких, потому что аналогичные программы с запросами о координатах базовых станций, уровне сигнала и так далее работают идеально. Прикрепил изображения для наглядности - что происходит в ком порте (как должно) и что на дисплее. Буду благодарен любым идеям и комментариям.


#include <SPFD5408_Adafruit_GFX.h> // Core graphics library
#include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library
#include <SPFD5408_TouchScreen.h>
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
#define BLACK 0x0000
#define MAGENTA 0xF81F
#define WHITE 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
int switchPin = 22;
int ledPin = 23;
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledOn = 0;
int count=0;
int pin = 24;
volatile int state = LOW;
void setup(void) {
Serial1.begin(9600);
Serial.begin(9600);
tft.reset();
tft.begin(0x9341);
tft.setRotation(0);
uint8_t rotation=1;
tft.fillScreen(BLACK);
tft.setRotation(rotation);
unsigned long testText();
tft.setCursor(0, 0);
tft.setTextColor(WHITE); tft.setTextSize(3);
tft.println("Hello!");
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
boolean debounce(boolean last)
{
boolean current = digitalRead(switchPin);
if (last != current)
{
current = digitalRead(switchPin);
}
return current;
}
void loop(void) {
currentButton = debounce(lastButton);
if (lastButton == LOW && currentButton == HIGH)
{
ledOn = ledOn +1;
}
lastButton = currentButton;
digitalWrite(ledPin, ledOn);
if(ledOn > 2) ledOn = 1;
if (Serial1.available()) {
int inByte = Serial1.read();
Serial.write(inByte);
}
if (Serial.available()) {
int inByte = Serial.read();
Serial1.write(inByte);
}
switch(ledOn){
case 1: {
Serial1.println("AT");
uint8_t rotation=1;
tft.fillScreen(BLACK);
tft.setRotation(rotation);
unsigned long testText();
tft.setCursor(0, 0);
tft.setTextColor(MAGENTA); tft.setTextSize(1);
char s; // переменная временного хранения данных
if (Serial1.available()) // если в буфере есть что-то
{
delay(100); //ждем 1 млс
while (Serial1.available() > 0) // выводим информацию, пока буфер не будет пустой
{
s=Serial1.read(); // получение данных (посимвольно)
tft.print(s); // вывод полученных данных (посимвольно)
delay(10);
}
}
delay(1000);
break;
}
case 2:
{
Serial1.println("AT+COPS=?");
uint8_t rotation=1;
tft.fillScreen(BLACK);
tft.setRotation(rotation);
unsigned long testText();
tft.setCursor(0, 0);
tft.setTextColor(MAGENTA); tft.setTextSize(1);
tft.println("wait 5 min.");
tft.println("All Mobile Operators:");
delay(90000);
char s; // переменная временного хранения данных
if (Serial1.available()) // если в буфере есть что-то
{
delay(100); //ждем 1 млс
while (Serial1.available() > 0) // выводим информацию, пока буфер не будет пустой
{delay(100);
s=Serial1.read(); // получение данных (посимвольно)
delay(100);
tft.print(s); // вывод полученных данных (посимвольно)
delay(100);
}
delay(3000);
}
break;
}
}
}
Опечатался, запрос, конечно AT+COPS а не CNETSCAN
Что-то я по исходнику не вижу, где идет печать в консоль.