Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <LiquidCrystal_PCF8574.h>
- LiquidCrystal_PCF8574 lcd(0x20);
- //назначение пинов
- const int data_pin = 26;
- const int sh_pin = 24;
- const int st_pin = 22;
- const int g5_54_int = 28;
- const int knopka = 30;
- const int svetodiod = 12;
- /*
- //нумерация регистров в байте
- const int rw = 7;
- const int sample = 6;
- const int mux_a2 = 5;
- const int mux_a1 = 4;
- const int mux_a0 = 3;
- const int mux_enable = 2;
- const int allow_g5_54 = 1;
- const int allow_knopka = 0;
- */
- // целые переменные с АЦП, их аналоговые значения, и итераторы
- int a0, a1, a2, a3, a4, i, j, time0, temp, Rn;
- float Un, In, Uo, Io, Ud, In0, Io0, Ud0;
- //байты управляющие ключами и состояниями шунта, мультиплексора, выборки и прерываний
- byte kluchi_Uo;
- byte kluchi_In;
- byte states;
- const byte ones = B11111111;
- const byte zeros = B00000000;
- volatile boolean state;
- volatile int allow_switch;
- //====================================================================================
- void setup() {
- state = true;
- allow_switch = 1;
- // инициализация дисплея и периферии
- lcd.begin(16, 2);
- // настройка цифровых выходов
- pinMode(data_pin, OUTPUT);
- pinMode(sh_pin, OUTPUT);
- pinMode(st_pin, OUTPUT);
- pinMode(svetodiod, OUTPUT);
- pinMode(g5_54_int, INPUT_PULLUP);
- pinMode(knopka, INPUT_PULLUP);
- //PULLUP!!!
- // Назначение прерываний
- attachInterrupt(digitalPinToInterrupt(knopka), button, FALLING);
- ///Обнуление регистров к начальному состоянию
- kluchi_Uo = B11111111;
- kluchi_In = B00000000;
- states = B00000000;
- shiftOut(data_pin,sh_pin,LSBFIRST,states);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_Uo);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_In);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- }
- //=====================================================================================
- void loop() {
- state = true;
- allow_switch = 1;
- ///Обнуление регистров к начальному состоянию
- kluchi_Uo = B11111111;
- kluchi_In = B00000000;
- states = B00000000;
- shiftOut(data_pin,sh_pin,LSBFIRST,states);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_Uo);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_In);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- //очистка дисплея и приветствие
- lcd.setBacklight(255);
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("npuBemcmBue...");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("dla CTAPTA");
- lcd.setCursor(0, 1);
- lcd.print("HA)|(MUTE KHOnKy");
- while (state) {
- continue;
- };
- delay(200);
- state = true;
- digitalWrite(svetodiod,HIGH);
- delay(1000);
- digitalWrite(svetodiod,LOW);
- //========================================================================================
- // обнуляем переменные, в которых хранится значение прямого тока и напряжения
- a0 = 0; a1 = 0;
- //установка нуля
- for (j=0; j <2000; j++) {
- a1 += analogRead(A1);
- };
- In0 = a1/2000 * 0.351;
- /// ЦИКЛ ПРЯМОГО ТОКА
- /// выключаем прямой ток
- kluchi_In = B00000000;
- kluchi_Uo = B00000000;
- states = B00000000;
- for (i=0; i<9; i++) {
- shiftOut(data_pin,sh_pin,LSBFIRST,states);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_Uo);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_In);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- while (state) {
- a0 = 0; a1 = 0;
- for (j=0; j <2000; j++) {
- a0 += analogRead(A0);
- a1 += analogRead(A1);
- };
- Un = a0/2000 * 0.01464;
- In = a1/2000 * 0.351;
- Rn = (Un-0.85)/In*1000;
- if (i == 0) {
- In = 0;
- Rn = 0;
- };
- lcd.setCursor(0,0);
- lcd.clear();
- lcd.print(i);
- lcd.print(" guog nog Inp");
- lcd.setCursor(0, 1);
- lcd.print(Un);
- lcd.print(" ");
- lcd.print(In);
- lcd.print(" ");
- lcd.print(Rn);
- delay(100);
- };
- delay(200);
- state = true;
- digitalWrite(svetodiod,HIGH);
- delay(1000);
- digitalWrite(svetodiod,LOW);
- //выключение текущего диода и включение следующего, после которого цикл повторится
- bitSet(kluchi_In,7-i);
- bitClear(kluchi_In,8-i);
- bitSet(kluchi_Uo,7-i);
- bitClear(kluchi_Uo,8-i);
- };
- //=============================================================================================
- /// ОБЩИЙ ток
- kluchi_In = B11111111;
- kluchi_Uo = B11111111;
- states = B00000000;
- shiftOut(data_pin,sh_pin,LSBFIRST,states);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_Uo);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_In);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- while (state) {
- a0 = 0; a1 = 0;
- //цикл измерения и усреднения значений напряжения с шунта, усилителя и делителя
- for (i=0; i <2000; i++) {
- a0 += analogRead(A0);
- a1 += analogRead(A1);
- };
- Un = a0/2000 * 0.01464;
- In = a1/2000 * 0.351;
- Rn = (Un-0.85)/In*1000;
- //вывод полученных данных на дисплей
- lcd.setCursor(0,0);
- lcd.clear();
- lcd.print("BCE guogbI Inp");
- lcd.setCursor(0, 1);
- lcd.print(Un);
- lcd.print(" ");
- lcd.print(In);
- lcd.print(" ");
- lcd.print(Rn);
- delay(100);
- };
- delay(200);
- state = true;
- digitalWrite(svetodiod,HIGH);
- delay(1000);
- digitalWrite(svetodiod,LOW);
- //=================================================================================================
- //запирание
- kluchi_In = B00000000;
- kluchi_Uo = B11111111;
- states = B00000000;
- shiftOut(data_pin,sh_pin,LSBFIRST,states);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_Uo);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_In);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- lcd.setCursor(0,0);
- lcd.clear();
- lcd.print("BCE 3AnEPTbI");
- lcd.setCursor(0, 1);
- lcd.print("CJIeg. npu6op");
- while (state) {
- continue;
- };
- delay(200);
- state = true;
- digitalWrite(svetodiod,HIGH);
- delay(1000);
- digitalWrite(svetodiod,LOW);
- //==================================================================================================
- // переключение от генератора
- attachInterrupt(digitalPinToInterrupt(g5_54_int), trigger, RISING);
- lcd.setCursor(0,0);
- lcd.clear();
- lcd.print("TEnEpb BKL");
- lcd.setCursor(0, 1);
- lcd.print("reHepamop");
- delay(3000);
- lcd.setCursor(0, 1);
- lcd.print(" ");
- for (i=5; i=0; i--) {
- lcd.print(i);
- delay(1000);
- lcd.setCursor(0, 1);
- lcd.print(" ");
- };
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("cMompume Ha");
- lcd.setCursor(0,1);
- lcd.print("ocquLorpaMMbl");
- while (state) {
- continue;
- };
- detachInterrupt(digitalPinToInterrupt(g5_54_int));
- delay(200);
- state = true;
- digitalWrite(svetodiod,HIGH);
- delay(1000);
- digitalWrite(svetodiod,LOW);
- //=================================================================================================
- //запирание
- kluchi_In = B00000000;
- kluchi_Uo = B11111111;
- states = B00000000;
- shiftOut(data_pin,sh_pin,LSBFIRST,states);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_Uo);
- shiftOut(data_pin,sh_pin,LSBFIRST,kluchi_In);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- lcd.setCursor(0,0);
- lcd.clear();
- lcd.print("BCE 3AnEPTbI");
- lcd.setCursor(0, 1);
- lcd.print("CJIeg. npu6op");
- while (state) {
- continue;
- };
- delay(200);
- state = true;
- digitalWrite(svetodiod,HIGH);
- delay(1000);
- digitalWrite(svetodiod,LOW);
- //==================================================================================================
- //баловство
- lcd.setCursor(0,0);
- lcd.clear();
- lcd.print("nepeklu4aume");
- lcd.setCursor(0, 1);
- lcd.print("guogbl kHonkou");
- allow_switch = 2;
- attachInterrupt(digitalPinToInterrupt(g5_54_int), trigger, RISING);
- while (true) {
- while (state) {
- continue;
- };
- delay(200);
- state = true;
- digitalWrite(svetodiod,HIGH);
- delay(1000);
- digitalWrite(svetodiod,LOW);
- };
- }
- //====================================================================================================
- //прерывание от генератора
- void trigger() {
- switch (allow_switch) {
- case 1:
- shiftOut(data_pin,sh_pin,LSBFIRST,zeros);
- shiftOut(data_pin,sh_pin,LSBFIRST,ones);
- shiftOut(data_pin,sh_pin,LSBFIRST,ones);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- shiftOut(data_pin,sh_pin,LSBFIRST,zeros);
- shiftOut(data_pin,sh_pin,LSBFIRST,zeros);
- shiftOut(data_pin,sh_pin,LSBFIRST,zeros);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- break;
- case 2:
- shiftOut(data_pin,sh_pin,LSBFIRST,zeros);
- shiftOut(data_pin,sh_pin,LSBFIRST,ones);
- shiftOut(data_pin,sh_pin,LSBFIRST,ones);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- break;
- case 3:
- shiftOut(data_pin,sh_pin,LSBFIRST,zeros);
- shiftOut(data_pin,sh_pin,LSBFIRST,zeros);
- shiftOut(data_pin,sh_pin,LSBFIRST,zeros);
- digitalWrite(st_pin,HIGH);
- digitalWrite(st_pin,LOW);
- break;
- }
- }
- void button() {
- state = false;
- // if (allow_switch == 2) {
- // allow_switch = 3;
- // }
- // else if (allow_switch == 3) {
- // allow_switch = 2;
- // };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement