Untitled

 avatar
unknown
plain_text
6 days ago
3.0 kB
3
Indexable
#include <Wire.h>
#include <Adafruit_LiquidCrystal.h>

int barvniSensorPin = A0;
int rdecaBarvaPin = 9;
int zelenaBarvaPin = 10;
int modraBarvaPin = 11;
int izbiraGumbaPin = 2;
int vklopGumbaPin = 3;
int barvniSensorVrednost = 0;
int barvnaVrednost = 0;
int izbranaBarva = 0;
bool barveVklopljene = true;

enum StanjeGumba {
  BREZ_AKTIVACIJE,
  ČAKAJ_AKTIVACIJE_IZBIRE,
  ČAKAJ_AKTIVACIJE_VKLOPA
};

StanjeGumba izbiraGumbaStanje = BREZ_AKTIVACIJE;
StanjeGumba vklopGumbaStanje = BREZ_AKTIVACIJE;

Adafruit_LiquidCrystal lcd(0);

void setup() {
  Serial.begin(9600);
  pinMode(rdecaBarvaPin, OUTPUT);
  pinMode(zelenaBarvaPin, OUTPUT);
  pinMode(modraBarvaPin, OUTPUT);
  pinMode(izbiraGumbaPin, INPUT_PULLUP);
  pinMode(vklopGumbaPin, INPUT_PULLUP);

  lcd.begin(16, 2);
  lcd.setBacklight(LOW);

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Izbrana barva:");
  lcd.setCursor(0, 1);
  lcd.print("Jakost barve:");
}

void loop() {
  bool branjeIzbire = digitalRead(izbiraGumbaPin);
  bool branjeVklopa = digitalRead(vklopGumbaPin);

  switch (izbiraGumbaStanje) {
    case BREZ_AKTIVACIJE:
      if (branjeIzbire == LOW) {
        izbranaBarva = (izbranaBarva + 1) % 3;
        izbiraGumbaStanje = ČAKAJ_AKTIVACIJE_IZBIRE;
      }
      break;
    case ČAKAJ_AKTIVACIJE_IZBIRE:
      if (branjeIzbire == HIGH) {
        izbiraGumbaStanje = BREZ_AKTIVACIJE;
      }
      break;
  }

  switch (vklopGumbaStanje) {
    case BREZ_AKTIVACIJE:
      if (branjeVklopa == LOW) {
        barveVklopljene = !barveVklopljene;
        vklopGumbaStanje = ČAKAJ_AKTIVACIJE_VKLOPA;
      }
      break;
    case ČAKAJ_AKTIVACIJE_VKLOPA:
      if (branjeVklopa == HIGH) {
        vklopGumbaStanje = BREZ_AKTIVACIJE;
      }
      break;
  }

  barvniSensorVrednost = analogRead(barvniSensorPin);
  barvnaVrednost = map(barvniSensorVrednost, 0, 1023, 0, 255);

  if (barveVklopljene) {
    if (izbranaBarva == 0) {
      analogWrite(rdecaBarvaPin, barvnaVrednost);
      analogWrite(zelenaBarvaPin, 0);
      analogWrite(modraBarvaPin, 0);
    } else if (izbranaBarva == 1) {
      analogWrite(rdecaBarvaPin, 0);
      analogWrite(zelenaBarvaPin, barvnaVrednost);
      analogWrite(modraBarvaPin, 0);
    } else if (izbranaBarva == 2) {
      analogWrite(rdecaBarvaPin, 0);
      analogWrite(zelenaBarvaPin, 0);
      analogWrite(modraBarvaPin, barvnaVrednost);
    }
  } else {
    analogWrite(rdecaBarvaPin, 0);
    analogWrite(zelenaBarvaPin, 0);
    analogWrite(modraBarvaPin, 0);
  }

  lcd.setCursor(11, 0);
  if (izbranaBarva == 0) lcd.print("Rdeca");
  else if (izbranaBarva == 1) lcd.print("Zelena");
  else lcd.print("Modra");

  lcd.setCursor(9, 1);
  lcd.print(barvnaVrednost);

  Serial.print("Izbrana barva: ");
  if (izbranaBarva == 0) Serial.println("Rdeca");
  else if (izbranaBarva == 1) Serial.println("Zelena");
  else Serial.println("Modra");

  Serial.print("Vrednost barvne čutke: ");
  Serial.println(barvnaVrednost);

  delay(10);
}
Leave a Comment