Imam problem sledeći:
Uradio sam sms vagu za pčele sa sim900 modulom i hteo bih da isto sve uradim to al sa sim800l v2.0. Namontiram to ali kada učitam cod koji sam uradio ne funkcioniše mi al neznam u čemu je problem. Ne funkcioniše u smislu kada pošaljem poruku.
,, Izmeri'' ne šaljemi podatke sa vage. A sa sim900 mi sve radi kao što trba. Evo i coda:
Kod: Označite sve
#include <SoftwareSerial.h>
#include <HX711_ADC.h>
#include <SimpleDHT.h>
#include <Wire.h>
#include <TimeLib.h> // Time by michael margolis
#include <DS1307RTC.h> // DS1307RTC by michael margolis
#include <RTClib.h> // RTClib by adafruit
//#define KORISTI_50K_UMESTO_33K 1 /* obrises te duple zagrade na pocetku pre tarabe ako koristis 50k otpornik umesto 33k */
//#define DRUGI_NACIN_MERENJA_NAPONA 1 /* obrises te duple zagrade na pocetku pre tarabe da vidis oce li biti preciznije merenje napona ovako. ako ne vratis nazad te duple zagrade */
#define dht DHT22
#define pinDHT22 5
#define NEWLINE String("\n")
SimpleDHT22 dht22;
HX711_ADC LoadCell(2, 3);
SoftwareSerial SIM900(7, 8);
float weightGrams = 0.0;
float calibrationFactor = -22.0;
float voltage = 0.0;
float temperature = 0.0;
float humidity = 0.0;
int err = SimpleDHTErrSuccess;
String info = String("");
float ProslaTezina = 0.0;
float RazlikaTezine = 0.0;
String TrenutnoVremeText;
String VremeProslePorukeText;
tmElements_t TrenutnoVreme;
tmElements_t VremeProslePoruke;
time_t TrenutnoVremeUnix;
time_t VremeProslePorukeUnix;
DateTime TrenutnoVremeDT;
DateTime VremeProslePorukeDT;
TimeSpan RazlikaVremena;
void setup()
{
Serial.begin(9600);
LoadCell.begin();
LoadCell.start(2000);
LoadCell.setCalFactor(calibrationFactor);
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(5000);
SIM900.begin(19200);
delay(20000);
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
}
void loop()
{
LoadCell.update();
weightGrams = LoadCell.getData();
calibrationFactor = LoadCell.getCalFactor();
#ifdef DRUGI_NACIN_MERENJA_NAPONA
voltage = (analogRead(A1) / 1023.0) * readVcc;
#else
voltage = (analogRead(A1) / 1023.0) * 5.0;
#endif
#ifdef KORISTI_50K_UMESTO_33K
voltage = voltage * 3;
#else
voltage = voltage * 4.03;
#endif
if ((err = dht22.read2(pinDHT22, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess)
{
Serial.print("Neuspesno ocitavanje DHT22 senzora, greska = ");
Serial.println(err);
}
if (RTC.read(TrenutnoVreme)) {
TrenutnoVremeText = timeElementsToString(TrenutnoVreme);
TrenutnoVremeUnix = makeTime(TrenutnoVreme);
TrenutnoVremeDT = DateTime(TrenutnoVremeUnix);
}
else
{
TrenutnoVremeText = String("Greska");
}
RazlikaVremena = TrenutnoVremeDT - VremeProslePorukeDT;
RazlikaTezine = weightGrams - ProslaTezina;
info = String("");
info += String(" -PODACI SA SMS VAGE- ") + NEWLINE;
info += String("Tezina: ") + String(weightGrams) + String("g") + NEWLINE;
info += String("Prosla tezina: ") + String(ProslaTezina) + String("g") + NEWLINE;
info += String("Razlika tezine: ") + String(ProslaTezina) + String("g") + NEWLINE;
info += String("Faktor kalibracije: ") + String(calibrationFactor, 2) + NEWLINE;
info += String("Temperatura: ") + String(temperature, 2) + String("*C") + NEWLINE;
info += String("Vlaznost vazduha: ") + String(humidity, 2) + String("%") + NEWLINE;
info += String("Napon: ") + String(voltage, 2) + String("V") + NEWLINE;
info += String("Vreme slanja ove poruke: ") + TrenutnoVremeText + NEWLINE;
info += String("Vreme slanja prosle poruke: ") + VremeProslePorukeText + NEWLINE;
info += String("Razlika vremena izmedju poruka: ") + timeSpanToString(RazlikaVremena);
if (SIM900.available() > 0)
{
String textMessage = SIM900.readString();
if (textMessage.indexOf("Izmeri") >= 0)
{
if (RTC.read(VremeProslePoruke)) {
VremeProslePorukeText += timeElementsToString(VremeProslePoruke);
VremeProslePorukeUnix = makeTime(VremeProslePoruke);
VremeProslePorukeDT = DateTime(VremeProslePorukeUnix);
}
else
{
VremeProslePorukeText += String("Greska");
}
ProslaTezina = weightGrams;
sendSMS(info);
}
}
}
void sendSMS(String message)
{
SIM900.print("AT+CMGF=1\r");
delay(100);
SIM900.println("AT + CMGS = \"+380000000\""); // Upisujemo broj na koji9 saljemo sms vrednost
delay(100);
SIM900.println(message);
delay(100);
SIM900.println((char)26);
delay(100);
SIM900.println();
delay(5000);
}
long readVcc() {
// Read 1.1V reference against AVcc
// set the reference to Vcc and the measurement to the internal 1.1V reference
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0);
#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
ADMUX = _BV(MUX3) | _BV(MUX2);
#else
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#endif
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Start conversion
while (bit_is_set(ADCSRA,ADSC)); // measuringu