我正在建造雷达。我对显示对象所在位置的线条有一些问题。
这就是它现在的工作原理,但我希望不同的行有不同的值,所以我需要一个数组,我在互联网上搜索,但我不知道该怎么做。
我正在使用处理3.5.4。 我用这种方式编码,但数组写错了,我知道。我怎样才能正确地写它呢? 我使用了很多 c++、bot 和 python 我才刚刚开始。
add_library('serial')
distance = array[360]
def setup():
size(801, 801) # Dimensioni della finestra
global f
f = createFont("Arial", 20)
ser = Serial(this, "COM5", 9600)
LF = 10
ser.bufferUntil(LF)
def draw():
global distance # Dichiarazione della variabile distance come globale
rectMode(CENTER)
stroke(255)
fill(0)
rect(400, 400, 800, 800)
ellipseMode(CENTER)
ellipse(400, 400, 800, 800)
ellipse(400, 400, 600, 600)
ellipse(400, 400, 400, 400)
ellipse(400, 400, 200, 200)
line(400, 0, 400, 800)
line(0, 400, 800, 400)
line(400 - 400 * cos(0.785), 400 - 400 * sin(0.785), 400 + 400 * cos(0.785), 400 + 400 * sin(0.785))
line(400 - 400 * cos(0.785), 400 + 400 * sin(0.785), 400 + 400 * cos(0.785), 400 - 400 * sin(0.785))
textFont(f)
fill(255)
text("25cm", 440, 390)
text("50cm", 540, 390)
text("75cm", 640, 390)
text("100cm", 730, 390)
for i in range(360):
stroke(0,255,0)
line(400, 400,400+distance[i]*4*cos(radians(i)), 400+distance[i]*4*sin(radians(i)))
stroke(255,0,0)
line(400+distance[i]*4*cos(radians(i)), 400+distance[i]*4*sin(radians(i)),400+400*cos(radians(i)),400+400*sin(radians(i)))
print(distance[i]) # Stampa la distanza attuale
def serialEvent(evt):
x = 0
global distance
inString = evt.readString().strip()
distance[x] =int(inString)
x = x + 1
if (x == 360):
x = 0
以下源代码将在Processing 3.5.4中运行。 最新的编辑器Processing 4.x 不再支持Python。 此示例最困难的部分是解析串行字符串输入以转换为浮点值。串行数据显示在您的应用程序中,看起来像这样:u'112 并且需要转换为 112.0,以便可以将其添加到数组并在您的项目中使用。 我使用的 Arduino 代码已附加到源代码中。
add_library('serial')
distance = []
ser = Serial(this, Serial.list()[1], 9600)
inStr = ""
x = 0
num = 0.0
i = 0
def setup():
global ser
size(801, 801) # Dimensioni della finestra
global f
f = createFont("Arial", 20)
printArray(Serial.list())
LF = 10
ser.bufferUntil(LF)
def draw():
global distance # Dichiarazione della variabile distance come globale
global ser
global inStr
global x
global num
global i
inStr = ser.readStringUntil(10)
if (inStr != None):
inStr = inStr.strip()
inStr = inStr.lstrip("u")
inStr = inStr.strip("'\uffd")
inStr = inStr.rstrip("\\r\\n")
inStr = inStr.strip(" ")
if(inStr.isdigit()):
num = float(inStr)
print(num)
distance.append(num)
x = x + 1
if (x > 359):
x = 0
# printArray(distance)
stroke(255)
fill(0)
rect(400, 400, 800, 800)
ellipseMode(CENTER)
ellipse(400, 400, 800, 800)
ellipse(400, 400, 600, 600)
ellipse(400, 400, 400, 400)
ellipse(400, 400, 200, 200)
line(400, 0, 400, 800)
line(0, 400, 800, 400)
line(400 - 400 * cos(0.785), 400 - 400 * sin(0.785), 400 + 400 * cos(0.785), 400 + 400 * sin(0.785))
line(400 - 400 * cos(0.785), 400 + 400 * sin(0.785), 400 + 400 * cos(0.785), 400 - 400 * sin(0.785))
textFont(f)
fill(255)
text("25cm", 440, 390)
text("50cm", 540, 390)
text("75cm", 640, 390)
text("100cm", 730, 390)
for i in range(len(distance)):
stroke(0,255,0)
line(400, 400,400+distance[i]*4*cos(radians(i)), 400+distance[i]*4*sin(radians(i)))
stroke(255,0,0)
line(400+distance[i]*4*cos(radians(i)), 400+distance[i]*4*sin(radians(i)),400+400*cos(radians(i)),400+400*sin(radians(i)))
print(distance[i]) # Stampa la distanza attuale
# **** Arduino code that was used ****
"""
byte outputValue = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
outputValue += 4;
Serial.println(outputValue);
delay(1);
}
"""
输出: