Hi,
I am trying to write a sketch for an attiny85 which includes power down and wake from external interrupt functionality.
Now i found several sketches (like below) which describe how to achieve that but i cannot seem to figure out how to include a seperate sketch in there. So i want to power up the attiny by external interrupt and then run the second piece of code below. When i am ready using the project i want to power down the attiny via a button press (pin change interrupt?)
Both pieces of code are not mine
This is the sleep code i found
#include <avr/interrupt.h>
#include <avr/sleep.h>
ISR(PCINT0_vect) {
if (digitalRead(0) == LOW)
digitalWrite(4, HIGH);
else
digitalWrite(4, LOW);
}
void setup() {
pinMode(4,OUTPUT); // LED
pinMode(0,INPUT_PULLUP);
pinMode(1,INPUT_PULLUP);
pinMode(2,INPUT_PULLUP);
ADCSRA = 0; // ADC disabled
GIMSK = 0b00100000; // General Interrupt Mask Register, / Bit 5 – PCIE: Pin Change Interrupt Enable / When the PCIE bit is set (one) and the I-bit in the Status Register (SREG) is set (one), pin change interrupt is enabled. Any change on any enabled PCINT[5:0] pin will cause an interrupt. The corresponding interrupt of Pin Change Interrupt Request is executed from the PCI Interrupt Vector. PCINT[5:0] pins are enabled individually by the PCMSK0 Register. / see https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet.pdf
PCMSK = 0b00000111; // Pin-change interrupt for PB0, PB1, PB2
}
void loop() {
sleep_enable();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_cpu();
}
This is the code i want to run when the attiny is awake
// HAZI TECH
// Programmed by Hasitha Jayasundara
// Visit my YouTube Channel for more info - http://www.youtube.com/c/HAZITECH?sub_confirmation=1
//#include "Arduino.h"
//#include <EEPROM.h>
#define LED_PIN1 1 //LED 1
#define LED_PIN2 2 //LED 2
#define LED_PIN3 3 //LED 3
#define LED_PIN4 4 //LED 4
#define buttonPin 0 //Push Button Pin
int SPEED = 60;
int numb = 1;
int pres = 0;
void setup()
{
//EEPROM.update(0,1); // *IMPORTANT* - Run this code line ONLY for the 1st time. Then comment it and re-upload the code
//numb = EEPROM.read(0);
pinMode(buttonPin, INPUT);
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
pinMode(LED_PIN3, OUTPUT);
pinMode(LED_PIN4, OUTPUT);
}
void loop()
{
ButtonScan();
switch (numb) {
case 1:
HAZI_TECH_VIP_1();
break;
case 2:
HAZI_TECH_VIP_2();
break;
case 3:
HAZI_TECH_VIP_3();
break;
case 4:
HAZI_TECH_VIP_4();
break;
case 5:
HAZI_TECH_VIP_5();
break;
case 6:
HAZI_TECH_VIP_6();
break;
case 7:
HAZI_TECH_VIP_7();
break;
case 8:
HAZI_TECH_VIP_8();
break;
default:
HAZI_TECH_VIP_1();
break;
}
}
void HAZI_TECH_VIP_1()
{
ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
}
void HAZI_TECH_VIP_2()
{
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
}
void HAZI_TECH_VIP_3()
{
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
}
void HAZI_TECH_VIP_4()
{
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
}
void HAZI_TECH_VIP_5()
{
digitalWrite(LED_PIN1, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
}
void HAZI_TECH_VIP_6()
{
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
}
void HAZI_TECH_VIP_7()
{
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN1, LOW);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN4, HIGH);
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, LOW);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
}
void HAZI_TECH_VIP_8()
{
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
delay (SPEED); ButtonScan();
delay (SPEED); ButtonScan();
}
void ButtonScan()
{
if(digitalRead(buttonPin)==1)
{
if(pres==0)
{
numb++;
// EEPROM.update(0,numb);
pres=1;
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
delay (750);
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
}
}
else
{
pres=0;
}
if(numb == 10)
{
numb = 1;
}
}