/*
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)
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Bounce2.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Bounce debouncer = Bounce();
Bounce resetDebouncer = Bounce();
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: ");
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);
}
}
/*
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 <Bounce2.h>
#include <LiquidCrystal_I2C.h>
#define bgreen 4
#define bred 5
unsigned long zadnjiOdboj = 0;
int zakasnitevOdboja = 200;
volatile bool stanje = LOW;
LiquidCrystal_I2C lcd(0x27, 16, 2);
int stevec;
Bounce2::Button tipka1, tipka2;
void setup() {
tipka1.attach(bgreen, INPUT_PULLUP);
tipka2.attach(bred, INPUT_PULLUP);
tipka1.interval(10);
tipka2.interval(10);
tipka1.setPressedState(LOW);
tipka2.setPressedState(LOW);
attachInterrupt(digitalPinToInterrupt(bgreen), ISR_tipka1, FALLING);
lcd.init();
lcd.backlight();
Serial.begin(9600);
}
void loop() {
tipka1.update();
tipka2.update();
if (tipka1.pressed()) {
stevec++;
Serial.println(stevec);
lcd.clear();
lcd.print(stevec);
}
if (tipka2.pressed()) {
stevec = 0;
Serial.println(stevec);
lcd.clear();
lcd.print(stevec);
}
}
void ISR_tipka1() {
if ((millis() - zadnjiOdboj) > zakasnitevOdboja) {
stanje = !stanje;
zadnjiOdboj = millis();
}
}
*/