Ik ben bezig om een 433mhz pir sensor te maken met behulp van een attiny45/85. Nu moet dit natuurlijk zo efficiënt mogelijk omdat ik die wil laten draaien op 2 aaa batterijen.
Dit is mijn huidige code:
Ik heb avr sleep al ingeladen en interrupt (om met een input de attiny wakker te maken?) Maar ik kom er verder niet helemaal uit.
Op pin 1 van de attiny komt de pir sensor en op pin 0 komt de zender.
wat de attiny moet doen:
slapen
pir stuurt hoog signaal dan moet attiny wakker worden, signaal sturen en weer slapen
stuurt de pir vervolgens weer een laag signaal dat moet de attiny weer wakker worden, signaal sturen en gaan slapen.
etc.
Ik had al wel het volgende gevonden:
Dit is mijn huidige code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| #include <avr/sleep.h>
#include <avr/interrupt.h>
#include <NewRemoteTransmitter.h>
int TxPin = 0; // 433Mhz transmitter pin
int inPin = 1; // Sensor input pin
int address = 349384; // KAKU adres
int value = 0;
int state = 0;
int state2 = 0;
NewRemoteTransmitter transmitter(address, TxPin, 260, 3);
void setup() {
pinMode(inPin, INPUT);
}
void loop() {
value = digitalRead(inPin); // read the input pin
if(value == 1 and state == 0) {
transmitter.sendUnit(1, true);
state = 1;
state2 = 0;
}
if(value == 0 and state2 == 0) {
transmitter.sendUnit(1, false);
state2 = 1;
state = 0;
}
} |
Ik heb avr sleep al ingeladen en interrupt (om met een input de attiny wakker te maken?) Maar ik kom er verder niet helemaal uit.
Op pin 1 van de attiny komt de pir sensor en op pin 0 komt de zender.
wat de attiny moet doen:
slapen
pir stuurt hoog signaal dan moet attiny wakker worden, signaal sturen en weer slapen
stuurt de pir vervolgens weer een laag signaal dat moet de attiny weer wakker worden, signaal sturen en gaan slapen.
etc.
Ik had al wel het volgende gevonden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| const int switchPin = 3; // Interrupt pin
void sleep() {
GIMSK |= _BV(PCIE); // Enable Pin Change Interrupts
PCMSK |= _BV(PCINT3); // Use PB3 as interrupt pin
ADCSRA &= ~_BV(ADEN); // ADC off
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // replaces above statement
sleep_enable(); // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
sei(); // Enable interrupts
sleep_cpu(); // sleep
cli(); // Disable interrupts
PCMSK &= ~_BV(PCINT3); // Turn off PB3 as interrupt pin
sleep_disable(); // Clear SE bit
ADCSRA |= _BV(ADEN); // ADC on
sei(); // Enable interrupts
} // sleep
ISR(PCINT0_vect) {
// This is called when the interrupt occurs, but I don't need to do anything in it
}
void loop() {
sleep();
} |
[ Voor 7% gewijzigd door sweebee op 10-03-2015 19:59 ]
