Hello,
Like a few others I saw on the forum, I also have a problem with reading a bit stream from the serial port on the arduino.
My purpose is that an arduino master is sending data to an arduino slave (reading data) and the communication between it is with RS485 because the distance in between the master and slave can be a couple of meters.
I would like to test the functionality of reading from the RX pin from the arduino slave with the example code that arduino provides :
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, BIN);
}
}
The data that is being send is a repitetive bytestream (with a duration of 1,6 sec and a pause of 1 sec, voltages are measured with a scope : 0V<=>5V). The purpose of the send data is adressing 60 arduino slaves and the bytestream is send trough pin D12. Before you send the data the RS485 transceiver is set in transmit mode. The code is displayed below:
int transmit_data = 12; // pin D12
int TX_RX = 13; // pin D13
void setup() {
pinMode(transmit_data, OUTPUT); pinMode (TX_RX, OUTPUT);
Serial.begin(9600);
}
void loop(){
digitalWrite(TX_RX, LOW); delay (250); digitalWrite(TX_RX, HIGH); // TX data = 1, RX data = 0
// Slave 1 : 0 00 000000 1
for (int i = 0; i < 9; i++){digitalWrite(transmit_data,LOW); delay(1);}; digitalWrite(transmit_data,HIGH); delay(1); Serial.println("Slave 1 : 0 00 000000 1");
// Slave 2 : 0 00 000001 1
for (int i = 0; i < 8; i++){digitalWrite(transmit_data,LOW); delay(1);}; for (int i = 0; i < 2; i++){digitalWrite(transmit_data,HIGH); delay(1);}; Serial.println("Slave 2 : 0 00 000001 1");
// Slave 3 : 0 00 000010 1
for (int i = 0; i < 7; i++){digitalWrite(transmit_data,LOW); delay(1);}; digitalWrite(transmit_data,HIGH); delay(1); digitalWrite(transmit_data,LOW); delay(1);
digitalWrite(transmit_data,HIGH); delay(1); Serial.println("Slave 3 : 0 00 000010 1");
// Slave 4 : 0 00 000011 1
for (int i = 0; i < 7; i++){digitalWrite(transmit_data,LOW); delay(1);}; for (int i = 0; i < 3; i++){digitalWrite(transmit_data,HIGH); delay(1);}; Serial.println("Slave 4 : 0 00 000011 1");
// Slave 5 : 0 00 000100 1
for (int i = 0; i < 6; i++){digitalWrite(transmit_data,LOW); delay(1);}; digitalWrite(transmit_data,HIGH); delay(1); for (int i = 0; i < 2; i++){digitalWrite(transmit_data,LOW);
delay(1);}; digitalWrite(transmit_data,HIGH); delay(1); Serial.println("Slave 5 : 0 00 000100 1");
// ...
// Slave 55 : 0 00 110110 1
for (int i = 0; i < 3; i++){digitalWrite(transmit_data,LOW); delay(1);}; digitalWrite(transmit_data,HIGH); delay(1); for (int i = 0; i < 3; i++){digitalWrite(transmit_data,HIGH); delay(1);
digitalWrite(transmit_data,LOW); delay(1); digitalWrite(transmit_data,HIGH); delay(1);}; Serial.println("Slave 55 : 0 00 110110 1");
// Slave 56 : 0 00 110111 1
for (int i = 0; i < 3; i++){digitalWrite(transmit_data,LOW); delay(1);}; for (int i = 0; i < 2; i++){digitalWrite(transmit_data,HIGH); delay(1);}; digitalWrite(transmit_data,LOW); delay(1);
for (int i = 0; i < 4; i++){digitalWrite(transmit_data,HIGH); delay(1);}; Serial.println("Slave 56 : 0 00 110111 1");
// Slave 57 : 0 00 111000 1
for (int i = 0; i < 3; i++){digitalWrite(transmit_data,LOW); delay(1);}; for (int i = 0; i < 3; i++){digitalWrite(transmit_data,HIGH); delay(1);}; for (int i = 0; i < 3; i++)
{digitalWrite(transmit_data,LOW); delay(1);}; digitalWrite(transmit_data,HIGH); delay(1); Serial.println("Slave 57 : 0 00 111000 1");
// Slave 58 : 0 00 111001 1
for (int i = 0; i < 3; i++){digitalWrite(transmit_data,LOW); delay(1);}; for (int i = 0; i < 3; i++){digitalWrite(transmit_data,HIGH); delay(1);}; for (int i = 0; i < 2; i++)
{digitalWrite(transmit_data,LOW); delay(1);}; for (int i = 0; i < 2; i++){digitalWrite(transmit_data,HIGH); delay(1);}; Serial.println("Slave 58 : 0 00 111001 1");
// Slave 59 : 0 00 111010 1
for (int i = 0; i < 3; i++){digitalWrite(transmit_data,LOW); delay(1);}; for (int i = 0; i < 3; i++){digitalWrite(transmit_data,HIGH); delay(1);}; for (int i = 0; i < 2; i++)
{digitalWrite(transmit_data,LOW); delay(1); digitalWrite(transmit_data,HIGH); delay(1);}; Serial.println("Slave 59 : 0 00 111010 1");
// Slave 60 : 0 00 111011 1
for (int i = 0; i < 3; i++){digitalWrite(transmit_data,LOW); delay(1);}; for (int i = 0; i < 3; i++){digitalWrite(transmit_data,HIGH); delay(1);}; digitalWrite(transmit_data,LOW);
delay(1); for (int i = 0; i < 3; i++){digitalWrite(transmit_data,HIGH); delay(1);}; Serial.print("Slave 60 : 0 00 111011 1");
digitalWrite(TX_RX, LOW); delay (750);
}
But this code is not the problem because the bytestream that is send is correct out of the arduino and at the beginning of the master RS485 transceiver, and also at the end of the slave RS485 transceiver and RX pin on the arduino slave.
So the problem is that the data that is placed on the RXpin of the arduino slave cant be read by the controller and can
t be shown on the screen with the example code. That so weird because examples allways are supposed to work. I also used an different arduino board so its not that the serial port is not working or such. And I don
t think theres a problem with the datastream I
ve produced....
Thanks for your help!