Официальный сайт компании Arduino по адресу arduino.cc
Вывод ответа на 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
Что-то я по исходнику не вижу, где идет печать в консоль.