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 1107 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
  • billabott
    0 billabott over 12 years ago

    Q # 1: How do you have the photocell wired to the analog pin?   Like this?

     

    Q # 2: What does it do if you shine a bright light on 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 billabott

    #1 - The photocells are wired with a 10k pulldown resistor. They seem to

    pass the correct data, so long as the values are less than the threshold,

    but I assume this isn't the fault of the sensors but rather some glitch in

    the code.

     

    #2 - A bright light far exceeds the 900 threshold and will lock in

    immediately at just over 900, displaying nothing further. Then, when in

    darkness, no further data appears.

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

    It could be that an additional delay(500); is needed

    just before the sketch attempts change direction of the stepper.

     

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

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

    Should have mentioned that another sketch, including similar analog input, will display values as intended without a problem. Seems the sketch in question doesn't like the "while" code?

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

    Saying the LDR is wired with a pull down resistor does not give me the level of detail I expected.  Where is A0 and +5 V connected, eh?

     

     

    Back in the old days before integrated ADC the LDR would be used in this fashion.  http://www.rentron.com/micro-bot/images/CDS_Circuit.gif

     

    The discussion about that style of implementation is found here: http://www.rentron.com/micro-bot/cds.htm .

     

    Happy Trails

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

    Have you tried changing the while statements to if statements?

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • 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 billabott

    I just tested this sketch. By adding the "Serial.println" within each

    "while" statement, the stepper is working fine. I always appreciate your

    help!

     

    #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);

     

      if (sonarValue >900)

      {

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

    switch reached

        {

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

          Serial.println (sonarValue);

        }

     

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

    switch reached

        {

          stepper1.step(1);  //move left

          Serial.println (sonarValue);

     

          {

          }

        }

      }

     

    • 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
>
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