Не могу подключить экран к связке Arduino Uno + Gsm Shield + температурный датчик Gsm Shield с ардуино и температурным датчиком работает корректно, сам по себе экран тоже. При подключении к любым пинам с 3-12 не работает показывает "кашу" на экране. Можно как то подключить экран или все пины заняты GSM Shield Код (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; }
Обычно GSM Shield занимает пинов: 2 пина на SoftwareSerial (7 и 8, если память не изменяет) или 2 пина Serial (0,1) в зависимости от положения перемычек (в данном случае, судя по коду, первый вариант) и еще пин управления питанием (7 или 9, точно не помню). Вроде больше ему ничего не надо. А температурный датчик и экран вместе работают?
температурный датчик и экран вместе работают корректно, только что проверил. как это сделать ? докупить какой то модуль ? прочитал про I2C. можно как то решить вопрос по другому
при подключении температурного датчика к любому пину кроме 4 в мониторе идут сообщения что модуль SIM900 не найдет, измените скорость на 9600. изменения ни к чему хорошему не приводят