pessoal fiz este programa e esta funcionando até aqui
int ldrPin = 0;
int leituraldr = 0;
int farolPin = 9;
int setaePin = 11;
int setadPin = 12;
int homecomPin = 13;
int setae = 0;
int setad = 0;
long intervalo = 30000;
void setup() {
Serial.begin(9600);
pinMode(farolPin, OUTPUT);
pinMode(setaePin, INPUT);
pinMode(setadPin, INPUT);
pinMode(homecomPin, OUTPUT);
}
void loop(){
leituraldr = analogRead(ldrPin);
setae = digitalRead(setaePin);
setad = digitalRead(setadPin);
Serial.print(leituraldr);
long tempo = millis();
if (leituraldr < 500){
digitalWrite(farolPin, HIGH);
} else
digitalWrite(farolPin, LOW);
if (setae == HIGH & setad == HIGH) {
digitalWrite(homecomPin, HIGH);
delay(30000)
}
else {
digitalWrite(homecomPin, LOW);
}
}
reparem onde tem um delay de 30s, eu gostaria que quando executasse aquele bloco if quando homecomPin estivesse em HIGH ele ficasse por 30s e depois apagasse, porém colocando o delay ali ele bloqueia o programa por 30s fazendo com que as outras açoes também fiquem bloqueadas e não é isso que quero,, como posso arrumar isto?
obrigado
existe um exemplo blink without delay...
#define TIMEOUT 30000
unsigned long on_time = 0;
unsigned char running = 0;
...
if (setae == HIGH & setad == HIGH) {
digitalWrite(homecomPin, HIGH);
on_time = millis();
running = 1;
}
if (running == 1) {
if (millis() - on_time >= TIMEOUT){ // passaram 30 segundos
digitalWrite(homecomPin, LOW);
running = 0;
}
}
}
Nota que assim, só quando a condição inicial for negativa é que o programa começa a contar os 30 segundos.
Se quiseres que comece a contar logo desde que a condição passou a verdadeira, podes usar a flag running como uma detecção de flanco e evitar voltar a esse pedaço de código.
Queres explicar o que pretendes fazer com isto para podermos dar ideias melhores?
bubulindo funcionou perfeitamente deste modo, muito obrigado..
aproveitando o tópico, sabe me dizer se attiny85 tem porta analógica e quantas? pretendo ligar um ldr nele, sera que funciona?
obrigado
Se quiseres usar o pino de reset, 3 portas analögicas. Se não o quiseres usar, 4.
Vê auqi http://www.atmel.com/Images/doc2586.pdf
bubulindo me da um help aqui,,,
fiz o programa usando o pino 1 (pb5) do attiny definindo ele como output, mas só de alimentar o attiny quando o led deveria estar apagado fica um brilho beemm fraquinho nele
o que pode ser?
O pino 1 é o reset... e se não mudaste o fuse RSTDISBL, esse pino só serve para a funcão de reset.
Se experimentares outro pino, certamente que funciona... desde que mantenhas o pino de Reset com 5V.
Como faço para alterar esse fuse? Preciso usar as 6 I/O do attiny
Isso é feito no processo de gravação do chip.
como estás a passar o programa para lá? E já agora, convém ver como usar o chip sem o Reset... eu nunca o fiz, logo não sei quais as consequências.
Estou a usar o arduino como programmer isp
tenta ver como se usa um chip sem o reset... isso tem algumas implicações no processo de gravação. :\