https://circuitdigest.com/microcontroller-projects/arduino-oscilloscope-code-circuit
Для тех, кто программирует на Python в Windows, рекомендую простой редактор https://thonny.org/
With pip installed, we can now install the other libraries we need.
Open the command prompt for windows users, terminal for linux users and enter the following;
pip install pyserial
With this done, install matplotlib using;
pip install matplotlib
Drawnow is sometimes installed alongside matplotlib but just to be sure, run;
pip install drawnow
Немного скорректированный код
import time import matplotlib.pyplot as plt from drawnow import * import serial val = [ ] cnt = 0 #create the serial port object port = serial.Serial('COM6', 9600, timeout=0.5) plt.ion() #create the figure function def makeFig(): plt.ylim(-1023,1023) plt.title('Osciloscope') plt.grid(True) plt.ylabel('data') plt.plot(val, 'ro-', label='Channel 0') plt.legend(loc='lower right') while (True): port.write(b's') #handshake with Arduino if (port.inWaiting()):# if the arduino replies value = port.readline()# read the reply print(value)#print so we can monitor it decode = value.decode('utf-8').strip() print(decode) number = int(decode) #convert received data to integer print('Channel 0: {0}'.format(number)) # Sleep for half a second. time.sleep(0.01) val.append(number) drawnow(makeFig)#update plot to reflect new data input plt.pause(.000001) cnt = cnt+1 if(cnt>50): val.pop(0)#keep the plot fresh by deleting the data at position 0
int sensorpin = A0; void setup() { // initialize serial communication at 115200 bits per second to match that of the python script: Serial.begin(9600); } void loop() { // read the input on analog pin 0:######################################################## int sensorValue = analogRead(sensorpin); byte data = Serial.read(); if (data == 's') { Serial.println(sensorValue); delay(100); // delay in between reads for stability } }