/*
napiši program ki prebere niz znakov iz serijskega porta (4 številke)
Če niz znakov ustreza kombinaciji:
- 5461 se izpiše (vklop LED1) in prižge LED1
- 5460 se izpiše (vklop LED1 ) in ugasne LED1
- 1234 se izpiše (Vklop LED2) in prižge se LED2
- 1230 se izpiše (izklop LED2) in ugasne LED2
- 4545 se izpiše (utripanje LED3) in utripa LED3
- 4540 se izpiše (izklop LED3) in LED3 ugasne
uporabi switch case stavek
za utripanje LED3 uporabi funkcijo millis()
*/
#include <LiquidCrystal_I2C.h>
#define LED1 8
#define LED2 9
#define LED3 10
#define LCD_LINES 2
#define I2C_ADDR 0x27
#define LCD_COLUMNS 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
#define KODA1_ON 5461
#define KODA1_OFF 5460
#define KODA2_ON 1234
#define KODA2_OFF 1230
#define KODA3_ON 4545
#define KODA3_OFF 4540
void setup(){
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
Serial.begin(9600);
lcd.print("Vpisi kodo");
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop(){
static bool i = false;
if(Serial.available()){
char vpis[5];
int steviloZnakovVpis = Serial.readBytes(vpis,4);
if(steviloZnakovVpis == 4){
vpis[4] = '\0'; // terminator seznama vpis
int stevilka = atoi(vpis);
switch(stevilka){
case KODA1_ON:
Serial.println("LED1 vklop");
lcd.clear();
lcd.setCursor(0,1);
lcd.print("LED1 vklop");
digitalWrite(LED1, HIGH);
break;
case KODA1_OFF:
Serial.println("LED1 izklop");
lcd.clear();
lcd.setCursor(0,1);
lcd.print("LED1 izklop");
digitalWrite(LED1,LOW);
break;
case KODA2_ON:
Serial.println("LED2 vklop");
digitalWrite(LED2, HIGH);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("LED2 vklop");
break;
case KODA2_OFF:
Serial.println("LED2 izklop");
digitalWrite(LED2, LOW);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("LED2 izklop");
break;
case KODA3_ON:
Serial.println("LED3 UTRIPANJE");
i = true;
lcd.clear();
lcd.setCursor(0,1);
lcd.print("LED3 utripanje");
break;
case KODA3_OFF:
Serial.println("LED3 izklop");
i = false;
digitalWrite(LED3,LOW);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("LED3 izklop");
break;
default:
Serial.println("poskusi ponovno");
while(Serial.available()) Serial.read();
break;
}
}
}
static unsigned long trenutniCas;
int zakasnitev = 200;
static bool m = false;
if (((millis() - trenutniCas) > zakasnitev)&& i){
trenutniCas = millis();
m = !m;
digitalWrite(LED3,m);
}
}
/*
napiši program ki prebere niz znakov iz serijskega porta (4 številke)
če niz znakov ustreza številki 5461
se izpiše na serijskem portu izklop in prižge LED diodo
#define LED 8
#define KODA 5461
void setup(){
Serial.begin(9600);
Serial.println("Vpiši kodo");
pinMode(LED, OUTPUT);
}
void loop(){
if(Serial.available()){
char vpis[5];
int steviloZnakovVpis = Serial.readBytes(vpis,4);
if(steviloZnakovVpis == 4){
vpis[4] = '\0'; // terminator seznama vpis
int stevilka = atoi(vpis);
if(stevilka == KODA){
Serial.println("dostop je ");
digitalWrite(LED,HIGH);
}
else{
Serial.println("poskusi ponovno");
while(Serial.available()) Serial.read();
digitalWrite(LED,LOW);
}
}
}
}
*/
/*
prebere stanje serijskega predpomnilnika s funkcijo Serial.readBytesUntil()
jo zapiši v seznam buffer tipa char
S pomočjo funkcije strtok() razdeli niz znakov seznama buffer na podnize;
ločilni string naj bo ","
S pomočjo funkcije atol() pretvori niz znakov v celo število
Številke zapiši v seznam stevila[]
Določi najmanjšo in največjo številko seznama stevila[]
Za brisanje seznamov uporabi funkcijo memset()
#define MAKSsteviloZnakov 50
#define BUFFER_SIZE 50
char buffer[BUFFER_SIZE];
int indeks = 0; // indeks trenutno shranjenih številk seznama seznamStevilk[]
long seznamStevilk[MAKSsteviloZnakov];
void setup(){
Serial.begin(9600);
Serial.println("Vpiši število: ");
}
void loop(){
if(Serial.available()){
memset(buffer,0,sizeof(buffer)); // pobrišemo vsebino trenutnega predpomnilnika
Serial.readBytesUntil('\n',buffer,BUFFER_SIZE);
char *token = strtok(buffer,",");
while(token != NULL){
seznamStevilk[indeks] = atol(token);
token = strtok(NULL,",");
indeks++;
}
}
}
*/
/*
primer uporabe funkcije strtok()
char imena[] = " Maja! Mija? Svetlana, Ceca";
char deli[] = ",!?";
void setup(){
Serial.begin(9600);
Serial.println("Razdeli string na posamezne podnize oz. imena");
// spremenljivka token kaže na začetek seznama
// strtok
char *token = strtok(imena,deli);
while(token != NULL){
Serial.println(token); // izpis posameznega imena
token = strtok(NULL, deli); // null nadaljuj z istim seznamom
}
}
void loop(){
}
*/
/*
primer funkcije Serial.readBytesUntil()
#define MAKSsteviloZnakov 50
char znaki[MAKSsteviloZnakov];
void setup() {
Serial.begin(9600);
Serial.println("Vpiši niz znakov: ");
}
void loop() {
static bool novPodatek = false;
if(Serial.available()){
Serial.readBytesUntil('\n',znaki,MAKSsteviloZnakov);
novPodatek = true;
}
if (novPodatek == true){
novPodatek = false;
Serial.print("Vpisani znaki so:");
Serial.println(znaki);
}
}
*/