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

Exibições: 450

Responder esta

Respostas a este tópico

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:

Anexos

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço