Error in serial communication

Maybe it won´t be so easy to read the temp after all :confused:

Im not sure how you mean with the EasyDriverStep() ... the computer sends commands to run certain Void's (in, out, etc.) with the EasyDriverStep function in it.

the computer sends commands to run certain Void's

No, it sends commands to run certain functions. The return type of the function just happens to be void.

I'm not seeing the relationship between temperature and humidity and whatever it is the stepper is controlling.

PaulS:

the computer sends commands to run certain Void's

No, it sends commands to run certain functions. The return type of the function just happens to be void.

I'm not seeing the relationship between temperature and humidity and whatever it is the stepper is controlling.

Ok, still learning :slight_smile:

I can´t see any relationship either... but can the readings from the sensor (up to 250ms according to the DHT.h) be so slow that it stalls the "Focus-code" so that doesn't returns proper "values" to the Focus program?

Taking the readings can interfere with the Arduino's ability to read the next byte from the serial port, but should not interfere with the Arduino's ability to send data to the serial port.

I haven't a clue what is causing the errors... when i uncomment this code:

 // MY OWN DHT TO LCD-CODE
 
 // Reading temperature or humidity takes about 250 milliseconds!
 // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
/* float h = dht.readHumidity();
 float t = dht.readTemperature();

 // check if returns are valid, if they are NaN (not a number) then something went wrong!
 if (isnan(t) || isnan(h)) {
 lcd.setCursor(1,1);
 lcd.println("Failed to read from DHT");
 } else {
  lcd.setCursor(9,1);
  lcd.print(h);
  lcd.print(" %");
  lcd.setCursor(0,1);
  lcd.print(t);
  lcd.print((char)223);
  lcd.print("C");*/
  }

the whole code is working, both the "PC-Focusing" and my manual focusing, but when i try to run the program with that code, i get the errors seen in the attached jpeg.

Can it be the floats that makes the arduino slow? can i change the floats to integers or anything?

Maybe i can set the DHT-code so it doesn't run when it detects serial communication?

Can it be the serial speed that causes it?

Edit: i found several serial.print's in the library-code... can that be it? (found one that said Read Fail)

/* DHT library 

MIT license
written by Adafruit Industries
*/

#include "DHT.h"

DHT::DHT(uint8_t pin, uint8_t type, uint8_t count) {
  _pin = pin;
  _type = type;
  _count = count;
  firstreading = true;
}

void DHT::begin(void) {
  // set up the pins!
  pinMode(_pin, INPUT);
  digitalWrite(_pin, HIGH);
  _lastreadtime = 0;
}

//boolean S == Scale.  True == Farenheit; False == Celcius
float DHT::readTemperature(bool S) {
  float f;

  if (read()) {
    switch (_type) {
    case DHT11:
      f = data[2];
      if(S)
      	f = convertCtoF(f);
      	
      return f;
    case DHT22:
    case DHT21:
      f = data[2] & 0x7F;
      f *= 256;
      f += data[3];
      f /= 10;
      if (data[2] & 0x80)
	f *= -1;
      if(S)
	f = convertCtoF(f);

      return f;
    }
  }
  Serial.print("Read fail");
  return NAN;
}

float DHT::convertCtoF(float c) {
	return c * 9 / 5 + 32;
}

float DHT::readHumidity(void) {
  float f;
  if (read()) {
    switch (_type) {
    case DHT11:
      f = data[0];
      return f;
    case DHT22:
    case DHT21:
      f = data[0];
      f *= 256;
      f += data[1];
      f /= 10;
      return f;
    }
  }
  Serial.print("Read fail");
  return NAN;
}


boolean DHT::read(void) {
  uint8_t laststate = HIGH;
  uint8_t counter = 0;
  uint8_t j = 0, i;
  unsigned long currenttime;

  // pull the pin high and wait 250 milliseconds
  digitalWrite(_pin, HIGH);
  delay(250);

  currenttime = millis();
  if (currenttime < _lastreadtime) {
    // ie there was a rollover
    _lastreadtime = 0;
  }
  if (!firstreading && ((currenttime - _lastreadtime) < 2000)) {
    return true; // return last correct measurement
    //delay(2000 - (currenttime - _lastreadtime));
  }
  firstreading = false;
  /*
    Serial.print("Currtime: "); Serial.print(currenttime);
    Serial.print(" Lasttime: "); Serial.print(_lastreadtime);
  */
  _lastreadtime = millis();

  data[0] = data[1] = data[2] = data[3] = data[4] = 0;
  
  // now pull it low for ~20 milliseconds
  pinMode(_pin, OUTPUT);
  digitalWrite(_pin, LOW);
  delay(20);
  cli();
  digitalWrite(_pin, HIGH);
  delayMicroseconds(40);
  pinMode(_pin, INPUT);

  // read in timings
  for ( i=0; i< MAXTIMINGS; i++) {
    counter = 0;
    while (digitalRead(_pin) == laststate) {
      counter++;
      delayMicroseconds(1);
      if (counter == 255) {
        break;
      }
    }
    laststate = digitalRead(_pin);

    if (counter == 255) break;

    // ignore first 3 transitions
    if ((i >= 4) && (i%2 == 0)) {
      // shove each bit into the storage bytes
      data[j/8] <<= 1;
      if (counter > _count)
        data[j/8] |= 1;
      j++;
    }

  }

  sei();
  
  /*
  Serial.println(j, DEC);
  Serial.print(data[0], HEX); Serial.print(", ");
  Serial.print(data[1], HEX); Serial.print(", ");
  Serial.print(data[2], HEX); Serial.print(", ");
  Serial.print(data[3], HEX); Serial.print(", ");
  Serial.print(data[4], HEX); Serial.print(" =? ");
  Serial.println(data[0] + data[1] + data[2] + data[3], HEX);
  */

  // check we read 40 bits and that the checksum matches
  if ((j >= 40) && 
      (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) ) {
    return true;
  }
  

  return false;

}

Success... it was the serial.print in the .cpp