편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2021.04.11

    a bytes-like object is required, not 'str' 오류 질문있습니다.


    import matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    from matplotlib import style
    from matplotlib.colors import BoundaryNorm
    from matplotlib.ticker import MaxNLocator
    import numpy as np
    import serial #Import Serial Library
    
    import time
    from time import sleep
    
    arduinoSerialData = serial.Serial('COM6',115200) #Create Serial port object called arduinoSerialData
    size_of_the_matrix = 5
    
    x, y = np.meshgrid(np.linspace(0,5,6), np.linspace(0,5,6)) #each axis is from 0 to 3 devided in 4 sections
    
    distances_matrix = np.zeros((size_of_the_matrix,size_of_the_matrix))
    
    fig = plt.figure(figsize=None,facecolor='white')
    
    ax2 = plt.subplot()
    quad1 = ax2.pcolormesh(x,y,distances_matrix,vmin=0,vmax=3000,shading='flat')
    bar = fig.colorbar(quad1, ax=ax2)
    bar.set_label("Ranges in each ROI (mm)")
    ax2.set_xlabel('X')
    ax2.set_ylabel('Y')
    
    def init():
        quad1.set_array([])
        return quad1
    
    def animate(iter):
        global distances_matrix
        if (arduinoSerialData.inWaiting()>0): #Check if data is on the serial port
            data_receving_from_arduino_as_string= arduinoSerialData.readline()
            distances_in_string = data_receving_from_arduino_as_string.split(',') #Convering the data                                     received from the arduino from string to a float
            distances_in_string.pop()
            distances = [float(i) for i in distances_in_string]
    
            if(len(distances)==size_of_the_matrix*size_of_the_matrix):         
              distances_matrix = np.reshape(distances, (size_of_the_matrix, size_of_the_matrix))
    
              b = distances_matrix[:,0:1]
              #print b
              a = distances_matrix [:,1:5]
              #print a
              c = np.concatenate((a,b), axis =1) 
    
              distances_matrix = np.flipud(c)
              #distances_matrix = c
    
        #print distances_matrix
        quad1.set_array(distances_matrix.ravel())
    
    anim = animation.FuncAnimation(fig,animate ,interval=100,blit=False,repeat=False)
    plt.show()
    

    이코드에서 제목과같은 오류가 발생해 distances = [float(i) for i in distances_in_string] 부분을 distances = [float(i.decode()) for i in distances_in_string] 와같은 방식으로 바꿔봐도 해결이 되지않습니다. 어디가 잘못된걸까요?

    에러메세지 전문은 아래와 같습니다!

    PS C:\Users\hjj96> & python "c:/Users/hjj96/Desktop/Lidar-using-VL53L1X-            master/Files_for_demo/Files for demo/Read_and_plot_2d_map.py"
       Traceback (most recent call last):
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\backend_bases.py", line 1216, in             _on_timer
           ret = func(*args, **kwargs)
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1477, in _step
            still_going = super()._step(*args)
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1189, in _step
        self._dra    w_next_frame(framedata, self._blit)
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1208, in     _draw_next_frame
        self._draw_frame(framedata)
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1776, in     _draw_frame
        self._drawn_artists = self._func(framedata, *self._args)
      File "c:/Users/hjj96/Desktop/Lidar-using-VL53L1X-master/Files_for_demo/Files for     demo/Read_and_plot_2d_map.py", line 44, in animate
        distances_in_string = data_receving_from_arduino_as_string.split(',') #Convering the data     received from the arduino from string to a float
    TypeError: a bytes-like object is required, not 'str'
    
  • 프로필 한장희님의 편집
    날짜2021.04.10

    a bytes-like object is required, not 'str' 오류 질문있습니다.


    import matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    from matplotlib import style
    from matplotlib.colors import BoundaryNorm
    from matplotlib.ticker import MaxNLocator
    import numpy as np
    import serial #Import Serial Library
    
    import time
    from time import sleep
    
    arduinoSerialData = serial.Serial('COM6',115200) #Create Serial port object called arduinoSerialData
    size_of_the_matrix = 5
    
    
    x, y = np.meshgrid(np.linspace(0,5,6), np.linspace(0,5,6)) #each axis is from 0 to 3 devided in 4 sections
    
    
    distances_matrix = np.zeros((size_of_the_matrix,size_of_the_matrix))
    
    
    
    
    fig = plt.figure(figsize=None,facecolor='white')
    
    ax2 = plt.subplot()
    quad1 = ax2.pcolormesh(x,y,distances_matrix,vmin=0,vmax=3000,shading='flat')
    bar = fig.colorbar(quad1, ax=ax2)
    bar.set_label("Ranges in each ROI (mm)")
    ax2.set_xlabel('X')
    ax2.set_ylabel('Y')
    
    
    
    def init():
        quad1.set_array([])
        return quad1
    
    def animate(iter):
        global distances_matrix
        if (arduinoSerialData.inWaiting()>0): #Check if data is on the serial port
            data_receving_from_arduino_as_string= arduinoSerialData.readline()
            distances_in_string = data_receving_from_arduino_as_string.split(',') #Convering the data                                     received from the arduino from string to a float
            distances_in_string.pop()
            distances = [float(i) for i in distances_in_string]
    
            if(len(distances)==size_of_the_matrix*size_of_the_matrix):
    
    
              distances_matrix = np.reshape(distances, (size_of_the_matrix, size_of_the_matrix))
    
    
              b = distances_matrix[:,0:1]
              #print b
              a = distances_matrix [:,1:5]
              #print a
              c = np.concatenate((a,b), axis =1) 
    
              distances_matrix = np.flipud(c)
              #distances_matrix = c
    
    
        #print distances_matrix
        quad1.set_array(distances_matrix.ravel())
    
    
    
    
    
    anim = animation.FuncAnimation(fig,animate ,interval=100,blit=False,repeat=False)
    plt.show()
    

    이코드에서 제목과같은 오류가 발생해 distances = [float(i) for i in distances_in_string] 부분을 distances = [float(i.decode()) for i in distances_in_string] 와같은 방식으로 바꿔봐도 해결이 되지않습니다... 어디가 잘못된걸까요?

    에러메세지 전문은 아래와 같습니다!

    PS C:\Users\hjj96> & python "c:/Users/hjj96/Desktop/Lidar-using-VL53L1X-            master/Files_for_demo/Files for demo/Read_and_plot_2d_map.py"
       Traceback (most recent call last):
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\backend_bases.py", line 1216, in             _on_timer
           ret = func(*args, **kwargs)
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1477, in _step
            still_going = super()._step(*args)
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1189, in _step
        self._dra    w_next_frame(framedata, self._blit)
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1208, in     _draw_next_frame
        self._draw_frame(framedata)
      File "C:\Users\hjj96\anaconda3\lib\site-packages\matplotlib\animation.py", line 1776, in     _draw_frame
        self._drawn_artists = self._func(framedata, *self._args)
      File "c:/Users/hjj96/Desktop/Lidar-using-VL53L1X-master/Files_for_demo/Files for     demo/Read_and_plot_2d_map.py", line 44, in animate
        distances_in_string = data_receving_from_arduino_as_string.split(',') #Convering the data     received from the arduino from string to a float
    TypeError: a bytes-like object is required, not 'str'