Giter Club home page Giter Club logo

iridiumsbd's People

Contributors

mikalhart avatar mikalhart-intel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iridiumsbd's Issues

how long does a transmission take?

I am working on an application where a floating buoys sends some iridium messages. I think that it may help to transmit messages when the buoy is on the "top of a wave" as this will give better view of the sky.

My question is double:

  • is there any latency between the "send message" command and the actual sending of the message?
  • how long does the full message sending and receiving back take?

Protocol Error: From waitForATResponse().

I have developed code using 5V pro trinkets that was able to send and receive data. I switched over to 3V Trinkets and am using the 3V and ground pin on the RockBlock.

Switching to the 3V trinket has caused my modem to give me a protocol error when trying to send messages.

I have no problem turning on the modem and getting signal quality just sending a message. I am in a spot where I have been able to send messages in the past.

Upon looking into the library further I notice that waitForATResponse() is being returned false giving me the protocol error. Im not exactly sure why this function is being returned false, but it only started happening when I switched to the 3 volt trinket. I have tried the examples and they give the same protocol error when trying to send a message.

I will test with another 5v microprocessor when one becomes available. Has anyone else had similar issues?

Iriduim SBD code problem

Hi mikalhart,
I am trying to use the RockBlock wiht my arduino mega. I have used your codes and made sure everything was set up right but the only thing I am getting back is

AT

<<AT

and thats it. Do you have any idea how to fix this so I can transmit my data?

Ambiguious function call compiling for teensy 3.1

D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.cpp: In member function 'int IridiumSBD::internalSendReceiveSBD(const char_, const uint8_t_, size_t, uint8_t_, size_t_)':
D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.cpp:259:25: error: call of overloaded 'console(size_t&)' is ambiguous
D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.cpp:259:25: note: candidates are:
In file included from D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.cpp:25:0:
D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.h:149:9: note: void IridiumSBD::console(FlashString)
D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.h:149:9: note: no known conversion for argument 1 from 'size_t {aka unsigned int}' to 'FlashString {aka const FlashStringHelper}'
D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.h:150:9: note: void IridiumSBD::console(const char
)
D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.h:150:9: note: no known conversion for argument 1 from 'size_t {aka unsigned int}' to 'const char*'
D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.h:151:9: note: void IridiumSBD::console(uint16_t)
D:\vagabond\vendor\arduino\libraries\IridiumSBD\IridiumSBD.h:152:9: note: void IridiumSBD::console(char)

ESP32 + RockBLOCK

Has anyone managed to get the RockBLOCK working on an ESP32?
Have tried several variants of the ESP32 and all seem to crash.

Receiving message to the modem

Having trouble reliably receiving messages.
My data is mainly going out-bound but i check if there is incoming message to act on.
So far i get some messages, this is a problem.

A successful receive debug output...
+SBDIX: 0, 10, 1, 1, 11, 0

OK
SBDIX MO code: 0
SBDIX success!
Incoming message!

AT+SBDRB
Waiting for response AT+SBDRB
<< .AT+SBDRB.[Binary size:11]............[csum:1176]Waiting for response OK

A failed one with a message wait (i thought)
+SBDIX: 0, 11, 1, 2, 11, 0

OK
SBDIX MO code: 0
SBDIX success!
Stopping Modem

Next success...
+SBDIX: 0, 13, 1, 3, 11, 0

OK
SBDIX MO code: 0
SBDIX success!
Incoming message!

AT+SBDRB

These three messages, the failed one was using
int sendReceiveSBDText(const char *message, uint8_t *rxBuffer, size_t &rxBufferSize);
with message set to a string, whereas the other 2 did happen to be message set to NULL.
And just tested it with a text message and it worked.

Any ideas what is wrong

Thanks

examples cause arduino mega r3 to loop unless #define DIAGNOSTICS true

this is very puzzling. I bought a Rockblock, arduino mega r3 and a level shifting board from Sparkfun. I am try to use the example code in the IridiumSBD libraries, BasicSend, SendReceive and all I get in the serial monitor window (set at 115200, CR/LF) is random garbage. If a change the #define DIAGNOSTICS from false to true everything runs ok and I see output in the serial window.

arduino library was downloaded from here: https://github.com/mikalhart/IridiumSBD
this is V2 that was released around November 2017

I added a delay line in SETUP and a few lines like this:
Serial.println(F("RockBlock Test")); in the start of setup and then this line just before the modem.begin
Serial.println("Starting modem...");
err = modem.begin();

