user46817: I plug in BT rx to digital 11, BT tx to digital 10 and then 5v and ground from the HC-05 to the arduino. I then upload this code to the HC-05 that is set as a master.
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  Serial.begin(57600);
  mySerial.begin(9600);
}

void loop() { // run over and over
  Serial.println(mySerial.read());
  delay(2000);
}

I then upload this code to the arduino with the HC-05 that is set as a slave:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10,11); // RX , TX


void setup() {
  // put your setup code here, to run once:
  mySerial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  mySerial.write("100");
  delay(2000);
}

The issue is that I never receive "100" on the serial monitor, I only ever receive 49 and occasionally 48. When I changed it from "100" to "10" same thing happened. Any help would be appreciated.

user337: SoftwareSerial.read() returns a single character as an integer. When you print an integer the print() functions convert it to a human readable format.
You want to covert (cast) the output of read() to the char type. Either:
void loop() {
  char c;
  c = mySerial.read(); // store the result in a temporary variable c
  Serial.println(c);
  delay(2000);
}

or
void loop() {
  Serial.println((char)mySerial.read()); // cast the type to char befor printing.
  delay(2000);
}    

However since only one character at a time is being read your output will be one character per line (assuming no data loss due to the delay):
1
0
0


user10394: "You are getting 49 and 48 occasionally"?
I would expect you to get 49, 48, 48, 49, 48, 48 ...
49 is '1' in ASCII and guess what 48 means :)
This is because you are writing and reading bytes not characters.  There is a very subtle difference.
change you receiver to this and it should make more sense.
void loop() { // run over and over
  const char letter = (char)mySerial.read(); // Turn the byte into an ASCII letter.
  Serial.println(letter);
  delay(2000);
}

It may all still go wrong, if you read <32 or >126 but ...
Here is an ASCII table to help:
ASCII Table

46817: <p>I plug in BT rx to digital 11, BT tx to digital 10 and then 5v and ground from the HC-05 to the arduino. I then upload this code to the HC-05 that is set as a master.</p>

<pre><code>#include &lt;SoftwareSerial.h&gt;

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  Serial.begin(57600);
  mySerial.begin(9600);
}

void loop() { // run over and over
  Serial.println(mySerial.read());
  delay(2000);
}
</code></pre>

<p>I then upload this code to the arduino with the HC-05 that is set as a slave:</p>

<pre><code>#include &lt;SoftwareSerial.h&gt;
SoftwareSerial mySerial(10,11); // RX , TX


void setup() {
  // put your setup code here, to run once:
  mySerial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  mySerial.write("100");
  delay(2000);
}
</code></pre>

<p>The issue is that I never receive "100" on the serial monitor, I only ever receive 49 and occasionally 48. When I changed it from "100" to "10" same thing happened. Any help would be appreciated.</p>
 337: <p>SoftwareSerial.read() returns a single character as an integer. When you print an integer the print() functions convert it to a human readable format.</p>

<p>You want to covert (cast) the output of read() to the char type. Either:</p>

<pre><code>void loop() {
  char c;
  c = mySerial.read(); // store the result in a temporary variable c
  Serial.println(c);
  delay(2000);
}
</code></pre>

<p>or</p>

<pre><code>void loop() {
  Serial.println((char)mySerial.read()); // cast the type to char befor printing.
  delay(2000);
}    
</code></pre>

<p>However since only one character at a time is being read your output will be one character per line (assuming no data loss due to the delay):</p>

<pre><code>1
0
0
</code></pre>
 10394: <p>"You are getting 49 and 48 occasionally"?</p>

<p>I would expect you to get 49, 48, 48, 49, 48, 48 ...</p>

<p>49 is '1' in ASCII and guess what 48 means :)</p>

<p>This is because you are writing and reading bytes not characters.  There is a very subtle difference.</p>

<p>change you receiver to this and it should make more sense.</p>

<pre><code>void loop() { // run over and over
  const char letter = (char)mySerial.read(); // Turn the byte into an ASCII letter.
  Serial.println(letter);
  delay(2000);
}
</code></pre>

<p>It may all still go wrong, if you read &lt;32 or >126 but ...</p>

<p>Here is an ASCII table to help:
<a href="https://www.google.co.uk/imgres?imgurl=https://www.asciitable.com/index/asciifull.gif&amp;imgrefurl=https://www.asciitable.com/&amp;h=488&amp;w=715&amp;tbnid=2U31hF4tTw886M:&amp;q=ASCII%20code&amp;tbnh=143&amp;tbnw=210&amp;usg=__pUA7Ouijp0hts6S2oWHVbyWFJfw%3D&amp;vet=10ahUKEwiHy8zesJ7bAhWrKsAKHXFqDEgQ9QEIKzAA..i&amp;docid=OSBfy-TcJL-niM&amp;sa=X&amp;ved=0ahUKEwiHy8zesJ7bAhWrKsAKHXFqDEgQ9QEIKzAA%20%20ASCII%20Table" rel="nofollow noreferrer">ASCII Table</a></p>
