PWM Pulse
[sketchbook_andrea] / libraries / common / common.h
1 /*
2   Common Class
3
4   Oggetti comuni
5
6 Autore: Andrea Manni
7
8 Link: http://git.andreamanni.com/
9 Licenza:    GPLv3
10
11 */
12
13 #include "Arduino.h"
14 #include <avr/pgmspace.h>
15
16 #ifndef common_h
17 #define common_h
18
19 // Variabili
20 const uint8_t BCORRECT[256] PROGMEM = { // Tabella per correzione luminosita' LED a 8bit
21    0,0,0,1,1,1,2,1,1,2,1,2,2,2,3,2,
22    2,2,3,2,2,3,2,3,3,3,4,3,3,3,4,4,
23    4,5,4,5,4,5,5,6,5,5,6,5,6,6,7,6,
24    7,7,8,7,8,8,9,8,9,10,9,10,10,11,10,11,
25    11,12,11,12,13,12,13,13,14,14,15,15,15,16,16,17,
26    17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,
27    25,25,26,26,27,28,28,29,29,30,31,31,32,32,33,34,
28    34,35,36,37,37,38,39,39,40,41,42,43,43,44,45,46,
29    47,47,48,49,50,51,52,53,54,54,55,56,57,58,59,60,
30    61,62,63,64,65,66,67,68,70,71,72,73,74,75,76,77,
31    79,80,81,82,83,85,86,87,88,90,91,92,94,95,96,98,
32    99,100,102,103,105,106,108,109,110,112,113,115,116,118,120,121,
33    123,124,126,128,129,131,132,134,136,138,139,141,143,145,146,148,
34    150,152,154,155,157,159,161,163,165,167,169,171,173,175,177,179,
35    181,183,185,187,189,191,193,196,198,200,202,204,207,209,211,214,
36    216,218,220,223,225,228,230,232,235,237,240,242,245,247,251,255
37 };
38
39 // Inserirne una con 32 valori
40
41
42 class RGBLed {
43   // Classe rappresentativa di un LED RGB
44   protected:    // Vedi esempio Ereditarieta'
45     byte redPin ;
46     byte greenPin ;
47     byte bluePin ;
48     byte redValue ;
49     byte greenValue ;
50     byte blueValue ;
51     boolean common ;
52
53   public:
54     RGBLed (byte pinR, byte pinG, byte pinB) ;
55     RGBLed (byte pinR, byte pinG, byte pinB, byte com) ;
56         void SetColor (byte r, byte g, byte b) ;
57         void Rand ();
58         void Red ();
59     void Green ();
60     void Blue ();
61     void Magenta ();
62     void Cyano ();
63     void White ();
64     void Yellow ();
65     void Off ();
66 };
67
68
69
70 class Lampeggiatore {
71     // Lampeggia un LED utilizzando millis()
72     // Variabili
73     int ledPin ;           // il numero del LED pin
74     long interval ;        // milliseconds di intervallo nel lampeggiare
75     unsigned long previousMillis ;  // precedente cambio di stato
76     int ledState ;         // stato attuale del LED, pubblico per invertirlo
77
78     // Constructor: come viene instanziato un oggetto facente parte della classe
79 public:
80     Lampeggiatore(int pin);
81     void Invert();   // Inverte il lampeggio 
82     void Blink();        // Lampeggia ogni 500ms
83     void Blink(long interval, long drift = 0); // Lampeggia inpostando l'intervallo
84     void Blink(long on, long down, long drift); // Imposta il tempo acceso e il tempo spento
85     void High();    // Accende il LED
86     void Low();     // Spegne il LED
87     void Swap();    // Inverte lo stato del LED
88     unsigned long shift ;  // anticipo / ritardo
89 };
90
91
92
93 ////////////////////////////
94 class Pwm {
95     /*
96        PWM per un LED: aumentare progressivamente la luminosita'.
97        Utilizza la funzione millis() invece che un delay()
98        in modo da non blocare il processore.
99     */
100     // Variabili
101     int ledPin ;           // il numero del LED pin
102     int speed ;            // velocita' del ciclo in ms
103     unsigned long previousMillis ;  //precedente cambio di stato
104     byte increment ;       // aumenta brighteness nel loop UD
105     int step;              // Pulse: stato del loop PWM
106     int interval ;         // Pulse: Intervallo tra step 
107
108     // Constructor: come viene instanziato un oggetto facente parte della classe
109 public:
110     Pwm(int pin);  // numero di pin, velocita' di ciclo
111     void Up(long speed, long drift = 0);
112     void lUp(long speed, long drift = 0);
113     void Down(long speed, long drift = 0);
114     void lDown(long speed, long drift = 0);
115     void UD(long speed, long drift = 0);
116     void Pulse(int interval, int pausa = 255);
117     void RandomPulse(int min = 1, int max = 10, int pausa = 255);
118     void Set(byte brighteness);
119     void lSet(byte brighteness);
120     byte brightness  ;      // luminostia' iniziale
121     unsigned long shift ;  // anticipo / ritardo
122 };
123
124
125
126 ////////////////////////////
127 class Sequenza {
128     // Lampeggia LED in sequenza utilizzando millis()
129     unsigned long previousMillis ;
130     byte i = 0;
131     byte *ledPins;
132     byte size;
133     int inc = 1;
134     long interval;
135     
136   public:
137     Sequenza (byte passed[], byte dim) ; // Array contentente i PINS, dimensioni array
138     void Update(long value) ;  // Accende in sequenza
139     void Reverse(long value) ; // Invertita
140     void UD(long value) ; // Up & Down
141 };
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158 //////////////////////
159 // Funzioni
160
161 void brilla(byte pin, int velocita = 200) ;
162
163 byte lum(byte val);
164
165 int calibraTrim(int pin, const byte ledPin = 13);
166
167
168 #endif