it appears it is starting up but somehow just gets stuck inmodem.begin and cause the program to reset over and over and never reaches the LOOP function, but I have no idea why

in the console window I see the "rockblock test" is coming from setup then I see "Sta" and it repeats that sequence over and over.

I think "Sta" is part of this string in setup: Serial.println("Starting modem...");
It does not appear to ever get the the loop function and never reaches the last couple of lines in setup which prints out my menu in setup()

very strange....

I am using IDE 1.8.1 the Serial3 with no changes in the sample code. For power I am using the USB cable from the PC for the arduino mega and for the rockblock power pins a 5v wall adapter 2000 ma. Since everything works ok when I set #define DIAGNOSTICS to true I feel the wiring/level shifting is ok.

any thoughts/comments greatly appreciated !

Does ISBD_SUCCESS means actually "success"?

Hi, I am testing the module to send messages and sometimes I noticed that even when I get success, I don't get the message on the rockblock admin panel... (there is no Credit consumed either)

Feature request: Clear MO/MT buffers using AT+SBDD

Hi Mikal,
Not an issue as such - more a feature request for the next release:
Could you add a function to clear the MO/MT/both buffers using AT+SBDD0/1/2 ?
The reason I ask is that:
If I send an MO message using sendSBDText
then send an empty message to check for an MT reply using sendReceiveSBDText(NULL, sbdBuffer, bufferSize)
the 9603N automatically resends the old text message stored in the MO buffer!
I'm using a messy workaround in my code to force the clear using ssIridium.println("AT+SBDD0"); and then discarding the reply.
It would be great to have this incorporated properly into the library.
Sincere thanks,
Paul

One Shot SBDIX

Hey Mikal,

It would be great if there was a mode or argument passed, that would allow for a single +SBDIX call and return.

My application requires the up most battery life so keeping the modem awake while we wait between +SBDIX calls is not efficient.

I have already done this in my fork with a "one shot mode"

Case Sensitivity Conflicts between time.h & Time.h

Hi there,

I discovered today, when migrating my code over to version 2.0 of the IridiumSBD library, that if you have Paul Stoffregen's Time library installed, you may encounter problems when attempting to compile your code while using case sensitive filesystems like macOS.

This appears to be due to the fact the Paul has a Time.h file included in his library that conflicts with the POSIX time.h library included by IridiumSBD.cpp. It seems users of the RTCZero library have also experienced this problem. Since Paul will be keeping this file to preserve compatibility with older versions of Arduino, the solution appears to be to simply delete the Time.h file from your /libraries/Time/ folder.

I'm wondering if it may be worthwhile to implement some form of check that the IridiumSBD library could perform to ensure it is compiling with the correct time.h?

For reference, the error messages I received when attempting to compile with Paul's Time.h file present in my library are:

/Users/adam/Documents/Arduino/libraries/IridiumSBD-2.0/src/IridiumSBD.cpp: In member function 'int IridiumSBD::getSystemTime(tm&)':
/Users/adam/Documents/Arduino/libraries/IridiumSBD-2.0/src/IridiumSBD.cpp:203:14: error: aggregate 'tm epoch_start' has incomplete type and cannot be defined
    struct tm epoch_start;
              ^
/Users/adam/Documents/Arduino/libraries/IridiumSBD-2.0/src/IridiumSBD.cpp:223:43: error: 'mktime' was not declared in this scope
    time_t epoch_time = mktime(&epoch_start);
                                           ^
/Users/adam/Documents/Arduino/libraries/IridiumSBD-2.0/src/IridiumSBD.cpp:225:30: error: 'localtime' was not declared in this scope
    memcpy(&tm, localtime(&now), sizeof tm);
                              ^
/Users/adam/Documents/Arduino/libraries/IridiumSBD-2.0/src/IridiumSBD.cpp:225:40: error: invalid application of 'sizeof' to incomplete type 'tm'
    memcpy(&tm, localtime(&now), sizeof tm);
                                        ^

Cheers,
Adam

License

Hi there,

I would like to use this library for an open-source project... did you exclude a license file on purpose? As-is, it's not legally advisable for anyone to use it.

May I suggest GPLv2 or LGPL?

how to clear the buffers ? AT+SBDD

