Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define LED 8 //pin pri pripojeni kontrolni LED stavu MCU
- bool SwitchF[8] = {true, true, true, true, true, true, true, true}; //pokud je na vstupu true tak se chová jako vypínač. V opačném případě výstup kopíruje stav vstupu
- bool BlinkF[8] = {false, false, false, false, false, false, false, false}; // True znamená, že vstup má funkci blinkru, funguje pouze na vstupu který má SwitchF true
- bool Invert[8] = {false, false, false, false, false, false, false, false}; // True znamená že vstup je invertovaný. Tato funkce funguje pouze na vstupu SwitchF false a BlinkF
- int EnableF[8] = {0, 0, 2, 3, 4, 5, 6, 7}; //jaky vstup musi byt aktivovan pro jeho povolení tzn aby fungoval vstup 5 musí byt zapnutý vstup 2. Neměnící se číslo vstupu neovlivňuje funkcni a vstup je automaticky povolen. Vstupy se počítají od 0
- int DualF[8] = {0, 0, 2, 3, 4, 5, 6, 7}; //zde nastavený vstup při pravní aktivaci rozsvítí svůj výstup a při druhé zhasne svůj na rozsvítí zde nastavený, chová se jako přepínač. Vstupy se počítají od 0
- int casbliku = 400; //cas pro blinkry
- int INPins[8] = {7, 6, 5, 1, 0, 4, 3, 2}; //Piny na které jesou připojeny vstupy. Vstup vyžaduje PullUP rezistor a reaguje na připojení 0
- int OUTPins[8] = {9, 10, A0, A1, A2, A3, A4, A5}; //Piny výstupů
- int SwitchState[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- int BlinkState[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- long BlinkTime[8];
- int LastState[8];
- long blikacka = 0 ;
- int blika = 0;
- long starttime = millis();
- void setup() {
- pinMode(LED, OUTPUT);
- for (int i = 0; i < 8; i++) {
- pinMode(INPins[i], INPUT);
- pinMode(OUTPins[i], OUTPUT);
- }
- }
- void loop() {
- starttime = millis();
- // put your main code here, to run repeatedly:
- for (int i = 0; i < 8; i++) {
- if (LastState[i] != digitalRead(INPins[i])) {
- LastState[i] = digitalRead(INPins[i]);
- if (SwitchF[i]) {
- if (LastState[i] == 0) {
- if (SwitchState[i] == 0) {
- SwitchState[i] = 1;
- if (SwitchState[EnableF[i]] == 1) {
- BlinkTime[i] = millis();
- if (BlinkF[i]) BlinkState[i] = 1;
- if (DualF[i] != i) {
- digitalWrite(OUTPins[i], HIGH);
- digitalWrite(OUTPins[DualF[i]], LOW);
- } else {
- digitalWrite(OUTPins[i], HIGH);
- }
- }
- } else {
- SwitchState[i] = 0;
- if (DualF[i] != i) {
- if (SwitchState[DualF[i]] == 1) {
- digitalWrite(OUTPins[i], LOW);
- digitalWrite(OUTPins[DualF[i]], HIGH);
- }
- } else {
- digitalWrite(OUTPins[DualF[i]], LOW);
- digitalWrite(OUTPins[i], LOW);
- }
- }
- }
- } else { //funkce tlacitka switchF false
- if (!Invert[i]) {
- if (LastState[i] == 1) digitalWrite(OUTPins[i], LOW);
- else digitalWrite(OUTPins[i], HIGH);
- } else {
- if (LastState[i] == 0) digitalWrite(OUTPins[i], LOW);
- else digitalWrite(OUTPins[i], HIGH);
- }
- }
- }
- if (SwitchF[i]) {
- if (SwitchState[DualF[i]] == 0) {
- digitalWrite(OUTPins[i], LOW);
- digitalWrite(OUTPins[DualF[i]], LOW);
- }
- }
- bool blikat = false;
- if (SwitchF[i]) {
- if (BlinkF[i]) {
- if (SwitchState[i] == 1) {
- if (!Invert[i]) blikat = true;
- } else {
- if (Invert[i]) blikat = true;
- }
- }
- } else {
- if (BlinkF[i]) {
- if (LastState[i] == 0) {
- if (!Invert[i]) blikat = true;
- } else {
- if (Invert[i]) blikat = true;
- }
- }
- }
- if (blikat) {
- if (millis() - BlinkTime[i] >= casbliku) {
- BlinkTime[i] = millis();
- if (BlinkState[i] == 1) {
- digitalWrite(OUTPins[i], LOW);
- BlinkState[i] = 0;
- } else {
- digitalWrite(OUTPins[i], HIGH);
- BlinkState[i] = 1;
- }
- }
- }
- //Kontrolka behu MCU
- if (millis() - blikacka >= casbliku) {
- blikacka = millis();
- if (blika == 1) {
- digitalWrite(LED, LOW);
- blika = 0;
- } else {
- digitalWrite(LED, HIGH);
- blika = 1;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement