Go Down

Topic: sensor data question (Read 1 time) previous topic - next topic

PaulS

What you want to compare is the reading you get on this pass through loop with that you got on the last pass, however you actually get data from the sensor.

The initial value for "the last time" should be something that is clearly distinct from any valid value, so that the reading on the first pass through loop IS known to be different.

danieljay

no luck. I'm sorry, i am a very slow learner. I've set prevSensorValue to read analog values which i understand in your code isn that if prevSensorValue is different from currsensorValue (both are equal to analog ping pin), and the difference is greater then 5, (> bigChange which i set to 5), then, then= millis(). and below that statement, digitalWrite(led13, HIGH); and inverse for below. nothing aside from declaring then to equal millis and send a led high signal are my understand of what goes on there. hope I'm on the right track at least. I'm not having good results.

Code: [Select]

  prevSensorValue = analogRead(pingPin);
int currSensorValue = analogRead(pingPin);
   if((abs(currSensorValue - prevSensorValue)) > bigChange)
   {
      // a change occurred
      then = millis();

     digitalWrite(led13, HIGH);
     // Do something with the sensor data
   }

  now = millis();

  if(now - then > longTime)
  {
    digitalWrite(led13, LOW); // It's been a while since a change occurred
  }

PaulS

Code: [Select]
  prevSensorValue = analogRead(pingPin);
int currSensorValue = analogRead(pingPin);
   if((abs(currSensorValue - prevSensorValue)) > bigChange)

No! currSensorValue is for this pass through loop. prevSensorValue is from last time, NOT this time.

Code: [Select]
   int currSensorValue = analogRead(pingPin);
   if((abs(currSensorValue - prevSensorValue)) > bigChange)
   {
      // a change occurred
      then = millis();

     digitalWrite(led13, HIGH);
     // Do something with the sensor data
   }
   prevSensorValue = currSensorValue;


danieljay

i dont understand why this isn't working. you'll probably find my errors a lot quicker

Code: [Select]
/* Ping))) Sensor

This sketch reads a PING))) ultrasonic rangefinder and returns the
distance to the closest object in range. To do this, it sends a pulse
to the sensor to initiate a reading, then listens for a pulse
to return.  The length of the returning pulse is proportional to
the distance of the object from the sensor.

The circuit:
* +V connection of the PING))) attached to +5V
* GND connection of the PING))) attached to ground
* SIG connection of the PING))) attached to digital pin 7

http://www.arduino.cc/en/Tutorial/Ping

created 3 Nov 2008
by David A. Mellis
modified 30 Aug 2011
by Tom Igoe

This example code is in the public domain.

*/

// this constant won't change.  It's the pin number
// of the sensor's output:

int redPin = 9;
int bluePin = 10;
int greenPin = 11;

int led13 = 13;
int redVal;
int greenVal;
int blueVal;

///////
unsigned long now;
unsigned long then = 0;
int prevSensorValue = 0;
const int pingPin = 7;
int bigChange = 10;
unsigned long longTime = 10;
///////////


int val1;
int val2;
void setup() {
  // initialize serial communication:
  Serial.begin(9600);
pinMode(led13, OUTPUT);
}

void loop()
{
  // establish variables for duration of the ping,
  // and the distance result in inches and centimeters:
  long duration, inches, cm;

  // The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);

  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);

  // convert the time into a distance
  inches = microsecondsToInches(duration);
  cm = microsecondsToCentimeters(duration);

  Serial.print(inches);
  Serial.print("in, ");
  Serial.print(cm);
  Serial.print("cm");
  Serial.println();

  delay(100);


  int values = cm;


  //forwrd fade
  int currSensorValue = analogRead(pingPin);
   if((abs(currSensorValue - prevSensorValue)) > bigChange)
   {
      // a change occurred
      then = millis();

     digitalWrite(led13, HIGH);
     // Do something with the sensor data
 

}
 
   prevSensorValue = currSensorValue;

  now = millis();

  if(now - then > longTime)
  {
   
     digitalWrite(led13, LOW);
     // It's been a while since a change occurred
 

   
}

  // change the analog out value:

  redVal = digitalRead(pingPin);
  greenVal = digitalRead(pingPin); //makes all the mapped functions equal to sensor readings !!!!!!!!!!


  val1 = digitalRead(pingPin);
  val2 = digitalRead(pingPin);
 
// 
   redVal = map(values, 25, 40, 0, 255);
  greenVal = map(values, 40, 25, 0, 255);
 
   val1 = map(values, 3, 24, 0, 255);
val2= map(values, 24, 3, 0, 255);
//  blueVal= map(values, 40, 25, 0, 255);
 
  //analogWrite(led1, outputValue1);
  //  analogWrite(ledsignal, outputValue2);
int pwmMax = 255;
  if(values >= 25 ){

   analogWrite(redPin, HIGH);
    analogWrite(greenPin,redVal);
    analogWrite(bluePin, redVal);
   

  }

if(values >= 3 && values <= 24)
  {
    analogWrite(redPin, val2);
    analogWrite(greenPin, val2);
analogWrite(bluePin, HIGH);

  }


}

long microsecondsToInches(long microseconds)
{
  // According to Parallax's datasheet for the PING))), there are
  // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
  // second).  This gives the distance travelled by the ping, outbound
  // and return, so we divide by 2 to get the distance of the obstacle.
  // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
  return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
  // The speed of sound is 340 m/s or 29 microseconds per centimeter.
  // The ping travels out and back, so to find the distance of the
  // object we take half of the distance travelled.
  return microseconds / 29 / 2;

}


PaulS

Code: [Select]
const int pingPin = 7;
  int currSensorValue = analogRead(pingPin);

If you are using a UNO or Duemilanove, you don't have 7 analog pins. You probably don't have the sensor attached to an analog pin, anyway.

Go Up