Hi Robin,
Thanks for the response and for pointing me to the Serial Input Basics guide. I'm still a little unsure of why everything works fine until my valves come on. Perhaps you could take a look at my code (posted below)?
While I have the same problem when looking at the values in the serial monitor, ultimately I am plotting the sensor data in Matlab and my matlab code gets completely messed up when the arduino doesn't send characters of the assumed length and range over serial.
Here is my code:
#include<math.h>
//Valves
int ValveH = 13;
int ValveD = 12;
int Valve4 = 10;
int Valve5 = 9;
int count=0;
//Analog Inputs
int PotPin = A0;
int Input_Mix = A1;
int Input_Dry=A2;
//All functions
int H_Setting_to_serial(int PotPin){
int Potpin_Val = analogRead(PotPin); // value between 0 and 1023
int Humidity_Setting= (20 * Potpin_Val / 1023); // This
Humidity_Setting=Humidity_Setting*5;
int Hum2Serial=Humidity_Setting+100;
//Serial.flush();
//Serial.println(Hum2Serial);
return Humidity_Setting;
}
int Humidity_Reading_Dry(int Input_Dry){
int Dry=analogRead(Input_Dry);
// Convert to a voltage
float Humidity_Dry_Voltage= Dry * (5.0 / 1023.0);
float Humidity_Dry2= (Humidity_Dry_Voltage- 0.958)/0.0307 ;
int Humidity_Dry= (int) floor(Humidity_Dry2 + 0.5);
return Humidity_Dry;
}
int Humidity_Reading_Mix(int Input_Mix){
int Mix=analogRead(Input_Mix);
// Convert to a voltage
float Humidity_Mix_Voltage= Mix * (5.0 / 1023.0);
float Humidity_Mix2= (Humidity_Mix_Voltage- 0.958)/0.0307 ;
int Humidity_Mix= (int) floor(Humidity_Mix2 + 0.5);
return Humidity_Mix;
}
int send_to_serial(int Value_to_Send){
int Serial_Val=Value_to_Send+100;
if(Serial_Val>99 && Serial_Val<201)
{
Serial.flush();
Serial.println(Serial_Val);
return 1;
}
}
void setup()
{
pinMode(ValveH, OUTPUT);
pinMode(ValveD, OUTPUT);
pinMode(Valve4, OUTPUT);
pinMode(Valve5, OUTPUT);
digitalWrite(ValveH, HIGH);
digitalWrite(ValveD, HIGH);
digitalWrite(Valve4, LOW);
digitalWrite(Valve5, LOW);
Serial.begin(9600);
}
void loop()
{
int Humidity_Setting=H_Setting_to_serial(PotPin); // Reads the potentiometer value and sends it through serial
int Humidity_Dry=Humidity_Reading_Dry(Input_Dry); // Reads the values from the humidity sensors
int Humidity_Mix=Humidity_Reading_Mix(Input_Mix);
// SIMPLE CONTROL
if(Humidity_Mix<Humidity_Setting){
digitalWrite(ValveH,LOW);
digitalWrite(ValveD,HIGH);
}
else{
digitalWrite(ValveH,HIGH);
digitalWrite(ValveD,LOW);
}
// SEND THE VALUES TO SERIAL FOR MATLAB TO READ.
send_to_serial(Humidity_Setting);
delay(500);
send_to_serial(Humidity_Mix);
delay(500);
}