-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPulseGen.ino
More file actions
295 lines (226 loc) · 6.83 KB
/
Copy pathPulseGen.ino
File metadata and controls
295 lines (226 loc) · 6.83 KB
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
/*PULSE GENERATOR 1,03
Tomasz Pasierbki
*/
#include <TimerOne.h>
#include <LiquidCrystal.h>
int freq;
int freqtemp;
int DC;
int DCtemp;
const int Button1 = A0; //PWMup
const int Button2 = A5; //PWMdown
const int Button3 = A1; //DCup
const int Button4 = A4; //DCdown
const int Button5 = A2; //ON
const int Button6 = A3; //Dioda
//Wyświetlacz
const int numRows = 2; //Definicja liczby wierszy
const int numCols = 16; //Definicja Liczby kolumn
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Podłaczone piny
const int OnOff = 8; //Pin wyjscia OnOff
const int DIODE = 7; //Pin sterowania dioda
#define pwmRegister OCR1A // Ustawienie rejestu timer1 dla OCR1A
const int outPin = 9; // Wyjscie PWM dla OCR1A znajduje sie P9
long period = 1000; // Ustawienie czasu początkowiego w mikrosekund
int duty = 512; // ustawienie DC początkowego z przedziało 0-1023 wartosc 512 daje 50%
int prescale[] = {0,1,8,64,256,1024}; // definicja wartosci preskalerów
//Czułości przycisków
long time = 0;
long ButtonDebounceShort = 100;
long ButtonDebounceLong = 500;
//Ustawinie stanów na tranzystorach
int stateOnOff = HIGH; //Brak wyjscia PWM
int stateDIODE = HIGH; //Dioda włączona
void setup()
{
pinMode(outPin, OUTPUT);
Timer1.initialize(period); // inicjalizacja timer1, 1000 mikrosekund
//Timer1.pwm(outPin, duty); // ustawienie pwm na P9 oraz DC 50%
//Inicjalizacja przycisków sterująctych
pinMode(Button1, INPUT); //ustawienie typu wejscia
digitalWrite(Button1, HIGH); //ustawienie rezystowow pull up
pinMode(Button2, INPUT);
digitalWrite(Button2, HIGH);
pinMode(Button3, INPUT);
digitalWrite(Button3, HIGH);
pinMode(Button4, INPUT);
digitalWrite(Button4, HIGH);
pinMode(Button5, INPUT);
digitalWrite(Button5, HIGH);
pinMode(Button6, INPUT);
digitalWrite(Button6, HIGH);
//Inicjalizacja wyświetlacza
lcd.begin(numCols, numRows);
LCDstart();
//LCDwork();
//Inicjalizacja diody oraz właczenia wylaczenia
pinMode(OnOff, OUTPUT); //OnOff
digitalWrite(outPin, LOW);
pinMode(DIODE, OUTPUT); //Dioda
//digitalWrite(DIODE, HIGH);
//Ustawiena poczatkowe
freq = 200;
DC = 50;
}
void loop()
{
int buttonPWMup = digitalRead(Button1); // read input value
int buttonPWMdown = digitalRead(Button2);
int buttonDCup = digitalRead(Button3);
int buttonDCdown = digitalRead(Button4);
int buttonOnOff = digitalRead(Button5);
int buttonDIODE = digitalRead(Button6);
if (buttonPWMup == LOW && millis() - time > ButtonDebounceShort) //Inkrementacja PWM
{
{
freq++;
}
time = millis();
}
if (buttonPWMdown == LOW && millis() - time > ButtonDebounceShort) //Dekrementacja PWM
{
{
freq--;
}
time = millis();
}
if (buttonDCup == LOW && millis() - time > ButtonDebounceShort) //Inkrementacja DC
{
{
DC++;
}
time = millis();
}
if (buttonDCdown == LOW && millis() - time > ButtonDebounceShort) //Dekrementacja DC
{
{
DC--;
}
time = millis();
}
if (buttonOnOff == LOW && millis() - time > ButtonDebounceLong) //Włączenie wyłączenie wyjscia PWM
{
if (stateOnOff == HIGH)
{
// turn on:
//digitalWrite(OnOff, LOW);
Timer1.initialize(period);
Timer1.pwm(outPin, duty);
freqtemp++;
freq=freq+1-1;
stateOnOff = LOW;
}
else {
// turn off:
//digitalWrite(OnOff, HIGH);
digitalWrite(outPin, LOW);
stateOnOff = HIGH;
}
time = millis();
}
else if (buttonDIODE == LOW && millis() - time > ButtonDebounceLong) //Włączenie wyłączenie DIODY
{
if (stateDIODE == HIGH)
{
// turn on:
digitalWrite(DIODE, HIGH);
stateDIODE = LOW;
}
else {
// turn off:
digitalWrite(DIODE, LOW);
stateDIODE = HIGH;
}
time = millis();
}
else if (buttonDIODE == LOW && buttonOnOff == LOW && millis() - time > ButtonDebounceLong) //Funkcja dodatkowa
{
{
}
time = millis();
}
processSerial();
}
void processSerial()
{
if(freq != freqtemp && freq>0 && freq<501)
{
lcd.setCursor(2, 0);
if (freq>=10 && freq<100)
{
lcd.print(" ");
lcd.print(freq);
}
else if (freq>0 && freq<10)
{
lcd.print(" ");
lcd.print(freq);
}
else
{
lcd.print(freq);
}
period = 1000000 / freq;
Timer1.setPeriod(period);
duty = map(DCtemp,1,99, 1, ICR1);
Timer1.setPwmDuty(outPin, duty); // don't change the duty cycle
pwmRegister = duty;
}
freqtemp = freq;
if(DC != DCtemp && DC >0 && DC < 100)
{
lcd.setCursor(13, 0);
if (DC<10)
{
lcd.print(" ");
lcd.print(DC);
}
else
{
lcd.print(DC);
}
duty = map(DC,1,99, 1, ICR1);
pwmRegister = duty;
}
DCtemp = DC;
LCDwork();
}
void LCDstart()
{
lcd.clear(); //czyszczenie LCD
lcd.setCursor(0,0);
lcd.print("PULSE GENERATOR");
lcd.setCursor(0,1);
lcd.print("VALEO Ver. 1,03");
delay(3000);
lcd.clear();
}
void LCDwork()
{
lcd.setCursor(0, 0);
lcd.print("f=");
lcd.setCursor(5, 0);
lcd.print("Hz ");
lcd.setCursor(10, 0);
lcd.print("DC=");
lcd.setCursor(15, 0);
lcd.print("%");
if (stateOnOff == LOW)
{
lcd.setCursor(0, 1);
lcd.print("WYJSCIE");
}
else {
lcd.setCursor(0, 1);
lcd.print(" ");
}
if (stateDIODE == HIGH)
{
lcd.setCursor(10, 1);
lcd.print("DIODA");
}
else {
lcd.setCursor(10, 1);
lcd.print(" ");
}
}