Hi there!
I’ve been making some pcbs based around an Arduino Nano and Nano Every and a SIM800l coreboard module.
The code i made works great with an Arduino Nano but not with the new Nano Every.
I tried to find the problem by using the built-in led on the board.
My problem is the serial communication using the SoftwareSerial library.
Here is the code:
#include <SoftwareSerial.h>
SoftwareSerial sim(10, 11);
int _timeout;
String _buffer;
String broj1 = "FIRST PHONE NUMBER GOES HERE";
String broj2 = "SECOND PHONE NUMBER GOES HERE";
String fault = "Imam greska Vlez 1";
String pozar = "Ima pozar Vlez 1";
String fault2 = "Imam greska Vlez 2";
String pozar2 = "Ima pozar Vlez 2";
String faultkraj = "Vo red sum. Vlez 1 ";
String pozarkraj = "Nema pozar Vlez 1";
String faultkraj2 = "Vo red sum. Vlez 2 ";
String pozarkraj2 = "Nema pozar Vlez 2";
bool imasignal3 = 0;
bool imasignal4 = 0;
bool imasignal5 = 0;
bool imasignal6 = 0;
void setup() {
_buffer.reserve(50);
delay(1000);
pinMode(LED_BUILTIN,OUTPUT);
for (int i = 3; i <= 6; i++)
{
pinMode(i, INPUT);
}
delay(10000);
digitalWrite(LED_BUILTIN,HIGH);
sim.begin(9600);
}
void loop() {
if (digitalRead(3) > 0)
{
if (imasignal3 < 1 )
{
digitalWrite(LED_BUILTIN,LOW);
poraka(broj1, fault);
delay(1000);
poraka(broj2, fault);
delay(1000);
imasignal3 = 1;
digitalWrite(LED_BUILTIN,HIGH);
}
}
if (digitalRead(4) > 0)
{
if (imasignal4 < 1 )
{
digitalWrite(LED_BUILTIN,LOW);
poraka(broj1, fault2);
delay(1000);
poraka(broj2, fault2);
delay(1000);
imasignal4 = 1;
digitalWrite(LED_BUILTIN,HIGH);
}
}
////
if (digitalRead(5) > 0)
{
if (imasignal5 < 1 )
{
poraka(broj1, pozar);
delay(1000);
povik(broj1);
delay(1000);
poraka(broj2, pozar);
delay(1000);
povik(broj2);
delay(1000);
imasignal5 = 1;
}
}
if (digitalRead(6) > 0)
{
if (imasignal6 < 1 )
{
poraka(broj1, pozar2);
delay(1000);
povik(broj1);
delay(1000);
poraka(broj2, pozar2);
delay(1000);
povik(broj2);
delay(1000);
imasignal6 = 1;
}
}
//////////////////
if (digitalRead(3) < 1)
{
if (imasignal3 > 0 )
{
poraka(broj1, faultkraj);
delay(1000);
poraka(broj2, faultkraj);
delay(1000);
imasignal3 = 0;
}
}
if (digitalRead(4) < 1)
{
if (imasignal4 > 0 )
{
poraka(broj1, faultkraj2);
delay(1000);
poraka(broj2, faultkraj2);
delay(1000);
imasignal4 = 0;
}
}
////
if (digitalRead(5) < 1)
{
if (imasignal5 > 0 )
{
poraka(broj1, pozarkraj);
delay(1000);
poraka(broj2, pozarkraj);
delay(1000);
imasignal5 = 0;
}
}
if (digitalRead(6) < 1)
{
if (imasignal6 > 0 )
{
poraka(broj1, pozarkraj2);
delay(1000);
poraka(broj2, pozarkraj2);
delay(1000);
imasignal6 = 0;
}
}
if (sim.available() > 0)
Serial.write(sim.read());
delay(2000);
}
/////////////////////////////////////////////////////////////
String _readSerial() {
_timeout = 0;
while (!sim.available() && _timeout < 12000 )
{
delay(13);
_timeout++;
}
if (sim.available()) {
return sim.readString();
}
}
/////////////////////////////////////////////////////////////
void povik(String broj)
{
sim.print (F("ATD"));
sim.print (broj);
sim.print (F(";\r\n"));
_buffer = _readSerial();
Serial.println(_buffer);
delay(10000);
sim.println("ATH");
}
/////////////////////////////////////////////////////////////
void poraka(String broj, String tekst) {
sim.println("AT+CMGF=1");
delay(100);
sim.println("AT+CMGS=\"" + broj + "\"\r");
delay(100);
sim.println(tekst);
delay(100);
sim.println((char)26);
delay(100);
_buffer = _readSerial();
delay(100);
}
/////////////////////////////////////////////////////////////
The copper traces on the pcb are connected correctly and there is a common ground.
The SIM card in the SIM800l module has enough credit to make a call and text.
I tried testing it with an Arduino Nano and it works.
Arduino Nano Every has a problem.
If you can help me please reply to this thread!