Go Down

Topic: my pins give me 1 all the time ! (Read 671 times) previous topic - next topic

nathan_kia

Hi, I got my first arduino uno last week. I had a problem and I thought it's because of bouncing but It's getting so annoying can anyone help me.

here is the problem :

I made the switch circuit with 2 wires and with a 10K resistor . The diagram is like this

http://www.codeproject.com/KB/system/Interfacing_Arduino_LCDs/PushButtonSchematic.png

except there is not 100ohm resistor.

when I connect the wires I should see 1 on the serial monitor and when I disconnect them 0 .
but it's always 1 !
when I connect the wires i it goes to 0 and 1 for a couple of times  and then it becomes 1. when I disconnect it it stays at 1 for a a few seconds and it goes to 0 sometimes and sometimes doesn't. 

this the simple program that I wrote to light a led when the switch is pushed is like this:
//

#define enc 8
#define led 13
int count = 0 ;

void setup()

{
pinMode(enc,INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}

void loop()
{
int val = digitalRead(enc);
if (val ==HIGH)
{
digitalWrite(led,HIGH);
Serial.println(val);
}
else{
digitalWrite(led,LOW);
}
}

I thought maybe it's because of bouncing. because it was like this since the first day that I got the Arduino.
but today I had problem in counting pulses from encode and I was told it's because of my pins has problem.
there any other way to check the pins ? it's UNO btw.

can anyone help me ?

Osgeld

could be that your only writing to the serial monitor when (val ==HIGH)
http://arduino.cc/forum/index.php?action=unread;boards=2,3,4,5,67,6,7,8,9,10,11,66,12,13,15,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,86,87,89,1;ALL

nathan_kia

right, I should put the Serial.print out of the if statement .

but the problem is when the wires are not connected, I still get 1 which is weird. it should be 0 .

James C4S


right, I should put the Serial.print out of the if statement .

but the problem is when the wires are not connected, I still get 1 which is weird. it should be 0 .

Or put a print statement in the "else" clause of your if-statement,  otherwise you only print when it is high.
Capacitor Expert By Day, Enginerd by night.  ||  Personal Blog: www.baldengineer.com  || Electronics Tutorials for Beginners:  www.addohms.com

James C4S

None of your image links work.

If you click "additional options" you can attach pictures in the post editor.
Capacitor Expert By Day, Enginerd by night.  ||  Personal Blog: www.baldengineer.com  || Electronics Tutorials for Beginners:  www.addohms.com

nathan_kia

I made the code simpler .
Code: [Select]
int button = 12;

void setup()
{
    pinMode(button,INPUT);
    Serial.begin(9600);

}

void loop()
{
  int val = digitalRead(button);
  Serial.println(val);
}


when I upload the program, I get the bunch of zeros which is normal

when i connect the wire I get 1, which is normal.
but when disconnect the wire, I get 1 for almost 5 seconds and then the value starts to bounce between 0 and 1 for 3 4 more seconds and then it goes to zero.

one other thing which seems weird is when I place a wire which is connected to nowhere to the pin 12. I get the uploaded  picture number 1 !!!!!! and when I take it out, for couple of seconds I get picture number 2. and then it goes to all zero.
it's so weird. the wire is connected to nowhere !!!!


Tom Carpenter

Code: [Select]
void loop()
{
  int val = digitalRead(button);
  Serial.println(val);
  delay(10); //I bet that cures the problem.
}
~Tom~

CrossRoads

As written, there is nothing to make the pin go High once the connection to Ground is released.

Do this instead:
Code: [Select]

void setup()
{
    pinMode(button,INPUT);
    digitalWrite (button, HIGH); // turns on internal pullup resistor
    Serial.begin(9600);

}


Now val will reliably = HIGH immeditately whenever the switch is not pressed, and LOW when it is pressed.

Designing & building electrical circuits for over 25 years.  Screw Shield for Mega/Due/Uno,  Bobuino with ATMega1284P, & other '328P & '1284P creations & offerings at  my website.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy