Jump to content
    

Aaronli

Участник
  • Posts

    26
  • Joined

  • Last visited

Posts posted by Aaronli


  1. Raspberry Pi pico читает последовательные данные, если вы используете uart.readline() будет получать данные не полностью.

    Как я могу решить эту проблему?

  2. Я уже закончил его. Я обновлю его.

    Краткое введение

    Умный дом становится все более распространенным с развитием технологий, эта статья будет посвящена аспектам безопасности проекта интеллектуального контроля доступа.
    В этой статье используется сенсорный экран STONE для отправки команд на MCU для управления реле и модулем MFRC522.
    Принцип считывания карт: путем управления RFID-RC522 модуль, определить ID карты ID близко к ID карты, а затем определить, существует ли ID в базе данных слово типичный, ID является типичным значением слова, если существование проверки через, а затем распечатать соответствующее имя, а затем привести в действие электромагнитный замок таким же образом.

    Необходимые материалы

    • ESP32
    • Электронный замок KOB
    • Реле
    • Сенсорный дисплей STONE STWI070WT-01
    • Модуль MFRC522

    Реализованная функция

    1. регистрация карты.
    2. регистрация имени пользователя и пароля.
    3. проведение картой для разблокировки электронного замка.
    4. Имя пользователя и пароль для разблокировки электронного замка.

    Схема подключения

    connection.thumb.jpg.31a6802f416ebe4635aa88ddb3e313ab.jpg

     

    Разработка графического интерфейса пользователя

    954459843_GUIdesign.thumb.png.b052dc04ff6d43a5941b89bc4c6f97a0.png

     

    Совместное использование кода

    import mfrc522
    import time
    import _thread
    from os import uname
    from machine import Pin, UART
    #from pyb import UART
    #import machine
    
    suos = Pin(32,Pin.OUT)
    uart2 = UART(2, baudrate=115200, rx=16,tx=17,timeout=10)
    
    ESP32_HSPI_CLOCK = 14
    ESP32_HSPI_SLAVE_SELECT = 15
    ESP32_HSPI_MISO = 12
    ESP32_HSPI_MOSI = 13
    ESP32_MFRC522_RST = 5
    
    rx3 = []
    rx_name = []
    user_id_flag = False
    password_flag = False
    temp_id = ''
    temp_mima = ''
    personnel_id = {'zbw':[236,230,169,47],'lbw':[19,165,93,4]}
    personnel_ps = {'zbw':'zbw3366','lbw':'lbwnb'}
    admin_password = ('yyds')
    button_cmd = [16,1]
    edit1_cmd = [16,112]
    edit2_cmd = [16,113]
    edit3_cmd = [16,114]
    
    if uname()[0] == 'esp32':
    	rdr = mfrc522.MFRC522(ESP32_HSPI_CLOCK, ESP32_HSPI_MOSI, ESP32_HSPI_MISO, ESP32_MFRC522_RST, ESP32_HSPI_SLAVE_SELECT)
    
    def do_write():
    	try:
    		(stat, tag_type) = rdr.request(rdr.REQIDL)
    		if stat == rdr.OK:
    			(stat, raw_uid) = rdr.anticoll()
    			if stat == rdr.OK:
    				print("New card detected")
    				print("  - tag type: 0x%02x" % tag_type)
    				print("  - uid : 0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
    				print("")
    				if rdr.select_tag(raw_uid) == rdr.OK:
    					key = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
    					if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK:
    						stat = rdr.write(8, b"\x00\x53\x00\x54\x00\x4F\x00\x4E\x00\x45\x0a\x0b\x0c\x0d\x0e\x0f")
    						rdr.stop_crypto1()
    						if stat == rdr.OK:
    							print("Data written to card")
    						else:
    							print("Failed to write data to card")
    					else:
    						print("Authentication error")
    				else:
    					print("Failed to select tag")
    
    	except KeyboardInterrupt:
    		print("write error")
    
    
    def do_read():
    	while True:
    		try:
    			(stat, tag_type) = rdr.request(rdr.REQIDL)
    
    			if stat == rdr.OK:
    				(stat, raw_uid) = rdr.anticoll()
    				if stat == rdr.OK:
    					print("New card detected")
    					print("  - tag type: 0x%02x" % tag_type)
    					print("  - uid   : 0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
    					print (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])
    					print("")
    					if rdr.select_tag(raw_uid) == rdr.OK: 
    						key = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
    						if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK:
    							print("Address 8 data: %s" % rdr.read(8))
    							for ps in personnel_id:
    								if raw_uid[0:4:1] == personnel_id.get(ps):
    									suos.value(1)
    									print(ps)
    									uart_write(ps, *raw_uid[0:4:1])
    									time.sleep(3)
    									uart2.sendbreak()
    									break
    							rdr.stop_crypto1()
    							time.sleep(3)
    							suos.value(0)
    						else:
    							print("Authentication error")
    					else:
    						print("Failed to select tag")
    			if uart2.any()>1:
    				rx2 = []
    				data_name2 = ''
    				bin_data = uart2.read(40)
    				uart2.sendbreak()
    				rx1 = list(bin_data)
    				for item in rx1:
    					rx2.append(chr(item))
    				print(rx2)
    				if rx1[3:5:1] == button_cmd:
    					data_name_len = rx1[6] - 1
    					data_name = rx2[7:data_name_len+7:1]
    					data_name2 = ''.join(data_name)
    					print(data_name2)
    					if data_name2 == 'back3':
    						return
    		except KeyboardInterrupt:
    			print("read error")
    
    def do_read2 (idd):
    	print(idd)
    	while True:
    		try:
    			(stat, tag_type) = rdr.request(rdr.REQIDL)
    
    			if stat == rdr.OK:
    				(stat, raw_uid) = rdr.anticoll()
    				if stat == rdr.OK:
    					print("New card detected")
    					print("  - tag type: 0x%02x" % tag_type)
    					print("  - uid   : 0x%02x%02x%02x%02x" % (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3]))
    					print (raw_uid[0], raw_uid[1], raw_uid[2], raw_uid[3])
    					print("")
    					if rdr.select_tag(raw_uid) == rdr.OK: 
    						key = [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
    						if rdr.auth(rdr.AUTHENT1A, 8, key, raw_uid) == rdr.OK:
    							print("Address 8 data: %s" % rdr.read(8))
    							personnel_id[idd] = raw_uid[0:4:1]
    							uart_write3(*raw_uid[0:4:1])
    							rdr.stop_crypto1()
    						else:
    							print("Authentication error")
    					else:
    						print("Failed to select tag")
    			if uart2.any()>1:
    				rx2 = []
    				data_name2 = ''
    				bin_data = uart2.read(40)
    				uart2.sendbreak()
    				rx1 = list(bin_data)
    				for item in rx1:
    					rx2.append(chr(item))
    				if rx1[3:5:1] == button_cmd:
    					data_name_len = rx1[6] - 1
    					data_name = rx2[7:data_name_len+7:1]
    					data_name2 = ''.join(data_name)
    					print(data_name2)
    				if data_name2 == 'back1':
    					return
    
    		except KeyboardInterrupt:
    			print("read error")
    
    def uart_write(text, *ids):
    #	print(text, *ids)
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardname1","text":"'+str(text)+'"}>ET')
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid1","text":"'+str(ids)+'"}>ET')
    	uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock1","visible":true}>ET')
    	time.sleep(3)
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardname1","text":"''"}>ET')
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid1","text":"''"}>ET')
    	uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock1","visible":false}>ET')
    
    def uart_write2(text,text2):
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+text+'"}>ET')
    	time.sleep(3)
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+text2+'"}>ET')
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit2","text":"''"}>ET')
    
    def uart_write3(*id2):
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+str(id2)+'"}>ET')
    	time.sleep(3)
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"''"}>ET')
    
    def uart_write4(text,text2):
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"login","text":"'+text+'"}>ET')
    	time.sleep(1)
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"login","text":"'+text2+'"}>ET')
    	time.sleep(1)
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit3","text":"''"}>ET')
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit4","text":"''"}>ET')
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit7","text":"''"}>ET')
    
    def uart_write5():
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"'+str(id2)+'"}>ET')
    	time.sleep(3)
    	uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"cardid","text":"''"}>ET')
    
    def card_zhuce():
    	while True:
    		if uart2.any():
    			user_id = ''
    			password = ''
    			rx2 = []
    			rx_num = 0
    			bin_data = uart2.read(40)
    			uart2.sendbreak()
    			rx1 = list(bin_data)
    			for item in rx1:
    				rx2.append(chr(item))
    				rx_num += 1
    			data_end = rx_num-5
    			data_id_st = rx2[8:13:1]
    			data_id_st2 = ''.join(data_id_st)
    			print(data_id_st2)
    			if data_id_st2 == 'edit1':
    				data_id_st3 = rx2[15:data_end:1]
    				data_id_st4 = ''.join(data_id_st3)
    				print(data_id_st4)
    				if data_id_st4 != '':
    					name = True
    			elif data_id_st2 == 'edit2':
    				data_id_st5 = rx2[15:data_end:1]
    				data_id_st6 = ''.join(data_id_st5)
    				if data_id_st6 == admin_password:
    					admin = True
    					uart_write2('Verification passed!','Please place the card!')
    					do_read2(data_id_st4)
    					return
    
    def mima_zuce():
    	temp_id3 = ''
    	temp_mima3 = ''
    	while True:
    		if uart2.any():
    			user_id = ''
    			password = ''
    			rx2 = []
    			rx_num = 0
    #			data_end = 0
    			bin_data = uart2.read(40)
    			uart2.sendbreak()
    			rx1 = list(bin_data)
    			for item in rx1:
    				rx2.append(chr(item))
    				rx_num += 1
    #				if (rx2[rx_num] == 'T') and (rx2[rx_num-1] == 'E') and (rx2[rx_num-2] == '>'):
    #					break
    			data_end = rx_num-5
    			data_id_st = rx2[8:13:1]
    			data_id_st2 = ''.join(data_id_st)
    			print(data_id_st2)
    			if rx1[3:5:1] == button_cmd:
    				data_name_len = rx1[6] - 1
    				data_name = rx2[7:data_name_len+7:1]
    				data_name2 = ''.join(data_name)
    				print(data_name2)
    				if data_name2 == 'back2':
    					return
    			if data_id_st2 == 'edit3':
    				data_id_st3 = rx2[15:data_end:1]
    				data_id_st4 = ''.join(data_id_st3)
    				print(data_id_st4)
    				user_id_flag = True
    				temp_id3 = data_id_st4
    #				personnel_ps[temp_id] = raw_uid[0:4:1]
    			elif data_id_st2 == 'edit4':
    				data_id_st5 = rx2[15:data_end:1]
    				data_id_st6 = ''.join(data_id_st5)
    				print(data_id_st6)
    #				if personnel_ps.get(temp_id) == data_id_st6:
    				password_flag = True
    				temp_mima3 = data_id_st6
    #					personnel_ps[temp_id] = password_flag
    
    #			print(rx2,user_id_flag,password_flag)
    
    			elif data_id_st2 == 'edit7':
    				data_id_st5 = rx2[15:data_end:1]
    				data_id_st6 = ''.join(data_id_st5)
    				if (data_id_st6 == admin_password) and (password_flag == True) and (user_id_flag == True):
    					admin = True
    					personnel_ps[temp_id3] = temp_mima3
    					password_flag = False
    					user_id_flag = False
    					uart_write4('Verification passed!','login was successful!')
    
    
    def password_loin():
    	temp_id2 = ''
    	temp_mima = ''
    	while True:
    		if uart2.any():
    			user_id = ''
    			password = ''
    			rx2 = []
    			rx_num = 0
    #			data_end = 0
    			bin_data = uart2.read(40)
    			uart2.sendbreak()
    			rx1 = list(bin_data)
    			for item in rx1:
    				rx2.append(chr(item))
    				rx_num += 1
    #				if (rx2[rx_num] == 'T') and (rx2[rx_num-1] == 'E') and (rx2[rx_num-2] == '>'):
    #					break
    			data_end = rx_num-5
    			data_id_st = rx2[8:13:1]
    			data_id_st2 = ''.join(data_id_st)
    			print(data_id_st2)
    			if rx1[3:5:1] == button_cmd:
    				data_name_len = rx1[6] - 1
    				data_name = rx2[7:data_name_len+7:1]
    				data_name2 = ''.join(data_name)
    				print(data_name2)
    				if data_name2 == 'back4':
    					return
    			if data_id_st2 == 'edit5':
    				data_id_st3 = rx2[15:data_end:1]
    				data_id_st4 = ''.join(data_id_st3)
    				print(data_id_st4)
    				if data_id_st4 in personnel_ps:
    					user_id_flag = True
    					temp_id2 = data_id_st4
    			elif data_id_st2 == 'edit6':
    				data_id_st5 = rx2[15:data_end:1]
    				data_id_st6 = ''.join(data_id_st5)
    				print(data_id_st6)
    				print(temp_id2)
    				print(personnel_ps)
    				if personnel_ps.get(temp_id2) == data_id_st6:
    					password_flag = True
    
    #			print(rx2,user_id_flag,password_flag)
    					print(user_id_flag,password_flag)
    					if (password_flag == True) and (user_id_flag == True):
    						uart_write(temp_id2,temp_id2)
    						password_flag = False
    						user_id_flag = False
    						suos.value(1)
    						uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock2","visible":true}>ET')
    						uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit5","text":"''"}>ET')
    						uart2.write('ST<{"cmd_code":"set_text","type":"label","widget":"edit6","text":"''"}>ET')
    						time.sleep(3)
    #						uart_write('student','')
    						suos.value(0)
    						uart2.write('ST<{"cmd_code":"set_visible","type":"widget","widget":"lock2","visible":false}>ET')
    						uart2.sendbreak()
    
    while True:
    	if uart2.any()>1:
    		rx2 = []
    		data_name2 = ''
    		bin_data = uart2.read(40)
    #		time.sleep(1)
    		uart2.sendbreak()
    #		time.sleep(1)
    		rx1 = list(bin_data)
    		for item in rx1:
    			rx2.append(chr(item))
    		print(rx2)
    		if rx1[3:5:1] == button_cmd:
    			data_name_len = rx1[6] - 1
    			data_name = rx2[7:data_name_len+7:1]
    			data_name2 = ''.join(data_name)
    			print(data_name2)
    			if data_name2 == 'card1':
    				card_zhuce()
    			elif data_name2 == 'password1':
    				mima_zuce()
    			elif data_name2 == 'card2':
    				do_read()
    			elif data_name2 == 'password2':
    				password_loin()
    

     

    Video demo

     

  3. Я видел, как кто-то перечислил некоторые из них.

     

    1        atmega8         atmega8         Arduino NG or older w/ ATmega8       
                
    2        atmega16         arduino_atmega16         Arduino-Atmega16       

    3         atmega32         arduino_penguino_avr         Arduino-Penguino AVR         
      
    4         atmega64         arduino_cerebotii         Arduino-Cerebot II atemga64         

    5         atmega128         arduino_amber128         Arduino-Amber 128 14.7456 Mhz         

    6         atmega168         atmega168         Arduino NG or older w/ ATmega168         
                
    7         atmega168         bt         Arduino BT w/ ATmega168                   
      
    8         atmega168         diecimila         Arduino Diecimila, Duemilanove, or Nano w/ ATmega168         
                
    9         atmega168         mini         Arduino Mini                   
                
    10         atmega168         pro5v         Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168                   
                
    11         atmega168         lilypad         LilyPad Arduino w/ ATmega168                   
                
    12         atmega168         pro         Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168                   
                
    13         atmega169         arduino_butterfly         Arduino-Butterfly stk500         

    14         atmega328p         atmega328         Arduino Duemilanove or Nano w/ ATmega328         
                
    15         atmega328p         bt328         Arduino BT w/ ATmega328                   
                
    16         atmega328p         pro5v328         Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328                   
                
    17         atmega328p         fio         Arduino Fio       
                            
    18         atmega328p         lilypad328         LilyPad Arduino w/ ATmega328         
                
    19         atmega328p         pro328         Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328                 
                
    20         atmega640         atmega640         Arduino atmega640                   
                
    21         atmega1280         mega         Arduino Mega       
                
    22         atmega1280         mega1280stk500v2         Arduino Mega1280 stk500v2         
                
    23         atmega1284p         arduino_bahbots1284p         Arduino-BahBots 1284p                   
                
    24         atmega2560         mega2560stk500v2         Arduino Mega2560 stk500v2         
                
    25         atmega2560         arduino_cerebot_plus         Arduino-Cerebot Plus         

    26         atmega2561         arduino_android2561_16         Arduino-Android 2561 16Mhz         

    56         atmega2561         arduino_android2561         Arduino-Android 2561 8Mhz 
  4. Я использую плату манипулятора для управления, программа имеет несколько параметров, которые необходимо настроить, каждый раз, чтобы изменить параметры - записать программу - увидеть эффект - и затем изменить параметры --восстановить программу ...... процесс очень хлопотный, занимает много времени и уменьшает срок службы микросхемы. Можно ли легко изменить значение связанных переменных во время отладки Keil? Таким образом, мы сможем запускать программу непосредственно после изменения значения каждой переменной, избегая повторного процесса прожига. Как именно это сделать?

  5. У меня сейчас есть несколько микроконтроллеров mega16. Я хотел бы спросить, правда ли, что микроконтроллеры серии mega могут быть скомпилированы и загружены через arduino's ide после того, как Bootloader почищен через USBasp?

  6. В последнее время я разрабатываю микроконтроллерную систему на базе ATMega2560, поскольку в ней больше периферийных модулей, и в то же время я хочу разрабатывать другие платы в будущем, я могу немного изменить последний код, чтобы применить его к новой плате.
    После проверки большого количества информации, я обнаружил, что APM использует такую идею: слой аппаратной абстракции; есть также система Android также использует концепцию слоя аппаратной абстракции, такой дизайн может значительно улучшить совместимость. Однако, изучив исходный код APM, я обнаружил, что не могу найти никакой информации о доступе к оборудованию, возможно ли, что C++ не может получить доступ к оборудованию напрямую?

  7. Используя электромагнитные замки, RFID-считыватели, микроконтроллеры ESP32 и сенсорные экраны, мы разработали систему контроля доступа, которую можно разблокировать, проведя по карте и введя пароль.

    Тогда мне нужно многое узнать о радиочастотах.

    Если все пойдет хорошо, возможно, он сможет добиться большего.

     

    1.png

  8. Мне показалось, что это интересный проект, и поэтому я хотел поделиться им. Если я могу делиться здесь только очень продвинутыми проектами, то в следующий раз я буду стараться публиковать только продвинутые проекты.

  9. Это необходимый процесс, это набор инструкций для использования этого экрана для связи с микроконтроллером, я также недавно пытался понять, как сократить эти коды и сделать их циклическими, к сожалению, я не профессионал.

  10. Материалы, необходимые для эксперимента

    Принцип работы системы

    Задайте, что первое нажатие на экран должно быть O, второе нажатие на экран - X, проделайте этот цикл. Установите 8 массивов для хранения количества O и X в каждой строке, столбце и диагонали каждой сетки, до тех пор, пока есть три одинаковых знака является победа, то будет мигающий красный ящик, чтобы доказать победу строки, столбца или диагонали, а затем нажмите сброс, чтобы начать игру снова.

    Простая схема соединения

    0b6259362bac5bb2e82cfb194627ca14aeaba604

    Дизайн графического интерфейса

    0ce026cb00b57bac8965b198c8263e7dc88087a7

    совместное использование кода

    unsigned int r_flag1 = 0;
    uint8_t   RecievedTemp1[30]       = {0};
    //uint8_t   *RecievedTemp1 = new uint8_t[30];
    uint8_t   cout_i = 0;
    unsigned int quan_hang1 = 0;
    unsigned int quan_hang2 = 0;
    unsigned int quan_hang3 = 0;
    unsigned int quan_lie1 = 0;
    unsigned int quan_lie2 = 0;
    unsigned int quan_lie3 = 0;
    unsigned int quan_zuoxia = 0;
    unsigned int quan_youxia = 0;
    
    //unsigned int quan[8]={0};
    //
    unsigned int cha_hang1 = 0;
    unsigned int cha_hang2 = 0;
    unsigned int cha_hang3 = 0;
    unsigned int cha_lie1 = 0;
    unsigned int cha_lie2 = 0;
    unsigned int cha_lie3 = 0;
    unsigned int cha_zuoxia = 0;
    unsigned int cha_youxia = 0;
    unsigned int cha[8]={0};
    void setup()
    {
       Serial.begin(115200);
       for(int i=3; i<=8; i++) 
       pinMode(i,OUTPUT);
    }
    
    void loop(){
    
      if(Serial.available() != 0)
      {
    //    for(cout_i = 0; cout_i < 30; cout_i ++)
    //    {
    //        //RecievedTemp1[cout_i] = Serial.readBytes(RecievedTemp1, 15);
    //        Serial.readBytes(RecievedTemp1, 20);
    //        //Serial.println(RecievedTemp1[cout_i]);
    //    }
        Serial.readBytes(RecievedTemp1, 20);
        for(cout_i = 0; cout_i < 19; cout_i ++)
        {
        Serial.println(RecievedTemp1[cout_i]);
        }
        switch(RecievedTemp1[13])
      {
      case 49:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image2\",\"image\":\"circle\"}>ET"));
            r_flag1 = 1;
            quan_hang1++;
            quan_lie1++;
            quan_youxia++;
    //        quan[0]++;
    //        quan[3]++;
    //        quan[7]++;
            Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\",\"enable\":false}>ET"));
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image2\",\"image\":\"x\"}>ET"));
             r_flag1 = 0;
                cha_hang1++;
                cha_lie1++;
                cha_youxia++;
    //        cha[0]++;
    //        cha[3]++;
    //        cha[7]++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\",\"enable\":false}>ET"));
            }
            
            break;
      case 50:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image3\",\"image\":\"circle\"}>ET"));
            r_flag1 = 1;
            quan_hang1++;
                quan_lie2++;
    //        quan[0]++;
    //        quan[4]++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button2\",\"enable\":false}>ET"));
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image3\",\"image\":\"x\"}>ET"));
             r_flag1 = 0;
             cha_hang1++;
               cha_lie2++;
    //        cha[0]++;
    //        cha[4]++;
               Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button2\",\"enable\":false}>ET"));
            }
            break;
      case 51:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image4\",\"image\":\"circle\"}>ET"));
            r_flag1 = 1;
            quan_hang1++;
                quan_lie3++;
                quan_zuoxia++;
    //        quan[0]++;
    //        quan[5]++;
    //        quan[6]++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button3\",\"enable\":false}>ET"));
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image4\",\"image\":\"x\"}>ET"));
             r_flag1 = 0;
             cha_hang1++;
               cha_lie3++;
                cha_zuoxia++;
    //        cha[0]++;
    //        cha[5]++;
    //        cha[6]++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button3\",\"enable\":false}>ET"));
            }
            break;
      case 52:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image5\",\"image\":\"circle\"}>ET"));
            r_flag1 = 1;
            quan_hang2++;
                quan_lie1++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button4\",\"enable\":false}>ET"));
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image5\",\"image\":\"x\"}>ET"));
             r_flag1 = 0;
             cha_hang2++;
               cha_lie1++;
               Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button4\",\"enable\":false}>ET"));
            }
            break;
      case 53:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image6\",\"image\":\"circle\"}>ET"));
            r_flag1 = 1;
            quan_hang2++;
                quan_lie2++;
                quan_zuoxia++;
                quan_youxia++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button5\",\"enable\":false}>ET"));
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image6\",\"image\":\"x\"}>ET"));
              r_flag1 = 0;
              cha_hang2++;
                cha_lie2++;
                cha_zuoxia++;
                cha_youxia++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button5\",\"enable\":false}>ET"));
            }
            break;       
      case 54:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image7\",\"image\":\"circle\"}>ET"));
            r_flag1 = 1;
            quan_hang2++;
                quan_lie3++;
    //        quan[1]++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button6\",\"enable\":false}>ET"));
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image7\",\"image\":\"x\"}>ET"));
             r_flag1 = 0;
             cha_hang2++;
               cha_lie3++;
               Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button6\",\"enable\":false}>ET"));
            }
            break;       
      case 55:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image8\",\"image\":\"circle\"}>ET"));
            r_flag1 = 1;
            quan_hang3++;
                quan_lie1++;
                quan_zuoxia++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button7\",\"enable\":false}>ET"));
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image8\",\"image\":\"x\"}>ET"));
             r_flag1 = 0;
             cha_hang3++;
               cha_lie1++;
                cha_zuoxia++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button7\",\"enable\":false}>ET"));
            }
            break;        
      case 56:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image9\",\"image\":\"circle\"}>ET"));
            r_flag1 = 1;
            quan_hang3++;
                quan_lie2++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button8\",\"enable\":false}>ET"));
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image9\",\"image\":\"x\"}>ET"));
             r_flag1 = 0;
             cha_hang3++;
               cha_lie2++;
               Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button8\",\"enable\":false}>ET"));
            }
            break;       
      case 57:
            if((r_flag1 == 0)&&(RecievedTemp1[14]==2))
            {
            Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image10\",\"image\":\"circle\"}>ET"));
            r_flag1 = 1;
            quan_hang3++;
                quan_lie3++;
                quan_youxia++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button9\",\"enable\":false}>ET"));
            }
            else if((r_flag1 == 1)&&(RecievedTemp1[14]==2))
            {
              Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image10\",\"image\":\"x\"}>ET"));
             r_flag1 = 0;
             cha_hang3++;
               cha_lie3++;
                cha_youxia++;
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button9\",\"enable\":false}>ET"));
            }
            break;
      case 48:
                r_flag1 = 0;
                quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0;
                quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0;
                quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0;
    //            for(char count_i=50;count_i<58;count_i++)
    //            {
    //              Serial.println((("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image%c\",\"image\":\"bai\"}>ET"),count_i));
    //              }
                Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image2\",\"image\":\"bai\"}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image3\",\"image\":\"bai\"}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image4\",\"image\":\"bai\"}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image5\",\"image\":\"bai\"}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image6\",\"image\":\"bai\"}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image7\",\"image\":\"bai\"}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image8\",\"image\":\"bai\"}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image9\",\"image\":\"bai\"}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image10\",\"image\":\"bai\"}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif4\",\"visible\":false}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif5\",\"visible\":false}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif6\",\"visible\":false}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif7\",\"visible\":false}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif8\",\"visible\":false}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif9\",\"visible\":false}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif10\",\"visible\":false}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif11\",\"visible\":false}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button9\",\"enable\":true}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button8\",\"enable\":true}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button7\",\"enable\":true}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button6\",\"enable\":true}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button5\",\"enable\":true}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button4\",\"enable\":true}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button3\",\"enable\":true}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button2\",\"enable\":true}>ET"));
                Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\",\"enable\":true}>ET"));
                
                break;
      }
      if((quan_hang1==3)||(cha_hang1==3))
          {
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif4\",\"visible\":true}>ET"));
          }
          else if((quan_hang2==3)||(cha_hang2==3))
          {
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif5\",\"visible\":true}>ET"));
          }
          else if((quan_hang3==3)||(cha_hang3==3))
          {
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif6\",\"visible\":true}>ET"));
          }
          else if((quan_lie1==3)||(cha_lie1==3))
          {
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif7\",\"visible\":true}>ET"));
          }
          else if((quan_lie2==3)||(cha_lie2==3))
          {
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif8\",\"visible\":true}>ET"));
          }
          else if((quan_lie3==3)||(cha_lie3==3))
          {
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif9\",\"visible\":true}>ET"));
          }
          else if((quan_zuoxia==3)||(cha_zuoxia==3))
          {
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif11\",\"visible\":true}>ET"));
          }
          else if((quan_youxia==3)||(cha_youxia==3))
          {
                Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif10\",\"visible\":true}>ET"));
          }
      }
    }

    видеодемонстрация

     

  11. Недавно я создаю небольшую игру на HMI и хочу использовать для этого Arduino. Мой код компилируется без проблем, но когда я загружаю его, я получаю ошибку, как показано на рисунке, это потому, что у меня определено слишком много переменных?
    Может кто-нибудь подскажет мне, как это исправить?

    Arduino:1.8.12 (Windows 10), Плата разработки: "Arduino Uno".
    
    Проект использует 6336 байт, что занимает (19%) места в памяти программы. Максимальное значение - 32256 байт. секция данных превышает доступное пространство на плате
    
    Глобальные переменные используют 3046 байт, (148%) динамической памяти, оставляя -998 байт для локальных переменных. Максимальное значение составляет 2048 байт.
    Недостаточно памяти; посетите следующий URL-адрес, чтобы следовать инструкциям по уменьшению использования памяти.
    http://www.arduino.cc/en/Guide/Troubleshooting#size
    Ошибка при компиляции для платы разработки Arduino Uno.
    
    Включите в Файл -> Предпочтения
    опцию "Показывать подробный вывод во время компиляции".
    Этот отчет будет содержать больше информации.

     

  12. Я хочу попросить программу последовательной связи RS232C для микроконтроллера PIC18F4580, функция очень проста: что я посылаю на последовательный помощник, микроконтроллер будет отвечать обратно.
    Вот код, который я написал, чтобы послать 1 в последовательном помощнике, и полученный результат - 40.

    #include
    #pragma config OSC=HS //установите режим осциллятора на режим высокоскоростного кристалла
    #pragma config WDT=OFF //выключить сторожевой таймер
    #pragma config LVP=OFF //выключить низковольтное программирование
    #pragma config DEBUG=ON //разрешить отладку программы
    #pragma config MCLRE=ON //включение разрешения сброса микросхемы
    unsigned int i;
    void delay();
    void PORT_init();
    void USART_init();
    
    /*===== установить задержку =====*/
    void delay()
    {
    for(i=0;i<200;i++)
    { ; ; }
    }
    /*********** инициализация порта ***********/
    void PORT_init()
    {
    TRISC=0x00;
    PORTC=0xff;
    }
    /*********** инициализация последовательного порта ***********/
    void USART_init()
    {
    RCONbits.IPEN=0;
    INTCONbits.GIE=0; // отключить прерывания
    SPBRG=0x19;
    TXSTA=0x24;
    RCSTA=0x90;
    BAUDCONbits.BRG16=0;
    TRISCbits.TRISC6=0;
    TRISCbits.TRISC7=1;
    }
    /*===== главная программа =====*/
    void main()
    {
    unsigned int j=0;
    PORT_init();
    USART_init();
    delay();
    while(1)
    {
    if(PIR1bits.RCIF==1)
    {
    j=RCREG;
    TXREG=j;
    while(!PIR1bits.TXIF);
    PIR1bits.TXIF=0;
    }
    }
    }

     

  13. 32 минуты назад, haker_fox сказал:

    Ага, успехов! Но лучше поступите в Университет. Там знания более фундаментальные и кругозор даётся широкий.

    Не с того начали. Кондиционер это механика и пневматика прежде всего. А дисплей или семисегменник это уже дело десятое. Можно вообще без него.

    Да, вы правы, я должен сначала получить знания о кондиционировании воздуха, у меня есть друг, который изучает автоматизацию, возможно, я могу попросить его о помощи.

  14. 06.06.2021 в 00:49, Obam сказал:

    "Весёлые" ребятишки нынче начались ((-8Ж - кондиционер на базе дисплея (10 дюймов!!!) вместо какой-нибудь инновационной тепловой машины...

    Ну и "пионэрам на заметку": лучшего органа управления чем ручка-"крутилка" (5-6 положений за глаза) и светодиода "в режиме", видят эргономические боги, не придумать.

    Спасибо за ответ, я посмотрю на программы для кондиционеров, в которых есть мониторы.

    19 минут назад, Vasily_ сказал:

    Гораздо интересней под вашу задачу: https://riverdi.com/

    Это выглядит очень хорошо, спасибо большое за рекомендацию!

    Я тщательно сравню разные мониторы, и думаю, что сначала мне может понадобиться немного больше знаний о кондиционерах.

     

  15. 04.06.2021 в 11:16, haker_fox сказал:

    Ха-ха-ха))) Конечно есть! Начните получать образование в хорошем ВУЗе) Кстати, у меня есть пара печатных плат. Возможно ваш дисплей удастся прикрутить к ним.

    Большое спасибо за ваш ответ, сенсорный экран, который я приобрел, представляет собой модуль сенсорного дисплея, который крепится к печатной плате. Я буду тщательно изучать подобные проекты в Интернете.

  16. У меня есть идея для проекта, я хочу сделать проект автомобильного кондиционера.
    Сейчас у меня есть дисплей STONE + интерфейс RS485.

    Есть ли у кого-нибудь хорошие идеи или предложения, пожалуйста?
    Это мой первый раз, когда я делаю подобный проект.

×
×
  • Create New...