Improved calibration function
The new calibration function is now faster by several minutes
This commit is contained in:
		| @@ -154,23 +154,42 @@ class EPD: | |||||||
|     self.digital_write(self.reset_pin, GPIO.HIGH) |     self.digital_write(self.reset_pin, GPIO.HIGH) | ||||||
|     self.delay_ms(200) |     self.delay_ms(200) | ||||||
|  |  | ||||||
|   def calibrate_display(no_of_cycles): |   def calibrate_display(self, no_of_cycles): | ||||||
|     """Function for Calibration""" |     """Function for Calibration""" | ||||||
|     black = Image.new('1', (EPD_WIDTH, EPD_HEIGHT), 'black') |      | ||||||
|     white = Image.new('1', (EPD_WIDTH, EPD_HEIGHT), 'white') |     if display_type == 'colour': | ||||||
|     red = Image.new('RGB', (EPD_WIDTH, EPD_HEIGHT), 'red') |       packets = int(self.width / 2 * self.height) | ||||||
|  |     if display_type == 'black_and_white': | ||||||
|  |       packets = int(self.width / 4 * self.height) | ||||||
|  |      | ||||||
|  |     white, red, black = 0x33, 0x04, 0x00 | ||||||
|  |      | ||||||
|  |     self.init() | ||||||
|     print('----------Started calibration of E-Paper display----------') |     print('----------Started calibration of E-Paper display----------') | ||||||
|     for _ in range(no_of_cycles): |     for _ in range(no_of_cycles): | ||||||
|  |       self.send_command(DATA_START_TRANSMISSION_1) | ||||||
|       print('Calibrating black...') |       print('Calibrating black...') | ||||||
|       self.show_image(black) |       [self.send_data(black) for i in range(packets)] | ||||||
|       if display_type == "colour": |       self.send_command(DISPLAY_REFRESH) | ||||||
|         print('calibrating red...') |       self.wait_until_idle() | ||||||
|         self.show_image(red) |        | ||||||
|  |       if display_type == 'colour': | ||||||
|  |         print('Calibrating red...') | ||||||
|  |         self.send_command(DATA_START_TRANSMISSION_1) | ||||||
|  |         [self.send_data(red) for i in range(packets)] | ||||||
|  |         self.send_command(DISPLAY_REFRESH) | ||||||
|  |         self.wait_until_idle() | ||||||
|  |  | ||||||
|       print('Calibrating white...') |       print('Calibrating white...') | ||||||
|       self.show_image(white) |       self.send_command(DATA_START_TRANSMISSION_1) | ||||||
|  |       [self.send_data(white) for i in range(packets)] | ||||||
|  |       self.send_command(DISPLAY_REFRESH) | ||||||
|  |       self.wait_until_idle() | ||||||
|  |  | ||||||
|       print('Cycle {0} of {1} complete'.format(_+1, no_of_cycles)) |       print('Cycle {0} of {1} complete'.format(_+1, no_of_cycles)) | ||||||
|  |        | ||||||
|     print('-----------Calibration complete----------') |     print('-----------Calibration complete----------') | ||||||
|  |     self.sleep() | ||||||
|  |  | ||||||
|   def reduce_colours(self, image): |   def reduce_colours(self, image): | ||||||
|     buffer = numpy.array(image) |     buffer = numpy.array(image) | ||||||
| @@ -188,6 +207,26 @@ class EPD: | |||||||
|     image = Image.fromarray(buffer) |     image = Image.fromarray(buffer) | ||||||
|     return image |     return image | ||||||
|  |  | ||||||
|  |   def clear(self, colour='white'): | ||||||
|  |     if display_type == 'colour': | ||||||
|  |       packets = int(self.width / 2 * self.height) | ||||||
|  |     if display_type == 'black_and_white': | ||||||
|  |       packets = int(self.width / 4 * self.height) | ||||||
|  |      | ||||||
|  |     if colour == 'white': data = 0x33 | ||||||
|  |     if colour == 'red': data = 0x04 | ||||||
|  |     if colour == 'black': data = 0x00 | ||||||
|  |  | ||||||
|  |     self.init() | ||||||
|  |     self.send_command(DATA_START_TRANSMISSION_1) | ||||||
|  |     [self.send_data(data) for _ in range(packets)] | ||||||
|  |     self.send_command(DISPLAY_REFRESH) | ||||||
|  |     print('waiting until E-Paper is not busy') | ||||||
|  |     self.delay_ms(100) | ||||||
|  |     self.wait_until_idle() | ||||||
|  |     print('E-Paper free') | ||||||
|  |     self.sleep() | ||||||
|  |  | ||||||
|   def get_frame_buffer(self, image): |   def get_frame_buffer(self, image): | ||||||
|     imwidth, imheight = image.size |     imwidth, imheight = image.size | ||||||
|     if imwidth == self.height and imheight == self.width: |     if imwidth == self.height and imheight == self.width: | ||||||
| @@ -237,20 +276,20 @@ class EPD: | |||||||
|         j = 0 |         j = 0 | ||||||
|         while (j < 4): |         while (j < 4): | ||||||
|           if ((temp1 & 0xC0) == 0xC0): |           if ((temp1 & 0xC0) == 0xC0): | ||||||
|             temp2 = 0x03 |             temp2 = 0x03 #white | ||||||
|           elif ((temp1 & 0xC0) == 0x00): |           elif ((temp1 & 0xC0) == 0x00): | ||||||
|             temp2 = 0x00 |             temp2 = 0x00 #black | ||||||
|           else: |           else: | ||||||
|             temp2 = 0x04 |             temp2 = 0x04 #red | ||||||
|           temp2 = (temp2 << 4) & 0xFF |           temp2 = (temp2 << 4) & 0xFF | ||||||
|           temp1 = (temp1 << 2) & 0xFF |           temp1 = (temp1 << 2) & 0xFF | ||||||
|           j += 1 |           j += 1 | ||||||
|           if((temp1 & 0xC0) == 0xC0): |           if((temp1 & 0xC0) == 0xC0): | ||||||
|             temp2 |= 0x03 |             temp2 |= 0x03 #white | ||||||
|           elif ((temp1 & 0xC0) == 0x00): |           elif ((temp1 & 0xC0) == 0x00): | ||||||
|             temp2 |= 0x00 |             temp2 |= 0x00 #black | ||||||
|           else: |           else: | ||||||
|             temp2 |= 0x04 |             temp2 |= 0x04 #red | ||||||
|           temp1 = (temp1 << 2) & 0xFF |           temp1 = (temp1 << 2) & 0xFF | ||||||
|           self.send_data(temp2) |           self.send_data(temp2) | ||||||
|           j += 1 |           j += 1 | ||||||
| @@ -261,16 +300,16 @@ class EPD: | |||||||
|         j = 0 |         j = 0 | ||||||
|         while (j < 8): |         while (j < 8): | ||||||
|           if(temp1 & 0x80): |           if(temp1 & 0x80): | ||||||
|             temp2 = 0x03 |             temp2 = 0x03 #white | ||||||
|           else: |           else: | ||||||
|             temp2 = 0x00 |             temp2 = 0x00 #black | ||||||
|           temp2 = (temp2 << 4) & 0xFF |           temp2 = (temp2 << 4) & 0xFF | ||||||
|           temp1 = (temp1 << 1) & 0xFF |           temp1 = (temp1 << 1) & 0xFF | ||||||
|           j += 1 |           j += 1 | ||||||
|           if(temp1 & 0x80): |           if(temp1 & 0x80): | ||||||
|             temp2 |= 0x03 |             temp2 |= 0x03 #white | ||||||
|           else: |           else: | ||||||
|             temp2 |= 0x00 |             temp2 |= 0x00 #black | ||||||
|           temp1 = (temp1 << 1) & 0xFF |           temp1 = (temp1 << 1) & 0xFF | ||||||
|           self.send_data(temp2) |           self.send_data(temp2) | ||||||
|           j += 1 |           j += 1 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user