Вывод ответа на AT-запрос на дисплей

molodecblHok
Offline
Зарегистрирован: 10.02.2019

Здравствуйте, проблема следующая - имеется 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;    
} 
}
}

 

molodecblHok
Offline
Зарегистрирован: 10.02.2019

Опечатался, запрос, конечно AT+COPS а не CNETSCAN

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Что-то я по исходнику не вижу, где идет печать в консоль.