0

I want to communicate with an RS485 Bus consisting of 5 Arduino Pro Minis as slaves and one Arduino Mega 2560 as Master. I found a great library for this.

According to the documentation provided by the author of library I can use:

ICSC icsc(1, 9600, 7); //ID, BaudRate, DEpin

But I also have to define a Serial port for ICSC to work with:

ICSC icsc(1, 9600, Serial1);

I cannot mix these two sentences. I mean I cannot define both DEpin and Serial port for the ICSC in one sentence. But I need it to be defined. I don't want to use Serial for that, which I need for Serial Monitor. I want to use Serial1 for this. What can I do? I couldn't find any updated documentation about this.

UPDATE:

I found out how to define Serial port and DEpin for ICSC. The problem is I cannot get an answer!

Here is Master code:

#include <ICSC.h>
ICSC icsc(Serial1, 1, 7); //Stream, ID, DEpin

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  icsc.begin();
  icsc.registerCommand('R', &showTemperature);
}

void loop() {
  icsc.send(2, 'T', 0, NULL);
  icsc.process();
}

void showTemperature() {
  Serial.println("ACK");
}

And here is the Slave code:

#include <ICSC.h>
ICSC icsc(Serial, 2, 7); //Stream, ID, DEpin
String strAck = "ProMini2:ACK";

void setup() {
  Serial.begin(9600);
  icsc.begin();
  icsc.registerCommand('T', &sendTemperature);
}

void loop() {
  icsc.process();
}

void sendTemperature() {
  icsc.send(1, 'R', sizeof(strAck) + 1, (char*)&strAck);
}

Assume that there is just one slave and one master. I tried this code but got no answer. Where is the error?

2

The documentation for the constructors is out of date (I am re-writing as we speak, and is now here).

The constructors in the header file are like this:

ICSC(Stream *d, uint8_t station);
ICSC(Stream &d, uint8_t station);
ICSC(Stream *d, uint8_t station, int depin);
ICSC(Stream &d, uint8_t station, int depin);

That means you need to provide the serial object as the first entry:

ICSC icsc(Serial1, 'A', 5);

You need to manually start the serial object before ICSC.

void setup() {
    Serial1.begin(9600);
    icsc.begin();
}

This change was made to enable support for software serial and other Stream based devices.


Addendum for your update:

  1. Don't spam the sending like you are. Send periodically, not constantly, or you will never be able to receive.
  2. You cannot use String objects like that.
  3. 1 and 2 aren't good choices of station IDs. Yes, they work, but not great, since 1 is the SOH character.
  • But what if i begin both Serial and Serial1 right after eachother ? Which one will be assigned to ICSC? – Safa Seed Dec 14 '17 at 16:46
  • Whichever one you assign to ICSC. – Majenko Dec 14 '17 at 16:46
  • I'll give it a try tomorrow and will let you know. Thx in advance. – Safa Seed Dec 14 '17 at 16:51
  • Can i use this constractors in current version of icsc which i'm using? – Safa Seed Dec 14 '17 at 17:16
  • That is the constructors for the version on Github. – Majenko Dec 14 '17 at 17:17
1

The documentation for the library notes a few different possible initialization methods:

ICSC.begin(stationId, baudRate);
ICSC.begin(stationId, baudRate, &SerialPort);
ICSC.begin(stationId, baudRate, &SerialPort, DEPin);
ICSC.begin(stationId, baudRate, DEPin);

So, if you need to define both a serial port and DE Pin, use the third option.

EDIT: Disregard this answer, as the library has changed initialization methods.

  • I tried that, but gives error: No overload method matches the (int, int, &, int) was found. Something like that :) – Safa Seed Dec 14 '17 at 16:45
  • That documentation is out of date. – Majenko Dec 14 '17 at 16:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.