element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Arduino
  • Products
  • More
Arduino
Arduino Forum serial monitor locks after exceeding threshold
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Arduino to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Verified Answer
  • Replies 18 replies
  • Answers 3 answers
  • Subscribers 403 subscribers
  • Views 1102 views
  • Users 0 members are here
Related

serial monitor locks after exceeding threshold

Former Member
Former Member over 12 years ago

My pro mini is writing values from a photocell to the serial monitor, reading correctly until exceeding the threshold, then stops and will not restart, even when the cell is returned to darkness. Assuming this is a software error. Would appreciate advise. Thanks.

 

#include <Stepper.h>

 

 

#define STEPS1 200

#define STOP 0

 

 

int rightSwitchPin =7;

int leftSwitchPin =8;

int sonarPin = A0;

int sonarValue = 0;

 

 

Stepper stepper1(STEPS1, 3,5,4,6);//bipolar

 

 

void setup()

{

  stepper1.setSpeed(30);

  Serial.begin(9600);

 

}

void loop()

{

  sonarValue = analogRead (sonarPin);

// Serial.println (sonarValue);

  delay(500);

 

 

  if (sonarValue >900)

  {

    Serial.println (sonarValue);

    while (digitalRead(rightSwitchPin) == LOW) //keep going until limit switch reached

    {

      stepper1.step(-1);  //move right

    }

    while (digitalRead(leftSwitchPin) == LOW) //keep going until limit switch reached

    {

      stepper1.step(1);  //move left

     

    }

  }

  else

  {

    stepper1.step (STOP);

  }

}

 


  • Sign in to reply
  • Cancel

Top Replies

  • mcb1
    mcb1 over 12 years ago in reply to Former Member +2
    Keith As Nico says ... Not sure where your sketch is, but you read the sonarValue at the start of the loop, then don't read it again until you hit the limit switch. The serial.println(sonarvalue) will…
  • billabott
    billabott over 12 years ago +1
    Have you tried changing the while statements to if statements?
  • Former Member
    Former Member over 12 years ago in reply to ntewinkel +1
    Thank you. After adding a println in each while statement, the sketch works fine. Had some help here. Keith