I think this is the same issue that PaulZC reporton on 2/4/2018. the problem I am having is when I send a new message e.g. err = modem.sendSBDText(indata); it is not clearing something in a buffer somewhere. So later if I try and receive message it first sends a message that I had sent earlier in the day, then I receive a new message. I contact RockBlock and they suggested to use the function AT+SBDD but I have no idea how to implement this :( Would it be possible to modify the modem.sendSBDText routine to clear the buffer or add another function to do this ? If I power down the device and power back up and try to receive a new message the outbound buffer is clear so something must be left in memory somewhere in the rockblock ? thanks !

RockBLOCK+ modem not detected

Hello, I am trying to use the BasicSend for sending a message to a RockBLOCK+ unit from an Arduino Mega 2560.
I have tried with several pins, such as Serial2 and Serial3 as well as using software serial on pins 10, 11, 12 and 13.

All i get is:

Starting modem...
Calling internal begin
Powering on modem...

AT
Waiting for response OK

<< >> ATT
Waiting for response OK

I am supplying the RB+ with 12V, and i can see it oscillating between 0 mA and 219mA, every second or so.
I have tried to change up the RX and TX, as mentioned in earlier issues. I have the Sleep Pin set to Pin 4.
At this point I am out of ideas. I am quite inexperienced, so I have probably overlooked something. Please help.

Modem doesn't want to start

Modem was starting, disconnected the device, now the code wont go pass the begin statement
with the follow output

Starting Modem -> Starting modem library... Calling internalBegin
Powering on modem...
..>> AT
Waiting for response OK

<< ..AT
OK
..>> ATE1
Waiting for response OK

<< ..............................................................Powering off modem...

**** Modem failed: error -> Protocol Error

where should i look!

internalMSSTMWorkaround() incorrectly interprets 9602 response

The 9602 response to an AT-MSSTM call is either of the following:

Valid Response: "---MSSTM: XXXXXXXX" where XXXXXXXX is an eight---digit hexadecimal number.
Invalid Response: "---MSSTM: no network service"

Line 403 of IridiumSBD.cpp is tasked with determining whether the response was valid:

okToProceed = isdigit(msstmResponseBuf[0]);

This fails when the first digit of the 8 digit number is in the set [A-Fa-f]. Recommend changing this line to the following:

okToProceed = isxdigit(msstmResponseBuf[0]);

esp8266 crashing

Here is my code (platformio):

#include <Arduino.h>
#include <SoftwareSerial.h>
#include "IridiumSBD.h"

/* receive / transmit / invert logic / buffersize*/
SoftwareSerial swSer(14, 12, false, 256);

// Declare the IridiumSBD object
IridiumSBD modem(swSer);

void setup()
{
	Serial.begin(19200);
	Serial.println("Starting setup...");

	int signalQuality = -1;
        int err;

  // Start the serial port connected to the satellite modem
	Serial.println("Starting satellite serial connection (swSer)");
	swSer.begin(19200);

  // Begin satellite modem operation
  Serial.println("Starting modem...");
  err = modem.begin();
  Serial.print("modem: ");
  Serial.println(err);

  if (err != ISBD_SUCCESS)
  {
    Serial.print("Begin failed: error ");
    Serial.println(err);
    if (err == ISBD_NO_MODEM_DETECTED)
      Serial.println("No modem detected: check wiring.");
    return;
  }
}

void loop() {
}

A simple test to see if the library runs - nothing wired to the esp (using adafruit huzzah), esp is known good, but when I run this code on it, I get constant reboots after calling modem.begin().

Sample output:

X�␘~�H�Starting setup...
Starting satellite serial connection (swSer)
Starting modem...
�X
X�B�
X�␘~�(�Starting setup...
Starting satellite serial connection (swSer)
Starting modem...
FX
X�B�
X�␘~�"�Starting setup...
Starting satellite serial connection (swSer)
Starting modem...
F8

X�B�
X�␘~�H�Starting setup...
Starting satellite serial connection (swSer)
Starting modem...

Expected output would be a detection that there is no modem detected, I would think, instead of rebooting.

Can you help me understand what I'm doing wrong?

Iridium is not responding to code

I have connected my Iridium SBD modem with Arduino Uno through 7,8 pins. In Basic send code, I have changed according to comments as SoftwareSerial. My iridium modem is working fine while sending AT commands to it but there is no response for this code. Kindly guide me.

Sleep Pin (on/off) changes for RockBLOCK 9603 v3.F

Due to supply-chain shortage, some components in RockBLOCK 9603 3.F have been replaced with alternatives. This does not adversely affect the normal operation of the device.

Because of these component changes, 3.F now includes a transistor circuit on the On/Off control pin to ensure correct power up at all supply voltages. The On/Off control pin should not be clamped below the RockBLOCK supply voltage and should be disconnected/left floating to turn on.

Potential issue:
This change has introduced an issue when interfacing directly to a 3V3 microcontroller pin while supplying the RB with 5V. The new On/Off circuitry now provides a high impedance (1Meg resistor) to the super cap voltage, equal to the supplied voltage. This may exceed the maximum IO voltage of the micro.

If the RB was supplied by 5V, the connecting device should also be 5V tolerant. If not, it is recommended to use an interfacing circuit, eg MOSFET, transistor, relay, etc. to connect to a microcontroller.

https://docs.rockblock.rock7.com/docs/power-supply#onoff-control

import guards

I got an import issue. The header file would benefit from import guards.

GCC compiler error when trying to compile the example sketch 'PassThru'

Arduino: 1.8.6 (Windows 10), TD: 1.44, Board: "Arduino/Genuino Uno"

lto1.exe: internal compiler error: in lto_output_varpool_node, at lto-cgraph.c:624

Please submit a full bug report,

with preprocessed source if appropriate.

See http://gcc.gnu.org/bugs.html for instructions.

lto-wrapper.exe: fatal error: C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-gcc returned 1 exit status

compilation terminated.

c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/bin/ld.exe: error: lto-wrapper failed

collect2.exe: error: ld returned 1 exit status

exit status 1
Error compiling for board Arduino/Genuino Uno.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

how can i send the file form?

When you do Iridium satellite communication by sbdsend in the code above,i can only receive the first line above.

The above is a simple example, and to be exact, I want to call up the csv file stored on the sd card and save it in variable a and see it on my computer using Iridium satellite communication, but I can't receive the first line whenever I communicate. Can't we get an entry from iridium communication? Or I'd appreciate it if you could give me an answer.
There is a code below.

`#include <IridiumSBD.h>
#define IridiumSerial Serial3
#define DIAGNOSTICS false // Change this to see diagnostics
#include <SD.h>
#include <SPI.h>

File myFile;
int CS_PIN = 53 ; // CS pin
String inputString;
int count = 1;
int i;
// Declare the IridiumSBD object
IridiumSBD modem(IridiumSerial);

void initializeSD() {
Serial.println("Initializing SD card...");
pinMode(CS_PIN, OUTPUT);
if (SD.begin()) {
Serial.println("SD card is ready to use.");

} else {
Serial.println("SD card initialization failed");
return;
}
} // =============================

void Read_Data() {
myFile = SD.open("Sample.txt");
if (myFile) {

while (myFile.available()) {
 char Data = (char)myFile.read() ;
 inputString += Data; 
 count++;
// read file until no more
}
Serial.println("save OK!");
myFile.close();   // close the file:

} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}
} // =================

void setup()
{
int signalQuality = -1;
int err;

// Start the console serial port
Serial.begin(115200);
while (!Serial);

pinMode(CS_PIN, OUTPUT);
initializeSD(); // 1 단계
Read_Data() ; // 2 단계

i=count;

char h[i] = {0};
inputString.toCharArray(h,i);

Serial.println(h);

// Start the serial port connected to the satellite modem
IridiumSerial.begin(19200);

// Begin satellite modem operation
Serial.println("Starting modem...");
err = modem.begin();
if (err != ISBD_SUCCESS)
{
Serial.print("Begin failed: error ");
Serial.println(err);
if (err == ISBD_NO_MODEM_DETECTED)
Serial.println("No modem detected: check wiring.");
return;
}

// Example: Print the firmware revision
char version[12];
err = modem.getFirmwareVersion(version, sizeof(version));
if (err != ISBD_SUCCESS)
{
Serial.print("FirmwareVersion failed: error ");
Serial.println(err);
return;
}
Serial.print("Firmware Version is ");
Serial.print(version);
Serial.println(".");

// Example: Test the signal quality.
// This returns a number between 0 and 5.
// 2 or better is preferred.
err = modem.getSignalQuality(signalQuality);
if (err != ISBD_SUCCESS)
{
Serial.print("SignalQuality failed: error ");
Serial.println(err);
return;
}

Serial.print("On a scale of 0 to 5, signal quality is currently ");
Serial.print(signalQuality);
Serial.println(".");

// Send the message
Serial.print("Trying to send the message. This might take several minutes.\r\n");
err = modem.sendSBDText(h);
if (err != ISBD_SUCCESS)
{
Serial.print("sendSBDText failed: error ");
Serial.println(err);
if (err == ISBD_SENDRECEIVE_TIMEOUT)
Serial.println("Try again with a better view of the sky.");
}

else
{
Serial.println("Hey, it worked!");
}
}

void loop()
{
}

#if DIAGNOSTICS
void ISBDConsoleCallback(IridiumSBD *device, char c)
{
Serial.write(c);
}

void ISBDDiagsCallback(IridiumSBD *device, char c)
{
Serial.write(c);
}
#endif
`

Compiling for Mbed

I am looking to compile this for the Mbed ARM platform. Outside the send/receive functions, are there any other Arduino specific components to this that would pose a problem migrating?

Has anyone tried to compile this for Mbed already?

Error compling Example from "iridium SBD v2"

Fail compling examples for Arduino MEGA.
showing the following error:

"
Arduino: 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

lto1.exe: internal compiler error: in lto_output_varpool_node, at lto-cgraph.c:624

Please submit a full bug report,

with preprocessed source if appropriate.

See http://gcc.gnu.org/bugs.html for instructions.

lto-wrapper.exe: fatal error: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware\tools\avr/bin/avr-gcc returned 1 exit status

compilation terminated.

c:/program files/windowsapps/arduinollc.arduinoide_1.8.21.0_x86__mdqgnx93n4wtt/hardware/tools/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/bin/ld.exe: error: lto-wrapper failed

collect2.exe: error: ld returned 1 exit status

exit status 1
Error compiling for board Arduino/Genuino Mega or Mega 2560.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
"

Callbacks not handled correctly when DIAGNOSTICS not defined.

Due to a misunderstanding about how the "weak" attribute works, on certain platforms, sketches that do not have the callback functions defined crash.

Specifically, having a "weak" function declared and then not implementing it (weak or strong) anywhere, does not allow you to write code like this:

   if (ISBDConsoleCallback != NULL)
   {
         ISBDConsoleCallback(this, c);
   }

getWaitingMessageCount returning wrong int

I know there is a message waiting however the following return 0
int nummessages = modem.getWaitingMessageCount();
Serial.println("Message count from satellite: " + String(nummessages));

Diagnostic data stream...

AT+SBDIX
Waiting for response OK

<< ..AT+SBDIX................
+SBDIX: 0, 0, 1, 1, 11, 0

OK
SBDIX MO code: 0
SBDIX success!
Message count from satellite: 0

IridiumSBD code problem with Arduino Mega2560

I just connected my new Rockblock to an arduino Mega, and uploaded the example code SendReceive. I have the tx and Rx on 18 and 19, respectively, using 5 volts from Arduino (measured it with VOM), and sleep line either pin 10 or 5 volts steady. The code compiles, In the serial monitor I get “Waiting for Response OK” messages, then after about 9 or 10 messages (I think) I finally receive the message: ” <<NO modem Detected. Powering off RockBlOCK…!, SignalQuality failed:error 10"
I tried two different MEGA2560 boards with same results. This is about as simple as could be. Any ideas? I had this set up with full sky view and antenna facing the sky. Is there some way I can do a simple querry of the RockBlock to see if I can get any response?
As in my post above, there seems to be problems with the Arduino MEGA2560 board and this code. I have been talking with the support staff at RockBlock and they acknowledged that another user has had difficulty also. They are trying to recall the solution, and I have forwarded them the complete configuration I am using. They passed the problem to a technical guy, and hopefully he will be able to help. I can see the MEGA2560 transmitting, but we never get a response from RockBlock. We tested the RockBlock by interfacing to it with a usb cable and sending it AT commands using a serial terminal (TeraTerm). It responded correctly to those commands in that configuration. If anyone else has any ideas or experience like this, I’d appreciate receiving them, and so would RockBlock support, I’m sure.

These two posts have been placed at the end of the IridiumSBD code description. Could you fiddle with these questions? They are my present day puzzle box. I hope to make a presentation on Monday of this technology to my brother, and five of my sons who work together in a company I founded and they have developed. Thank you for fiddling with this stuff.

Protocol Error

Using a Rockblock 9603 with a ItsyBitsy M4 powered by 5V supply. it all appears to be working but I constantly get 'Protocol Error'
Debug diagnostics of the transmission below:

AT+SBDWT
Waiting for response READY

<< ..AT+SBDWT
READY

Test message from Test code

Waiting for response 0

OK

<< ..Test message from Test code
0

OK

AT-MSSTM
Waiting for response OK

<< ..AT-MSSTM
-MSSTM: 712a957d

OK

AT+SBDIX
Waiting for response OK

<< ..AT+SBDIX............................................................Add to Failures
Tried to send message but returned error: Protocol Error
Tried to send message but returned error: Protocol Error
Upto retry: 4

Have not been able to send a message at all from this setup.
Have sent a message or two from another setup using a Adafruit Feather M0, do get a similar error.

Error return codes doesn't work well

Hello, I have an issue that the code acts weird when sending different data types, in this case, string and char using my RockBLOCK Mk2 9602 module. So my project is sending data from the SD CARD file, the idea is to read the file using iteration (for loop) and save it to variable char. It will try to send data until it succeeds. When I send string data ex. ("Test"), the Arduino will return 0/ISBD_SUCCESS to tell us that the server has already received the data. When I Send char data, the server receives the same data as on serial monitor, and Arduino sends 0 value to. But, my code act like it failed and tries to send data again and again. I don't know why, just like what I said, it acts weird.

Here is the "Important" part of the code.

char readSDC[162]; //this is variable I use to storage the value 

//Read file from SD Card, and storage it to readSDC variable
if (myFile)
        {Serial.println(F("start reading SD Card.txt"));
        while(myFile.available()) 
          { 
        for(int i=0; i<=160; i++){
        readSDC[i]+= myFile.read();
        }
        delay(1000);
        Serial.println(readSDC);
        delay(1000);}
}

//Sending Massage block Program
    Serial.println("Try to find signal");
     err = isbd.getSignalQuality(signalQuality);
      if(err!= ISBD_SUCCESS){
       Serial.print("Signal Quality failed: error");
       Serial.println(err);
       return;
          }
      delay(1000);
      Serial.print("Signal around here is ");
      Serial.println(signalQuality);
            
       //Start Sending Message
       Serial.println(F("Start Sending Message"));
       err = isbd.sendSBDText(readSDC);
       delay(2000);
       if(err =! ISBD_SUCCESS){
          Serial.println("Failed sending message");
          Serial.println(err);
            if(err == 0){
              Serial.println("Success sending message");
                  }
            if(err   == ISBD_SENDRECEIVE_TIMEOUT){
            Serial.println("Try again with a better view of the sky");
            return;
                  }
      }else{
         Serial.println("Success sending message");
}

Just like I said, it works well both Arduino Serial Monitor and Server when I put string on err = isbd.sendSBDText("Test");, but when I use my char variable, it acts like what I said above. Any solution?

ESP32 + Rockblock

Just a heads up if anyone is using an ESP32 and having issues with the examples. Change the DIAGNOSTICS lines to this and it all should work.

#if DIAGNOSTICS
void ISBDConsoleCallback(IridiumSBD *device, char c){
Serial.write(c);
}
void ISBDDiagsCallback(IridiumSBD *device, char c){
Serial.write(c);
}
#else
void ISBDConsoleCallback(IridiumSBD *device, char c){
// do nothing
}
void ISBDDiagsCallback(IridiumSBD *device, char c){
// do Nothing
}
#endif

Message AT+SBDWT sent automatically after a callBack() false exit

Hi Mikal,
thanks for your cool library... it shortened to me a lot of developing trapping SBD comms back and forward...
By the way I have an issues... I used the callBack() FALSE exit to abort and override a transmission if there is a condition to override it but in any case the library send an AT+SBDWT text message over the network.
How can I block this?
Thank you in advance
Clay

Use of Sleep pin causes Ring pin to not work correctly.

Hello,

Taking a look at the Ring example, simply adding in SLEEP_PIN causes the RING_PIN to falsely detect a Ring even when none is occurring. Not sure why...

On that note, I suggest using Pullup declaration in line 100 in IridiumSBD.h, to ensure Ring does fire properly, as this is an active low signal.

     pinMode(ringPin, INPUT_PULLUP);

I checked, and removing this change of mine does not cause the issue above to disappear.

Needs extra overloading for 32-bit systems

The dbg() and console() overloads used for size_t don't exist on 32-bit systems. On 8-bit systems size_t is the same as uint16_t which gets covered by the uint16_t overload of the functions. On 32-bit systems it's the same as uint32_t and there is no overloading for that variable type.

void IridiumSBD::dbg(uint32_t n)
{
#if ISBD_DIAGS
   if (this->pDiagsStream)
      pDiagsStream->print(n);
#endif
}

void IridiumSBD::console(uint32_t n)
{
   if (this->pConsoleStream)
      pConsoleStream->print(n);
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.