Stap 3: Python code
De Python code leest de binnenkomende seriële data en scheidt van elke lijn langs de tabbladen, zodat u de afzonderlijke waarden voor de X-, Y- en Z-gegevens. Sommige verwerking wordt gedaan om de waarden in hun eigen variabelen.U wilt het uitzetten van de variabelen, wordt de "matplotlib" bibliotheek gebruikt om een geanimeerde grafiek maken. Dit resulteert in een redelijk accurate "live feed", maar grote hoeveelheden sensor activiteit zal de grafiek een beetje achterop te veroorzaken.
Ten slotte is de gegevens opgeslagen in een txt-bestand op een opgegeven locatie. De gegevens kunnen vervolgens worden gelezen terug toen nodig met behulp van de numpy.loadtxt() functie (zie volgende stap voor code). Dit bestandstype is gemakkelijkst lees echter in Python, dus als u wilt de gegevens in een ander programma openen u moet een ander schrijven-functie wilt gebruiken. (ex. gebruik CSV-bestandsindeling gegevens in Excel te openen) Vergeet niet om de locatie van het bestand zodat deze overeenkomen met uw computer de directory wijzigen.
Zie de code voor meer opmerkingen gedetailleerde (of Google of vragen en ik doe mijn best om te verklaren of u aan een uitleg)
{{{
'''
Leest in gegevens over een seriële verbinding en de resultaten live percelen. Alvorens te besluiten de gegevens opgeslagen in een txt-bestand.
'''
seriële importeren
importeren van matplotlib.pyplot als plt
import numpy als np
win32com.client importeren
aangesloten = False
#finds COM-poort die de Arduino brandt (wordt ervan uitgegaan dat slechts één Arduino is aangesloten)
WMI = win32com.client.GetObject("winmgmts:")
poort in wmi. InstancesOf("Win32_SerialPort"):
#print poort. Naam #port. DeviceID, poort. Naam
als "Arduino" in de haven. Naam:
Beantwoorden = poort. DeviceID
afdrukken beantwoorden, "Arduino is"
ser seriële =. Serial(comPort, 9600) #sets seriële verbinding (zorg ervoor dat baud-rate klopt - komt overeen met Arduino)
terwijl niet verbonden:
kanarie = ser.read()
aangesloten = True
PLT.ion() #sets complot om animatiewijze
lengte = 500 #determines lengte van gegevens met sessie (gegevenspunten)
x = [0] * lengte #create lege variabele lengte van test
y = [0] * lengte
z = [0] * lengte
xLine, = plt.plot(x) #sets toekomstige lijnen worden gewijzigd
yline, plt.plot(y) =
zline, = plt.plot(z)
PLT.ylim(400,700) #sets de y as grenzen
voor ik in range(length): #while neemt u gegevens
gegevens ser.readline() #reads = totdat het een carriage return. ZORG ERVOOR DAT ER EEN HARDE RETURN OF LEEST HET VOOR ALTIJD
sep = data.split() #splits string in een lijst op de tabbladen
#print-sep
x.Append(int(sep[0])) #add nieuwe waarde als int aan huidige lijst
y.Append(int(sep[1]))
z.Append(int(sep[2]))
del x [0]
del y [0]
del z [0]
xLine.set_xdata(NP.arange(len(x))) #sets xdata aan nieuwe lijst lengte
yline.set_xdata(NP.arange(len(y)))
zline.set_xdata(NP.arange(len(z)))
xLine.set_ydata(x) #sets ydata naar nieuwe lijst
yline.set_ydata(y)
zline.set_ydata(z)
PLT.pause(0.001) #in seconds
PLT.draw() #draws nieuwe plot
rijen = zip (x, y, z) #combines lijsten samen
row_arr = np.array(rows) #creates array uit lijst
NP.savetxt ("C:\\Users\\mel\\Documents\\Instructables\\test_radio2.txt", row_arr) #save gegevens in bestand (laden w/np.loadtxt())
ser.Close() #closes seriële aansluiting (erg belangrijk om dit te doen! hebt u een fout halverwege door de code, typt u dit in de lijn van de cmd om de verbinding te sluiten)
}}}