/*
Naloge se točkujejo skladno s sklepom aktiva za računalištvo.
NALOGA 1)
Napiši program, ki bere niz znakov (6 znakov) iz serijskega porta.
- Če je znakov več ali manj kot 6, naj se na serijskem portu izpiše: "Napaka, ponovni vnos." (1 točka)
- Če niz znakov ustreza številki 777111, se prižge LED, ki je priključena na pin 3. (1 točka)
- Če niz znakov ustreza številki 777222, se ugasne LED, ki je priključena na pin 3. (1 točka)
- Če niz znakov ustreza številki 777333, začne utripati LED, ki je priključena na pin 3. (1 točka)
Za utripanje uporabi funkcijo millis().
- Priključi LCD display, ki izpisuje posamezna stanja: npr. LED vklop, LED izklop, LED utrip, LED utrip 10 (1 točka)
- Za utripanje LED uporabi funkcijo void npr. void utripanje ... (2 točki)
- Če niz znakov ustreza številki 777444, LED dioda 10 x utripne. (2 točki)
NALOGA 2)
- Napiši program, ki šteje število pritiskov tipke, ki je priključena na pin 4. Rezultat naj se izpisuje na serijski port. S tipko, ki je priključena na pin 5, ponastaviš števec pritiskov tipke na nič. (1 točka)
- Za odskakovanje kontaktov uporabi knjižnico bounce.h (1 točka)
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Bounce2.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Definiraj pina za tipki
// Ustvari Bounce objekta za vsako tipko
Bounce debouncer = Bounce();
Bounce resetDebouncer = Bounce();
// Spremenljivka za štetje pritiskov
int buttonPresses = 0;
const int buttonPin = 4;
const int resetButtonPin = 5;
const int ledPin = 3;
unsigned long zadnjeStanjeLED = 0;
bool utripanje = false;
bool ledStanje = false;
/*
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("Vnesi kodo: "); // Added semicolon at the end
lcd.init();
lcd.backlight();
}
void loop() {
if (Serial.available()) {
String vnos = Serial.readStringUntil('\n');
if (vnos.length() != 6) {
Serial.println("Napaka, ponovni vnos");
lcd.clear();
lcd.print("Napaka vnosa");
}
else {
vnasanje(vnos);
}
}
if (utripanje) {
utripnila();
}
}
void vnasanje(String vnos) {
if (vnos == "777111") {
digitalWrite(ledPin, HIGH);
lcd.clear();
lcd.print("LED vklop");
utripanje = false;
} else if (vnos == "777222") {
digitalWrite(ledPin, LOW);
lcd.clear();
lcd.print("LED izklop");
utripanje = false;
} else if (vnos == "777333") {
utripanje = true;
lcd.clear();
lcd.print("LED utrip");
} else if (vnos == "777444") {
utripanje = false;
for (int i = 0; i < 10; i++) {
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
lcd.clear();
lcd.print("LED utrip 10x");
}
}
void utripnila() {
unsigned long trenutneMillis = millis();
if (trenutneMillis - zadnjeStanjeLED >= 1000) {
zadnjeStanjeLED = trenutneMillis;
ledStanje = !ledStanje;
digitalWrite(ledPin, ledStanje);
}
}
*/
void setup() {
// Začni serijsko komunikacijo
Serial.begin(9600);
// Nastavi pina tipk kot vhodna
pinMode(buttonPin, INPUT_PULLUP);
pinMode(resetButtonPin, INPUT_PULLUP);
// Poveži Bounce objekte s pini in nastavi čas odskakovanja
debouncer.attach(buttonPin);
debouncer.interval(5); // interval v milisekundah
resetDebouncer.attach(resetButtonPin);
resetDebouncer.interval(5); // interval v milisekundah
}
void loop() {
// Posodobi stanje Bounce objektov
debouncer.update();
resetDebouncer.update();
// Preveri, če je bila tipka pritisnjena
if (debouncer.fell()) {
buttonPresses++;
Serial.println(buttonPresses);
}
// Preveri, če je bila reset tipka pritisnjena
if (resetDebouncer.fell()) {
buttonPresses = 0;
Serial.println("Števec pritiskov je bil ponastavljen.");
}
}