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 ]