Go Down

Topic: my pins give me 1 all the time ! (Read 617 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