arduino leonardo + sim900 shield + lcd 1602 = Fail

shadow_jester
Offline
Зарегистрирован: 23.10.2019

Всем привет, столкнулся с проблемой

1)На UNO и Leonardo по отдельности работает дисплей 1602 с ним проблем нет

2)нашел код амперки и приконнектил gprs shield sim900, он тоже хорошо пошел (без дисплея т.е., leonardo + sim shield)

3)начал дружить это дело вместе, получается треш малость, а именно

не идет питание на сим шилд(внешнее  тоже не помогает)

Думаю дело в ножках(7,8,9) так как нашел пример сей реализации, поменял ноги для экрана :

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); -->LiquidCrystal lcd(12, 10, 4, 5, 6, 7);

т.е. переставил пины просто с 8 на 12 и 9 на 10, тоже не помогает, изображение есть, питание у сим шилда нет, не пойму что не так делаю, неделю вооюю вообще не втыкаю, ни уно ни леонардо никак не хотят бутербродом таким вместе дружить. Ниже код сего безобразия:

//ARDUINO/LEONARDO
#include <Wire.h>
#include <LiquidCrystal.h>
// библиотека для работы с GPRS устройством
#include <GPRS_Shield_Arduino.h>
// Setting the LCD shields pins
//LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
LiquidCrystal lcd(12, 10, 4, 5, 6, 7);

// создаём объект класса GPRS и передаём в него объект Serial1
GPRS gprs(Serial1);
// можно указать дополнительные параметры — пины PK и ST
// по умолчанию: PK = 2, ST = 3
// GPRS gprs(Serial1, 2, 3);

// длина сообщения
#define MESSAGE_LENGTH 160
// номер сообщения в памяти сим-карты
int messageIndex = 0;
// текст сообщения
char message[MESSAGE_LENGTH];
// номер, с которого пришло сообщение
char phone[16];
// дата отправки сообщения
char datetime[24];

void setup() {
  // Initializes and clears the LCD screen
  lcd.begin(16, 2);  
  Serial1.begin(9600);
  // открываем Serial-соединение с GPRS Shield   
  /* 
  while (!Serial1) {  
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Message:");
    lcd.setCursor(0, 1);
    lcd.print("Serial init (!)");
  }
  Serial1.begin(9600);
  */  
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Message:");
  lcd.setCursor(0, 1);
  lcd.print("Serial init OK");
   
  // включаем GPRS шилд
  gprs.powerOn();    

  // проверяем есть ли связь с GPRS устройством
  while (!gprs.init()) {
    // если связи нет, ждём 1 секунду
    // и выводим сообщение об ошибке
    // процесс повторяется в цикле
    // пока не появится ответ от GPRS устройства
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Message:");
    lcd.setCursor(0, 1);
    lcd.print("gprs init (!)");
    
  }
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Message:");
  lcd.setCursor(0, 1);
  lcd.print("gprs init OK");
  delay(1000);
  // выводим сообщение об удачной инициализации GPRS Shield
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Message:");
  lcd.setCursor(0, 1);
  lcd.print("Ready for Use!");
  delay(1000);
}

void loop() { 
  /*
  // Копируем Serial --> Serial1
    if(Serial.available()){ 
      Serial1.write(Serial.read());
    }
  */       
  // если пришло новое сообщение
  if (gprs.ifSMSNow()) {
    // читаем его
    gprs.readSMS(message, phone, datetime);

    // выводим номер, с которого пришло смс
    //Serial.print("From number: ");
    //Serial.println(phone);

    // выводим дату, когда пришло смс
    //Serial.print("Datetime: ");
    //Serial.println(datetime);

    // выводим текст сообщения
    //Serial.print("Recieved Message: ");
    //Serial.println(message);
    lcd.setCursor(0, 0);
    lcd.print("new message:");
    lcd.setCursor(0, 1);
    lcd.print(message);
  }
}

Может кто что подскажет, буду рад )

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Тут скорее всего аппаратное что то.

shadow_jester
Offline
Зарегистрирован: 23.10.2019

скорее всего.но может я чего то недогоняю, по идее сигнал идет на serial который (0,1) хардверный, далее мы берем софтверный после запуска serial1, и после этого питание отваливается по совести,

 

пока не знаю как решить, могу и фоток накидать, если поможет, я какие только варианты не пробоавал, пока вообще безз понятия с чего продолжать

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

shadow_jester пишет:
arduino leonardo + sim900 shield + lcd 1602 = Fail

Правильно ли я понял, что: Леонардо - это обосрамс без sim900 шилда и экрана 1602?

shadow_jester
Offline
Зарегистрирован: 23.10.2019

Нет, леонардо мощная штука и по сравнению с уно имеет ряд преимуществ, но дело не в этом, а в том что при соединении сей конструкции на пинах, так как там два шилда, возникает ошибка
Именно что экран даёт картинку, а питание на сим нет,
если при запуске при инициализации serial передернуть питание шилда сим(а за сим стоит serial1) и включить его(да, так оно отключается), то сама ардуино перезапускается ибо коротыш возникает и все дропается

Могу и торую версию кода скинуть чуть позже, главное решение найти что я не так делаю

