Advertisement
alexanderik

SHALAT LEONID-int

Jun 23rd, 2019
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.79 KB | None | 0 0
  1. // Remote Controller fot __AVR_ATtiny85__
  2. // Alexander Grigoriev 2018
  3. // Made by GAVS for LEON
  4. /*
  5. [x] CKDIV8 = 0
  6.     [x] SUT0 = 0
  7.         [x] CKSEL3 = 0
  8.             [x] CKSEL2 = 0
  9.                 [x] CKSEL0 = 0
  10.                     [x] SPIEN = 0 CALIBR
  11.  
  12. */
  13.  
  14. #include "Arduino.h"
  15.  
  16. #include <key_header.h>
  17. #include <avr/io.h>
  18. #include <avr/interrupt.h>
  19. #include <util/delay.h>
  20. #include <avr/sleep.h>
  21. #include <compat/deprecated.h>
  22. #include <avr/eeprom.h>
  23. #define DEBUG 0
  24.  
  25.     //datasheet attiny 85
  26.     // http : //ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet-Summary.pdf
  27.  
  28.     // pin1, PB5 (PCINT5 / RESET / ADC0 / dW)                                     // pin8, VCC
  29.     // pin2, PB3 (PCINT3/XTAL1/CLKI/OC1B/ADC3)                                    // pin7, PB2 (SCK/USCK/SCL/ADC1/T0/INT0/PCINT2)
  30.     // pin3, PB4 (PCINT4/XTAL2/CLKO/OC1B/ADC2)                                    // pin6, PB1 (MISO/DO/AIN1/OC0B/OC1A/PCINT1)
  31.     // pin4, GND                                                                  // pin5, PB0 (MOSI/DI/SDA/AIN0/OC0A/OC1A/AREF/PCINT0)
  32.  
  33.     void
  34.     key1();
  35. void key2();
  36. void key3();
  37. void kkey(int s);
  38. void keyscan();
  39.  
  40.  
  41. #define TRANS_PIN PB3
  42. #define INPUT_PIN0 PB0 // open door
  43. #define INPUT_PIN1 PB1 // close door
  44. #define INPUT_PIN2 PB2 // open offer
  45.  
  46. #include <rc.h>
  47.  
  48. volatile char state, keypressed;
  49.  
  50. boolean lvl;
  51. int blc;
  52. int offDelay = 150;
  53.  
  54. int main()
  55. {
  56.   // Configure TRANS_PIN as output
  57.   DDRB |= (1 << TRANS_PIN);
  58.  
  59.   // Set INPUT_PIN as Input
  60.   DDRB &= ~(1 << INPUT_PIN0 | 1 << INPUT_PIN1 | 1 << INPUT_PIN2);
  61.  
  62.   //  ADCSRA &= ~_BV(ADEN); //ADC OFF
  63.   // turn on interrupts!
  64.   //  GIMSK |= (1 << PCIE);
  65.  
  66.   while (1)
  67.   {
  68. //    GIMSK |= _BV(PCIE);   // Enable Pin Change Interrupts // Включить Pin Change прерывания
  69. //    ADCSRA &= ~_BV(ADEN); // ADC off // отключить ADC; уменьшает энергопотребление
  70.  
  71.     sbi(GIMSK,PCIE);
  72.     cbi(ADCSRA, ADEN);    // switch Analog to Digitalconverter OFF
  73.  
  74. //    keypressed=LOW;
  75.  
  76.         // Enable PCINT0 (PB0) and PCINT1 (PB1) interrupt
  77.     PCMSK |= (1 << PCINT0 | 1 << PCINT1 | 1 << PCINT2);
  78. //        PCMSK = 0b00000111; // turn on interrupts on pins PB0, PB1, & PB2
  79.  
  80.       //MCUCR &= ~(_BV(ISC01) | _BV(ISC00)); //INT0 on low level
  81.  
  82.     sei();
  83.  
  84.     digitalWrite(TRANS_PIN, HIGH);
  85.     delayMicroseconds(10);
  86.     digitalWrite(TRANS_PIN, LOW);
  87.  
  88.     // Set TRANS_PIN low
  89.     //PORTB &= ~(1 << TRANS_PIN);
  90.     cbi(PORTB, TRANS_PIN);
  91.     set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  92.     //set_sleep_mode(SLEEP_MODE_IDLE);
  93.     sleep_mode();
  94.     sleep_enable(); //gavs
  95.     sei();
  96.     sleep_cpu(); //gavs
  97.  
  98.  
  99.     delayMicroseconds(200);
  100.  
  101.     digitalWrite(TRANS_PIN, HIGH);
  102.     delayMicroseconds(50);
  103.     digitalWrite(TRANS_PIN, LOW);
  104.  
  105.     // корректно просыпаемся
  106.     cli();               // gavs
  107.     sleep_disable();     //gavs
  108.    // ADCSRA |= _BV(ADEN); // ADC on
  109.     sbi(ADCSRA, ADEN);   // switch Analog to Digitalconverter ON
  110.     sei();
  111.  
  112.    if (keypressed) keyscan();
  113.  
  114.     switch (state)
  115.     {
  116.       case 0: {break;}
  117.       case 1: {key1(); break;}
  118.       case 2: {key2(); break;}
  119.       case 3: {for (int t = 1; t <= 5; t++) key3(); break;}
  120.     }
  121.  
  122.     // Set TRANS_PIN low
  123.     PORTB &= ~(1 << TRANS_PIN);
  124.  
  125.     //sei(); //
  126.   }
  127. }
  128.  
  129. void keyscan()
  130. {
  131.   if ((!PINB & (1 << INPUT_PIN0)))   { /* delayMicroseconds(50);   if ((!PINB & (1 << INPUT_PIN0))) */ state = 1;  }
  132.   else
  133.   if ((!PINB & (1 << INPUT_PIN1)))  {  /* delayMicroseconds(50);   if ((!PINB & (1 << INPUT_PIN1))) */  state = 2;  }
  134.   else
  135.   if ((!PINB & (1 << INPUT_PIN2)))  {  /* delayMicroseconds(50);   if ((!PINB & (1 << INPUT_PIN2))) */  state = 3;  }
  136.   else state=0;
  137.   keypressed = LOW;
  138.   cli();
  139. }
  140.  
  141. ISR(PCINT0_vect)
  142. {
  143.  keypressed=HIGH;
  144. }
  145.  
  146. void kkey(int sizeOfArray)
  147. {
  148.   lvl = LOW;
  149.   for (int t = 0; t < sizeOfArray; t++)
  150.   {
  151.     digitalWrite(TRANS_PIN, HIGH);
  152.     delayMicroseconds(1000);
  153.     digitalWrite(TRANS_PIN, LOW);
  154.     delayMicroseconds(1000);
  155.   }
  156. }
  157.  
  158. void key1()
  159. {
  160.   lvl = LOW;
  161.   int sizeOfArray = 108;
  162.   for (int t = 0; t < sizeOfArray; t++)
  163.   {
  164.     digitalWrite(TRANS_PIN, lvl);
  165.     delayMicroseconds(pgm_read_word_near(&Key1[t]) - offDelay);
  166.     //  delayMicroseconds(Key1[t]-150);
  167.     lvl = !lvl;
  168.   }
  169. }
  170.  
  171. void key2()
  172. {
  173.   lvl = LOW;
  174.   for (int t = 0; t < 108; t++)
  175.   {
  176.     digitalWrite(TRANS_PIN, lvl);
  177.     delayMicroseconds(pgm_read_word_near(&Key2[t]) - offDelay);
  178.     //delayMicroseconds(Key2[t]-150);
  179.     lvl = !lvl;
  180.   }
  181. }
  182.  
  183. void key3()
  184. {
  185.   lvl = LOW;
  186.   for (int t = 0; t < 108; t++)
  187.   {
  188.     digitalWrite(TRANS_PIN, lvl);
  189.     delayMicroseconds(pgm_read_word_near(&Key3[t]) - offDelay);
  190.     //delayMicroseconds(Key2[t]-150);
  191.     lvl = !lvl;
  192.   }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement