Не могу подключить экран к Arduino Uno + Gsm Shield

Тема в разделе "Arduino & Shields", создана пользователем et2000, 16 авг 2014.

  1. et2000

    et2000 Нуб

    Не могу подключить экран к связке Arduino Uno + Gsm Shield + температурный датчик
    Gsm Shield с ардуино и температурным датчиком работает корректно, сам по себе экран тоже. При подключении к любым пинам с 3-12 не работает показывает "кашу" на экране. Можно как то подключить экран или все пины заняты GSM Shield

    IMG_1497.jpg IMG_1498.jpg

    Код (Text):
    #include<stdlib.h>
    #include "floattostring.h"
    #include <OneWire.h>
    #include "SIM900.h"
    #include <SoftwareSerial.h>
    #include "sms.h"
    #include <IIC_without_ACK.h>
    #include "oledfont.c"  //codetab
    SMSGSM sms;

    #define OLED_SDA 9
    #define OLED_SCL 10

    IIC_without_ACK lucky(OLED_SDA, OLED_SCL);//9 -- sda,10 -- scl

    OneWire ds (4); // on pin 4
    int numdata;
    boolean started=false;
    char smsbuffer[500];
    char number[20];
    float celsius, fahrenheit;
    char str[25];
    int error;
    String s1;
    char pos_sms_rx;  //Received SMS position
    byte type_sms=SMS_UNREAD;      //Type of SMS
    byte i;
    byte present = 0;
    byte type_s;
    byte data[12];
    byte addr[8];
    int m;

    void setup (void) {
    lucky.Initial();
    delay(10);
    lucky.Fill_Screen(0x00);
    lucky.Char_F6x8(0,0,"test");

      Serial.begin (9600);
      if (gsm.begin(2400)){
        Serial.println("\nstatus=READY");
        //started=true;
      }
      else Serial.println("\nstatus=IDLE");
    }

    void loop (void) {
    lucky.Fill_Screen(0x00);
    lucky.Char_F6x8(0,0,"TEST");
    delay(1000);
    if (! ds.search (addr)) {
    ds.reset_search ();
    delay (250);
    return;
    }

    ds.reset ();
    ds.select (addr);
    ds.write (0x44,1); // start conversion, with parasite power on at the end

    delay (1000); // maybe 750ms is enough, maybe not
    // we might do a ds.depower () here, but the reset will take care of it.

    present = ds.reset ();
    ds.select (addr);
    ds.write (0xBE); // Read Scratchpad

    for (i = 0; i < 9; i++) { // we need 9 bytes
    data[i] = ds.read ();
    }

    // convert the data to actual temperature

    unsigned int raw = (data[1] << 8) | data[0];
    if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
    // count remain gives full 12 bit resolution
    raw = (raw & 0xFFF0) + 12-data[6];
    }
    } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
    }
    celsius = (float)raw / 16.0;
    Serial.print ("Temperature: ");
    Serial.print (celsius);
    Serial.println (" C");


    pos_sms_rx=sms.IsSMSPresent(SMS_UNREAD);
    Serial.println((int)pos_sms_rx);
      if((int)pos_sms_rx>0&&(int)pos_sms_rx<=20){
        Serial.print("NUOVO MESSAGGIO, POS=");
        Serial.println((int)pos_sms_rx);
                sms.GetSMS((int)pos_sms_rx,number,smsbuffer,1000);
              error=0;
              error=stringToNumber(smsbuffer);          
    Serial.print("number: ");
    Serial.print(number);
    Serial.print("message: ");
    Serial.print(smsbuffer);
    Serial.print("error: ");
    Serial.print(error);
    char smsbuffer[] = "";
         
    for (int i=0; i<=(int)pos_sms_rx; i++)
    sms.DeleteSMS(i);
    }
    if (error==1)
    {
      sms.SendSMS("+7XXXXXXXXXX", floatToString(str,celsius,2));
      error=0;
    }
          delay(1000);
          if (celsius > 33) sms.SendSMS("+7XXXXXXXXXX", floatToString(str,celsius,2));

    }

    //Функция преобразовангия STRING в INT
    int stringToNumber(String thisString) {
      int i, value = 0, length;
      length = thisString.length();
      for(i=0; i<length; i++) {
        value = (10*value) + thisString.charAt(i)-(int) '0';;
      }
      return value;
    }
     
  2. geher

    geher Гуру

    Обычно GSM Shield занимает пинов:
    2 пина на SoftwareSerial (7 и 8, если память не изменяет) или 2 пина Serial (0,1) в зависимости от положения перемычек (в данном случае, судя по коду, первый вариант) и еще пин управления питанием (7 или 9, точно не помню). Вроде больше ему ничего не надо.

    А температурный датчик и экран вместе работают?
     
  3. наверно экран надо повесить на железный I2C
     
  4. et2000

    et2000 Нуб

    температурный датчик и экран вместе работают корректно, только что проверил.

    как это сделать ? докупить какой то модуль ?

    прочитал про I2C. можно как то решить вопрос по другому
     
  5. et2000

    et2000 Нуб

    при подключении температурного датчика к любому пину кроме 4 в мониторе идут сообщения что модуль SIM900 не найдет, измените скорость на 9600. изменения ни к чему хорошему не приводят
     
  6. cheloveki

    cheloveki Нуб

    Нужно соединить rx и tx перемычками на 18 и 19 pin.