Relay counter

Dependencies:   TM1638 mbed mbed-rtos AT45

Files at this revision

API Documentation at this revision

Comitter:
Oleg_B
Date:
Mon Feb 15 04:03:12 2021 +0000
Parent:
0:1b4c0e7c9316
Commit message:
relay - counter

Changed in this revision

main_count_v1.cmm Show diff for this revision Revisions of this file
diff -r 1b4c0e7c9316 -r 36d6279f43d5 main_count_v1.cmm
--- a/main_count_v1.cmm	Thu Jan 28 14:18:16 2021 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,267 +0,0 @@
-
-/**************rele-counter v1  **********************************/
-//  при включении восстанавливаются значения текущие и уставка  
-//  при подаче импульсов +24В на счетный вход значение  увеличиваются +1
-//  при подаче +24В на вхд сброса, значения сбрасываются  
-//  реле включается если  значение равно или больше  установленного
-//
-
-
-
-#include "mbed.h"
-#include "rtos.h"
-#include "TM1638.h"
-#include "AT45.h"
-
-
-// -------  input/output  ----------------
-DigitalOut  led(PC_13);
-DigitalOut  rel(PA_15);
-DigitalIn   in1(PA_8);
-DigitalIn   in2(PA_9);
-DigitalIn   in3(PA_10);
-
-//  -------  displey --------------------
-TM1638_LEDKEY8 LEDKEY8(PB_15,PB_14,PB_13, PB_12);
-TM1638::KeyData_t keydata; 
-
-
-//----------- SPI FLASH  ------------------------
-SPI 	spi(PA_7, PA_6, PA_5); 	// mosi, miso, sclk
-AT45 	spif(&spi, PA_4);		// NSS
-
-char *spi_buffer = (char*) malloc(64);
-char str[10]; 
-
-
-// --------  глоб.переменные ---------------
-int present_val = 0;				// текущее заначение 
-int present_val_last = 0;			// текущее значение (старое)
-int max_value = 0;					// значение  вкл. реле
-
-int  led1=0;						//  индикация LED1
-int  led2=0;						//  индикация LED2
-int  led3=0;						//  индикация LED3
-
-// --------  Прототипы функций:  ----------
-void count_value();
-
-
-/********************************************************************/
-int main() {
-	
-    //  предустановка  значений 
-    int update = 0;
-    int update2 = 0;
-    int delay_update_x10 = 2000;			//  задержка  перед  +/-  x_inreasing_decreasing
-    int time_update_increase = 0;			//  отсчет времени до  +10
-    int time_update_decrease = 0;			//  отсчет времени до -10
-    int delay_cycle = 25;					//  период вывода инф. на дисплей
-    int once_increase = 0;
-    int once_decrease = 0;
-    int x_inreasing_decreasing = 10;		//	+/-  после удержания кнопки
-   
-    
-    int write_page_time = 5000;				//  время до  записи  max_value
-    int timer_to_write_page = 0;			//  отсчет времени до  записи  max_value
-    int write_page_start = 0;				//  старт процедуры записи 
-    
-    
-    // Вычитываем сохраненное максимальное значение (11 стр для записи)
-    spif.read_page(spi_buffer, 11);
-    max_value = atoi(spi_buffer);
-    
-    // Вычитываем сохраненное текущее значение (12 стр для записи)
-    spif.read_page(spi_buffer, 12);
-    present_val = atoi(spi_buffer);
-    
-    // Делаем текущее значение != текущему прошлому значение
-    present_val_last = present_val + 10;
-    
-    // Поток для работы с текущим значением
-    Thread count_thread;
-    count_thread.start(count_value);
-    
-	
-	while(1) {
-		
-		/***  обработка нажатия кнопок   ***/
-		
-		LEDKEY8.getKeys(&keydata);
-		
-		// Нажимаем кнопку X, текущее значение = 0
-		if(keydata[LEDKEY8_SW3_IDX] == LEDKEY8_SW3_BIT) {
-			present_val = 0;
-		}
-		
-		
-		// Нажимаем кнопку увеличить 
-		if(keydata[LEDKEY8_SW1_IDX] == LEDKEY8_SW1_BIT) {
-			if(keydata[LEDKEY8_SW2_IDX] != LEDKEY8_SW2_BIT) {
-				time_update_increase = time_update_increase + delay_cycle;
-				
-				// Один раз делаем +1
-				if(once_increase == 0) {
-					once_increase = 1;
-					if(max_value<999){max_value = max_value + 1;}
-					update = 0;
-				}
-				
-				write_page_start = 1;
-				timer_to_write_page = 0;
-			}
-		}
-		else {
-			time_update_increase = 0;
-			once_increase = 0;
-		}
-		
-		
-		
-		// Нажимаем кнопку уменьшить
-		if(keydata[LEDKEY8_SW2_IDX] == LEDKEY8_SW2_BIT) {
-			if(keydata[LEDKEY8_SW1_IDX] != LEDKEY8_SW1_BIT) {
-				time_update_decrease = time_update_decrease + delay_cycle;
-				
-				// Один раз делаем -1
-				if(once_decrease == 0) {
-					once_decrease = 1;
-					if(max_value>0){max_value = max_value - 1;}
-					update = 0;
-				}
-				
-				write_page_start = 1;
-				timer_to_write_page = 0;
-			}
-		}
-		else {
-			once_decrease = 0;
-			time_update_decrease = 0;
-		}
-		
-		
-		
-		
-		// При удержании кнопки увеличить  на +10
-		if(keydata[LEDKEY8_SW1_IDX] == LEDKEY8_SW1_BIT) {
-			if(time_update_increase >= delay_update_x10) {
-				time_update_increase = delay_update_x10 - delay_cycle*10;
-				if(max_value<=990){max_value = max_value + x_inreasing_decreasing;}
-				update = 0;
-			}
-		}
-		
-		
-		
-		
-		// При удержании  кнопки уменьшить на -10
-		if(keydata[LEDKEY8_SW2_IDX] == LEDKEY8_SW2_BIT) {
-			if(time_update_decrease >= delay_update_x10) {
-				time_update_decrease = delay_update_x10 - delay_cycle*10;
-				if(max_value>10){max_value = max_value - x_inreasing_decreasing;}
-				update = 0;
-			}
-		}
-		
-		
-		
-		// Записываем в память максимальное значение 
-		// через время write_page_time после нажатий кнопок
-		if(write_page_start == 1) {
-			timer_to_write_page = timer_to_write_page + delay_cycle;
-			
-			if(timer_to_write_page >= write_page_time) {
-				write_page_start = 0;
-				timer_to_write_page = 0;
-				sprintf(spi_buffer, "%d", max_value);
-				spif.page_erase(11);  
-				spif.write_page(spi_buffer, 11);
-				
-				LEDKEY8.locate(0);
-				LEDKEY8.printf("   ");
-				Thread::wait(500);
-				LEDKEY8.locate(0);
-				LEDKEY8.printf("%d", max_value);
-			}
-		}
-		
-		
-		
-		/***  вывод на дисплей  ***/
-		
-		led = !led ;
-		
-		LEDKEY8.cls();
-		LEDKEY8.setBrightness(TM1638_BRT1);
-		LEDKEY8.locate(0);
-		LEDKEY8.printf("%d", max_value);
-		LEDKEY8.locate(3);
-		LEDKEY8.printf("%d", present_val);
-		if(led1==1){LEDKEY8.setIcon(TM1638_LEDKEY8::LD1);}else{LEDKEY8.clrIcon(TM1638_LEDKEY8::LD1);}
-		if(led2==1){LEDKEY8.setIcon(TM1638_LEDKEY8::LD2);}else{LEDKEY8.clrIcon(TM1638_LEDKEY8::LD2);}
-		if(led3==1){LEDKEY8.setIcon(TM1638_LEDKEY8::LD3);}else{LEDKEY8.clrIcon(TM1638_LEDKEY8::LD3);}
-				
-		
-		Thread::wait(delay_cycle);
-	}
-}
-
-/****************************************************************/
-
-// Поток работы с текущим значением 10msec
-void count_value() {
-	
-	int  c_inp1=0;
-	int  c_inp2=0;
-	int  c_inp3=0;
-	int  m_inp1=0;
-	int  m_inp2=0;
-	int  m_inp3=0;
-	
-	while(1) {
-		
-		//  фиксируем значения
-		if(in1==0){c_inp1=1;}else{c_inp1=0;}
-		if(in2==0){c_inp2=1;}else{c_inp2=0;}
-		if(in3==0){c_inp3=1;}else{c_inp3=0;}
-		
-		
-		// сохраняем тек.значение  в 12 стр. при выкл. питания
-		if(c_inp1==0 && m_inp1==1){
-			sprintf(spi_buffer, "%d", present_val);
-			spif.page_erase(12);  
-			spif.write_page(spi_buffer, 12);
-		}
-		
-		// подсчет импульсов по входу 1
-		if(c_inp2==1 && m_inp2==0){
-			present_val++;
-		}
-		
-		// сбрасываем текущее значение по входу 2
-		if(c_inp3==1 && m_inp3==0){
-			present_val=0;
-		}
-		
-		
-		// управление реле
-		if(present_val>=max_value){	rel=1; }else{rel=0;	}
-		
-		
-		// управляем светодиодами
-		if(rel==1)   {led1=1;}else{led1=0;}
-		if(c_inp2==1){led2=1;}else{led2=0;}
-		if(c_inp3==1){led3=1;}else{led3=0;}
-		
-
-		// сохраняем значени 
-		m_inp1=c_inp1;
-		m_inp2=c_inp2;
-		m_inp3=c_inp3;
-		
-		
-		Thread::wait(5);
-	}
-}
-
-