Go Down

### Topic: Moving from one value to another (Read 530 times)previous topic - next topic

#### oldman2758

##### Dec 09, 2012, 05:47 am
hi everyone

My first post here and i'm hoping someone might be able to point me in the right direction.

what i'm trying to achieve (badly if i say so myself)

starting with a value of zero for "a"

to input a number using the serial monitor (this will hopefully later come from a analog input)
then step to that number ...then be able to enter another number and step from the previous to the new number.

I thought i could do this by passing a to b ..but obviously that don't work

i've been banging my head for a while....and can't even work out if this is an easy thing or a hard thing ...don't even know what the procedure would be called so i don't know what to search for

any pointers would be great.....as i'm old and  my brain has stopped working

merry Christmas

here's where i'm at

Code: [Select]
` int a = 100; int b = 20;void setup() {Serial.begin(115200);}void loop() {    if (Serial.available()>0){int a = Serial.parseInt();Serial.println(a); // reads from serial monitor                   if (a < b){Serial.println("positive up");                         do {a++; Serial.println(a); delay (20);} while(a != b);  Serial.println("+++");  }                                                                                   if (a > b){Serial.println("negative down");                       do {a--; Serial.println(a); delay (20);} while(b != a); Serial.println("---");}                      b = a;  }}`

#### Osgeld

#1
##### Dec 09, 2012, 06:03 am
for

Code: [Select]
`int b = 100;for(int a = 0; a < b; a++){    do something}`

#### oldman2758

#2
##### Dec 09, 2012, 06:37 am
hi

i tried the code as suggested (i think)

i wanted to be able to

enter a number for example 45

and it would step from 0 to 45

enter a number for example 9

and it would step from 45 down to 9

enter a number for example 27

and it would step from 9 to 27 etc etc

sorry if i wasn't clear

Code: [Select]
` int a = 100; int b = 100;void setup() {  Serial.begin(115200);}void loop() {    if (Serial.available()>0){int a = Serial.parseInt();Serial.println(a); // reads from serial monitor                     for(int a = 0; a < b; a++){Serial.println(a);}                          // if (a < b){Serial.println("positive up");                         //do {a++; Serial.println(a); delay (20);} while(a != b);  Serial.println("+++");  }                                                                                 // if (a > b){Serial.println("negative down");                      // do {a--; Serial.println(a); delay (20);} while(b != a); Serial.println("---");}                      b = a;  }}`

#### guix

#3
##### Dec 09, 2012, 07:19 amLast Edit: Dec 09, 2012, 07:28 am by guix Reason: 1
Hello and welcome

I think you need to use a "swap" function:
Code: [Select]
`void swap( int &a, int &b ){   int c = a;   a = b;   b = c;}...if ( a > b ){  swap( a, b );}`

It will then be easier to handle a and b in a single for loop

#### PaulS

#4
##### Dec 09, 2012, 01:06 pm
Aside from the horrid layout, what is wrong with your code? It does something, including printing serial output.

You want it to do something. Clearly if those two somethings were the same thing, you wouldn't be here asking for help. So, I think it's safe to assume that the code does not do what you want.

However, you've failed to describe what it actually does, what output you get, and how that differs from what you want.

#### billroy

#5
##### Dec 09, 2012, 01:22 pm
Here's how I think about this algorithm.  Whatever 'goal' is set to, the code in loop() will cause 'value' catch up to it eventually.

Code: [Select]
`int value, goal;void setup() {...} // set goalvoid loop { if (value > goal) value--; else if (value < goal) value++; else {;}}`

If you want the values to sync on one call to loop() change both 'if's to 'while's.

-br

#### oldman2758

#6
##### Dec 09, 2012, 02:37 pm
thank you

to all of those who made a newbie welcome.

I had a complete brain freeze which you helped unfreeze

but now have it working  was chasing "a" rather than "b"

Code: [Select]
` int a = 0; int b = 0;void setup() {  Serial.begin(115200);}void loop() {    if (Serial.available()>0){int a = Serial.parseInt();                        if (a > b){do {b++; Serial.println(b); delay (20);} while(a != b);}                                                                  if (a < b){do {b--; Serial.println(b); delay (20);} while(a != b);}                                             }                         } `

#### billroy

#7
##### Dec 09, 2012, 02:42 pm
I dare say most of us have found that fortune favors those who name their variables something that will keep that sort of thing straight.

Let this be the last program you use A and B!

Cheers,

-br

Go Up

Please enter a valid email to subscribe