Sie sind auf Seite 1von 3

#Basic Waveform Generator using Raspberry Pi

#Sin,Square and Triangular waves with Amplitude and Frequency Control

from graphics import *


from time import sleep
import math
import board
import busio
import adafruit_mcp4725
i2c = busio.I2C(board.SCL, board.SDA)
# Create a DAC instance.
dac = adafruit_mcp4725.MCP4725(i2c,address=0x60)

CounterValue = 0
Amplitude = 1
Time_Delay = 0.000001

win = GraphWin("Waveform Generator", 400, 400)

#---------------------------Amp-------------
rect = Rectangle(Point(40, 180), Point(120, 220))
rect.setFill("black")
rect.draw(win)

RectMessage = Text(Point(80,200), "Amp")


RectMessage.setSize(12)
RectMessage.setStyle("bold")
RectMessage.setTextColor("white")
RectMessage.draw(win)

#----------------------------Freq----------
rect = Rectangle(Point(40, 270), Point(120, 310))
rect.setFill("black")
rect.draw(win)

RectMessage = Text(Point(80,290), "Freq")


RectMessage.setSize(12)
RectMessage.setStyle("bold")
RectMessage.setTextColor("white")
RectMessage.draw(win)

#----------------------------------------------

#---------------------------Sin Button---------
rect = Rectangle(Point(40, 90), Point(120, 130))
rect.setFill("blue")
rect.draw(win)

RectMessage = Text(Point(80,110), "Sin")


RectMessage.setSize(12)
RectMessage.setStyle("bold")
RectMessage.setTextColor("white")
RectMessage.draw(win)
#------------------------------------------------

#---------------------------Square Button----------
rect = Rectangle(Point(130, 90), Point(210, 130))
rect.setFill("blue")
rect.draw(win)

RectMessage = Text(Point(170,110), "Square")


RectMessage.setSize(12)
RectMessage.setStyle("bold")
RectMessage.setTextColor("white")
RectMessage.draw(win)
#------------------------------------------------

#---------------------------Triangular Button---------
rect = Rectangle(Point(220, 90), Point(300, 130))
rect.setFill("blue")
rect.draw(win)

RectMessage = Text(Point(260,110), "Triangular")


RectMessage.setSize(12)
RectMessage.setStyle("bold")
RectMessage.setTextColor("white")
RectMessage.draw(win)
#------------------------------------------------

Sin = 0
Square = 0
Triangular = 0
xValue = 0
yValue = 0

while True:
MouseCoordinates = win.checkMouse()
if MouseCoordinates is not None:
xValue = MouseCoordinates.getX()
yValue = MouseCoordinates.getY()

#----------------------------Amp Button Detect-------------------------

if(xValue > 40 and xValue < 120 and yValue > 180 and yValue < 220):
Amplitude += 1
if(Amplitude == 10):
Amplitude = 1
#print(Amplitude)
#--------------------------------------------------------------------

#----------------------------Freq Button Detect-------------------------

if(xValue > 40 and xValue < 120 and yValue > 270 and yValue < 310):
Time_Delay *= 10
if(Time_Delay == 1):
Time_Delay = 0.000001
#print(Time_Delay)
#--------------------------------------------------------------------
if(xValue > 40 and xValue < 120 and yValue > 90 and yValue < 130):
Sin = 1
Square = 0
Triangular = 0

if(xValue > 130 and xValue < 210 and yValue > 90 and yValue < 130):
Sin = 0
Square = 1
Triangular = 0

if(xValue > 220 and xValue < 300 and yValue > 90 and yValue < 130):
Sin = 0
Square = 0
Triangular = 1

if Sin == 1 and Square == 0 and Triangular == 0:


#CounterValue += 1
#message.setText(str(CounterValue))
#sleep(1)
for i in range(4095,0,-50):
dac.raw_value = 1400 + int(124 * Amplitude * (math.sin( 2 * math.pi * i
/ 4095)))
sleep(Time_Delay)

if Sin == 0 and Square == 1 and Triangular == 0:


#message.setText(str(CounterValue))
dac.raw_value = 409*Amplitude
sleep(Time_Delay)
dac.raw_value = 0
sleep(Time_Delay)

if Sin == 0 and Square == 0 and Triangular == 1:


#CounterValue = 0
#message.setText(str(CounterValue))
for i in range(0,409*Amplitude,50):
dac.raw_value = i
sleep(Time_Delay)
for i in range(409*Amplitude,0,-50):
dac.raw_value = i
sleep(Time_Delay)

Das könnte Ihnen auch gefallen