shadow_jester
Offline
Зарегистрирован: 23.10.2019

ЕвгенийП пишет:

shadow_jester пишет:
arduino leonardo + sim900 shield + lcd 1602 = Fail

Правильно ли я понял, что: Леонардо - это обосрамс без sim900 шилда и экрана 1602?

Леонардо можно использовать как usb устройство(а-ля клава или прочию приколюхи) в отличие от uno в чистом виде, также леонардо имеет usb интерфейс что упрощает взаимодейстьвие с ней, банально кабель от зарядки и вперед

Но прошивается она через раз будто а то и через 50, своеобразная хреновину, зато сериал портов больше чем на ардуинке, вещь интересная

Кстати на сайте амперки, где примеры брал она и указана как совместимая без танцов с бубном, на уно надо замыкание делать чтобы питалось и вообще работало

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А нафига тогда такие формулы? Я только шилд и экран в правую часть уравнения перенёс.

shadow_jester
Offline
Зарегистрирован: 23.10.2019

Это конечно все хорошо, но лучше по существу помоги человеку проблему решить:)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Простите, я Вам что-то должен? Не припомню.

Да и не умею я такие проблемы по существу решать. Я всё больше по части пофлудить.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Где то при переводе выводов на вывод происходит легкое КЗ - платы не сгорают, но и работать не могут.

shadow_jester
Offline
Зарегистрирован: 23.10.2019

Думал над решением, пришел к следующему, не могу понять в чем проблема с питанием

//ARDUINO/LEONARDO
#include <Wire.h>
#include <LiquidCrystal.h>
// библиотека для работы с GPRS устройством
#include <GPRS_Shield_Arduino.h>
// Setting the LCD shields pins
//LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
LiquidCrystal lcd(12, 10, 4, 5, 6, 7);

// создаём объект класса GPRS и передаём в него объект Serial1
GPRS gprs(Serial1,2,3);
// можно указать дополнительные параметры — пины PK и ST
// по умолчанию: PK = 2, ST = 3
// GPRS gprs(Serial, 2, 3);

// длина сообщения
#define MESSAGE_LENGTH 160
// номер сообщения в памяти сим-карты
int messageIndex = 0;
// текст сообщения
char message[MESSAGE_LENGTH];
// номер, с которого пришло сообщение
char phone[16];
// дата отправки сообщения
char datetime[24];

void setup() {
  // Initializes and clears the LCD screen
  lcd.begin(16, 2);  
  Serial.begin(9600);
  // открываем Serial-соединение с GPRS Shield    
  /*while (!Serial) {  
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Message:");
    lcd.setCursor(0, 1);
    lcd.print("Serial init (!)");
  }*/
  Serial1.begin(9600);
    
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Message:");
  lcd.setCursor(0, 1);
  lcd.print("Serial init OK");
   
  // включаем GPRS шилд
  gprs.powerOn();    

  // проверяем есть ли связь с GPRS устройством
  while (!gprs.init()) {
    // если связи нет, ждём 1 секунду
    // и выводим сообщение об ошибке
    // процесс повторяется в цикле
    // пока не появится ответ от GPRS устройства
    delay(1000);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Message:");
    lcd.setCursor(0, 1);
    lcd.print("gprs init (!)");
  }
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Message:");
  lcd.setCursor(0, 1);
  lcd.print("gprs init OK");
  delay(1000);
  // выводим сообщение об удачной инициализации GPRS Shield
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Message:");
  lcd.setCursor(0, 1);
  lcd.print("Ready for Use!");
  delay(1000);
}

void loop() { 
  // Копируем Serial --> Serial1
   // if(Serial.available()){ 
   //   Serial1.write(Serial.read());
   // }       
  // если пришло новое сообщение
  if (gprs.ifSMSNow()) {
    // читаем его
    gprs.readSMS(message, phone, datetime);

    // выводим номер, с которого пришло смс
    //Serial.print("From number: ");
    //Serial.println(phone);

    // выводим дату, когда пришло смс
    //Serial.print("Datetime: ");
    //Serial.println(datetime);

    // выводим текст сообщения
    //Serial.print("Recieved Message: ");
    //Serial.println(message);
    lcd.setCursor(0, 0);
    lcd.print("new message:");
    lcd.setCursor(0, 1);
    lcd.print(message);
  }
}

аппаратно нашел что если замкнуть 5V который на вывод и D9 питание постоянно идет на сим шилд, но почему то не включается все равно,

 

Для того чтобы не перекликались 7,8,9 - 8 и 9 были заменены на 10 и 12 на шилде экранном

7 без джампера не замкнут ничем

я короче вообще хз как с этим бороться

b707
Offline
Зарегистрирован: 26.05.2017

shadow_jester пишет:

я короче вообще хз как с этим бороться

а если снять шилды и соединить проводами так, чтобы пины не пересекались и не замыкало?

Я вообще эти шилды недолюбливаю - это для детей, кмк

shadow_jester
Offline
Зарегистрирован: 23.10.2019

shadow_jester
Offline
Зарегистрирован: 23.10.2019

По идее так и сделал, так проще было с контактами шалить в последствии