trying to make an led fade (no mapping) up then stop @ 255 (stay at HIGH), then when a sensor marker is hit, then fade down and 0 pwm and stay there.
if (sensorVal =38 ){
// fade in from min to max in increments of 5 points:
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
break;
}
delay(30);
//break;
} else if (sensorVal =20 ){
// fade out from max to min in increments of 5 points:
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin, fadeValue);
break;
}
delay(30);
//break;
}
Why do you break in the for loop? that makes it escape the for loop, and thus will not dim your LED.
Also, you try to make a statement with:
if (sensorVal =38 ) {
Please change that to:
if (sensorVal ==38 ){
Notice the double ==.
a single '=' is used to assign a value to a variable, e.g. cnt = 5; and cnt will be 5.
to make a statement, you have to use a double '==' so that it know it's a statement, and not an assignment:
if (sensorVal == 38) { etc
oops simple mistakes. but I'm still a bit confused, heres what I've reworked without much results.
int sensorVal = cm;
int threshold = 24;
if (sensorVal <=38 && sensorVal >=25){
for (int x = 0; x <= 255; x ++)
{
analogWrite(ledPin, x);
if (sensorVal < threshold){ // bail out on sensor detect
x =255;
break;
}
delay(30);
}}}
if(sensorVal < 24){
for (int x = 255; x <= 0; x --)
if (sensorVal < threshold){ // bail out on sensor detect
x =0;
break;
}
delay(30);
}}
}
could you please post all the code, this seems to be only the loop part..
and another thing, where do you assign your value to the sensorVal now? since i don't see any analogRead() somewhere, i might be missing something though..
If you want it to be checked every loop then you'll have to update it every loop, or the if-statements within the for loops will never get executed, since before the for loop you state that it is bigger than 25, so when you do not update it, it will never get smaller than that 25..
/*
Fading
This example shows how to fade an LED using the analogWrite() function.
The circuit:
* LED attached from digital pin 9 to ground.
Created 1 Nov 2008
By David A. Mellis
modified 30 Aug 2011
By Tom Igoe
http://arduino.cc/en/Tutorial/Fading
This example code is in the public domain.
*/
const int pingPin = 7;
int ledPin = 9; // LED connected to digital pin 9
int fadeValue;
void setup() {
Serial.begin(9600); // nothing happens in setup
}
void loop() {
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();
int sensorVal = cm;
int threshold = 24;
if (sensorVal <=38 && sensorVal >=25){
for (int x = 0; x <= 255; x ++)
{
analogWrite(ledPin, x);
if (sensorVal < threshold){ // bail out on sensor detect
x =255;
break;
}
delay(30);
}
for (int XX = 255; XX <= 0; XX --)
{
analogWrite(ledPin, XX);
}
if (sensorVal <=24 && sensorVal >=2){
XX =255;
break;
}
delay(30);
}
}
}
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;
}
So are testing to be in the range from 25 to 38. Looks odd written that way.
if(sensorVal < 24){
for (int x = 255; x <= 0; x --) { //<< need a bracket here
if (sensorVal < threshold){ // bail out on sensor detect << this is guaranteed to happen due to getting here by sensorVal <24 above
x =0;
break; // this is not needed
}
delay(30);
}}
id love some constructive feedback or samples instead of aggressive, non productive responses because its not a viable solution to someone who may not have as many skill sets as others.
danieljay:
id love some constructive feedback or samples instead of aggressive, non productive responses because its not a viable solution to someone who may not have as many skill sets as others.
that's perfectly said!
change those }}} into one } for each line.
split up your statements with tabs and other structurating things. that might be easier to understand
so you completely changed it, it seems.. well, tbh, i don't see any mistakes anymore now. but it still does not work?
what should happen when your value is 15? since now nothing will happen
ok so this fade sequence I'm conceptually looking at as an animation. this is whats obviously going on:
you go above 15, it triggers the fade to 255.
below, triggers fade to 0.
now my question: i want the led to reach end of the loop and STOP at the values for each statement. so, you go above 15, it triggers the fade "animation" to 255 and STOPS until you reverse and the same holds true other direction.
danieljay:
i want the led to reach end of the loop and STOP at the values for each statement. so, you go above 15, it triggers the fade "animation" to 255 and STOPS until you reverse and the same holds true other direction.
Now it will continuously check the value and adapt the led to it, but what do you mean with stop. Do you mean stopping within the for loop? and what do you mean with reverse?
I'm sorry for all these questions, but i don't really get the point of it xs i'm trying to understand it