Boa noite pessoal,
Estava tentando fazer um projeto que vi em uma video aula onde você ascenderia uma lampada 110 com o arduino, fiz toda montagem na protoboard e antes de ligar a energia elétrica resolvi testar colocando um led nos pinos 1 e 2 do opto e nada acontecia quando eu apertava o push, estava usando esse código:
/**
* Testando botoes
* Este programa fara um simples teste de pressionar um botao
* e acender um led utilizando a tecnica de debounce
* 2012-06-12-00
*/
int ledPin = 7;
int buttonPin = 6;
int state = LOW;
int reading;
int previous = LOW;
long time = 0;
long debounce = 200;
void setup(){
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop(){
reading = digitalRead(buttonPin);
if (reading == HIGH && previous == LOW && millis() - time > debounce){
state = !state;
time = millis();
}
digitalWrite(ledPin,state);;
previous = reading;
Serial.println(state);
Serial.println(previous);
}
Esse é o video da aula:
https://www.youtube.com/watch?v=8KwmjDz2sjc
Após não obter êxito no teste, resolvi tirar tudo da proto e fazer o esquema bem simples do push boton com debaunce, e o led não acendia, após um tempo ascendia uma hora e outras não e quando eu tirava o terra do botão, o led ficava piscando.
Notei que:
Quando o botão não estava pressionado, o led piscava
Quando pressionava ele acendia
Quando soltava ele voltava a piscar
Parece que tem uma sujeita na serial olhem:
1
0
0
0
1
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
1
0
1
0
Se eu ligo diretamente o terra na porta do botão ele fica aceso até eu tirar.
Já resetei, já toquei o código e nada =/
Fiz o teste com do cod. do push boton:
/*
DigitalReadSerial
Reads a digital input on pin 2, prints the result to the serial monitor
This example code is in the public domain.
*/
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 6;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input pin:
int buttonState = digitalRead(pushButton);
// print out the state of the button:
Serial.println(buttonState);
delay(1500); // delay in between reads for stability
}
Ae a Serial retornou 0 quando eu aperto:
0
0
0
0
0
0
0
0
0
Depois solto e do nada coloca 1 dinovo aleatoriamente:
0
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Tags:
Aparentemente você esqueceu de ligar o resistor de pullup no pino do botão.
Mas sem nada conectado ele dá isso na serial:
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
0
Não era pra dar tudo 0?
como o Mauricio disse, a primeira tentativa seria o Pullup...
Tente colocar:
digitalWrite(pushButton,HIGH);
logo depois de definir esse pino como entrada.
E um resistor por ex de 10K para o 5V seria bom...
Assim funfou, mas quando o led desliga ele continua mandando isso:
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
Não fica zerado mais =/
Olha como está montado no anexo:
Olha como montei o código, se coloco o digitalWrite(pushButton,HIGH); dá erro na compilação, então fiz dessa forma:
/**
* Testando botoes
* Este programa fara um simples teste de pressionar um botao
* e acender um led utilizando a tecnica de debounce
* 2012-06-12-00
*/
int ledPin = 7;
int buttonPin = 6;
int state = LOW;
int reading;
int previous = LOW;
long time = 0;
long debounce = 200;
void setup(){
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin,HIGH);
Serial.begin(9600);
}
void loop(){
reading = digitalRead(buttonPin);
if (reading == HIGH && previous == LOW && millis() - time > debounce){
state = !state;
time = millis();
}
digitalWrite(ledPin,state);
;
previous = reading;
Serial.println(state);
Serial.println(previous);
}
Ou ele está mostrando 1010101 por isso?
Serial.println(state);
Serial.println(previous);
Mas mesmo assim, antes não precisava desse HIGH e sempre funcionou de boa... será que zuou a placa?
Apaga a ultima linha do programa: "Serial.println(previous);". É ela que está enviando os valores desnecessários.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por