Parents
  • ntewinkel
    0 ntewinkel over 12 years ago

    I would add a serial.println within the while loops, like this:

     

    (digitalRead(rightSwitchPin) == LOW) //keep going until limit switch reached

        {

          Serial.println("rightSwitchPin is low");

          stepper1.step(-1);  //move right

        }

        while (digitalRead(leftSwitchPin) == LOW) //keep going until limit switch reached

        {

          Serial.println("leftSwitchPin is low");

          stepper1.step(1);  //move left    

        }

     

    I'm guessing that it's getting stuck in one of those loops.

     

    Cheers,

    -Nico

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 12 years ago in reply to ntewinkel

    Yes! I added the "println" under the while, but it works just the same.

    Thanks so much.

     

    Keith

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • ntewinkel
    0 ntewinkel over 12 years ago in reply to Former Member

    I just looked at the details of Stepper.step, and it looks like this block is not needed (taking 0 steps should do nothing)...

      else

      {

        stepper1.step (STOP);

      }

     

    Maybe remove that block, in case that's causing the issue?

     

    ps, from the code it looks like when sonarValue goes over 900, the stepper motor will go all the way right until the limit switch is hit, and then it will go all the way left until the limit switch is hit, and then it reads the sensor again, waits half a second, and repeats the process. Was that the intention?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 12 years ago in reply to ntewinkel

    Thank you.  After adding a println in each while statement, the sketch

    works fine. Had some help here.

     

    Keith

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Reply
  • Former Member
    0 Former Member over 12 years ago in reply to ntewinkel

    Thank you.  After adding a println in each while statement, the sketch

    works fine. Had some help here.

     

    Keith

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Children
  • mcb1
    0 mcb1 over 12 years ago in reply to Former Member

    Keith

     

    As Nico says ...

     

    Not sure where your sketch is, but you read the sonarValue at the start of the loop, then don't read it again until you hit the limit switch.

    The serial.println(sonarvalue) will always be the same until the switch limit is reached.

     

    You can combine items in the If statement so that it becomes :-

     

    void loop()

    {

     

      sonarValue = analogRead (sonarPin);

      Serial.println (sonarValue);

     

      if (sonarValue >900 && digitalRead(rightSwitchPin) == LOW)   // below 900 and keep going until right limit

        {

            stepper1.step(-1);  //move right

            Serial.println (sonarValue);

        }

     

        if (sonarValue >900 && digitalRead(leftSwitchPin) == LOW)   //below 900 keep going until left limit

        {

            stepper1.step(1);  //move left

            Serial.println (sonarValue);

        {

    }

     

     

    This sketch (and the others) still has a problem .....

     

    This will read the sonarPin and if less than 900 AND the limit switch isn't reached, will step -1.

    Since the sonarValue is still less than 900 and the other limitswitch isn't reached, will step 1.

    Basically it will go up one and back one.

     

    Is this what you want or would you prefer it to go from one limit switch to the other while the sonarValue is below 900.?

     

     

    obviously if the sonar value is greater than 900 its going to print flat out, so a delay/timer or something else is a good idea...

     

     

    Mark

    • Cancel
    • Vote Up +2 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • billabott
    0 billabott over 12 years ago in reply to mcb1

    I think you nailed it, Mark Beckett.  The problem has nothing to do with the sensor at all.  It has to do with the fact that there is no secondary variable that REMEMBERS that the rightSwitchPin was HIGH just last go round.  The same thing goes for the leftSwitchPin.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 12 years ago in reply to billabott

    Yes, thanks for the advise. I was playing with the switches and noticed

    some positive behavior but didn't understand how to push it.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 12 years ago in reply to mcb1

    Ah ha! That is a more elegant solution.  To explain what all this is

    about: I am designing a sculpture involving many actions that must occur

    simultaneously when the viewer approaches. For the experienced, I assume

    this can be accomplished with code but I surrendered that goal after

    several months of failure, not to speak of the money wasted on a Mega and

    many, many components, so I chose a more primitive solution.

      I'm using a bunch of cheap pro mini boards, all activated by a single

    Maxsonar sensor that lights an LED on one end of a short length of PVC

    pipe. On the other are mounted photocells to all the other boards.

    Theoretically, one LED could fire a million Arduino, all electronically

    independent. I'm using an 8amp power source.

      In hindsight, would a series of optocouplers have been a better choice?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • mcb1
    0 mcb1 over 12 years ago in reply to Former Member

    Keith

     

    Just to be sure I have this right.

    You have a sensor to detect someone is present/approaching/etc.

    This then is required to trigger some other Arduino's into doing something.

     

     

    I'm presuming these 'others' are close (enough to use a short piece of pvc pipe).

    You are using a single power supply, so you have wires running to them, and they are all connected to the same 8 amp power supply.

     

    If the above is correct, then electrical isolation isn't really necesary.

    Optocouplers will give the ability for isolation (maybe in the future), and I always prefer to use a pullup resistor, and drag the input down to ground. (You can't short out the power supply that way)

     

     

    FYI

    Multiple things can be done at once, its how you do them.

    I use an analogy of filling a pool.

    If you stand there holding the hose (aka delay(xxxx)) then you can't do anything else.

    If however you come back every minute/5mins/1hr and check the level (aka BlinkWithoutDelay example), then you can do other things....

     

     

    So now we have resolved the stepper issue, what is the next step.?

     

    Mark

    Also feel free to tag the 'Helpful Answers' as it helps readers to see the answer more easily.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • mcb1
    0 mcb1 over 12 years ago in reply to mcb1

    Keith

     

    I have always found a flow chart or a mapping of what you want to achieve is useful.

    While I don't use a full flow chart, having the basic decision blocks is useful.

     

    In this case one would be the sonarValue and two paths below and above the 900 value.

    In the >900 path is a block for 'Is the RightLimitSwitch = LOW' and two possible paths.

    (you might decide to set the direction to Right or Left then go back to the main path)

     

    In this manner you may be able to identify any common things which can them become a seperate routine.

     

    It also helps to remove the clutter of the code.

     

     

    Mark

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Reject Answer
    • Cancel
  • Former Member
    0 Former Member over 12 years ago in reply to mcb1

    These are all very helpful solutions but I don't understand how to tag it. The photocells are clustered an inch or so, opposite the LED.  I will experiement with the "no delay" example you mention with a simple, straight forward project. The complexity of this monster was overwelming. Even though I was offered generous help, I couldn't write a sketch using the timer method. Next challenge is "bending" audio circuits from salvaged toddler toys that respond to the same sensor input as the servos, dc motors, and steppers.  LED's are the final challenge and then, the more familiar task; a skin of applique and assorted imbedded objects, nearly a year in the making.  This is my first attempt to learn Arduino as a medium of expression.  

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube