SHOW:
|
|
- or go back to the newest paste.
1 | import processing.serial.*; | |
2 | Serial arduinoport; | |
3 | ||
4 | int pressionado = 1; | |
5 | float x, y; //coordenadas dos vértices | |
6 | int raio = 350; | |
7 | int graus = 0; | |
8 | int w = 300; | |
9 | int valor = 0; | |
10 | int vaiVolta = 0; | |
11 | int[] novosValores = new int[181]; | |
12 | int[] velhosValores = new int[181]; | |
13 | PFont minhaFonte; | |
14 | int radarDist = 0; | |
15 | int firstRun = 0; | |
16 | ||
17 | void setup(){ | |
18 | size(750, 450); | |
19 | background (0); | |
20 | minhaFonte = createFont("verdana", 12); | |
21 | textFont(minhaFonte); | |
22 | arduinoport = new Serial(this, Serial.list()[0], 9600); | |
23 | } | |
24 | ||
25 | void draw(){ | |
26 | fill(0); | |
27 | noStroke(); | |
28 | ellipse(raio, raio, 750, 750); | |
29 | rectMode(CENTER); | |
30 | rect(350,402,800,100); | |
31 | if (graus >= 179) { //faz a animação seguir o caminho inverso | |
32 | vaiVolta = 1; | |
33 | } | |
34 | if (graus <= 1) { | |
35 | vaiVolta = 0; | |
36 | } | |
37 | strokeWeight(7); | |
38 | if(vaiVolta == 0){ | |
39 | for(int i = 0; i<=20; i++){ //cria o efeito de radar | |
40 | stroke(0, (10*i), 0); | |
41 | line(raio, raio, raio + cos(radians(graus+(180+i)))*w, raio + sin(radians(graus+(180+i)))*w); | |
42 | } | |
43 | }else{ | |
44 | for(int i = 20; i>=0; i--){ //cria o efeito de radar | |
45 | stroke(0, 200-(10*i), 0); | |
46 | line(raio, raio, raio + cos(radians(graus+(180+i)))*w, raio + sin(radians(graus+(180+i)))*w); | |
47 | } | |
48 | } | |
49 | noStroke(); | |
50 | fill(0,50,0); | |
51 | //primeira varredura | |
52 | beginShape(); //inicia o desenho do semicírculo | |
53 | for(int i = 0; i<180; i++){ | |
54 | x = raio + cos(radians((180+i)))*((velhosValores[i])); | |
55 | y = raio + sin(radians((180+i)))*((velhosValores[i])); | |
56 | vertex(x, y); | |
57 | } | |
58 | endShape(); //termina o desenho do semicírculo | |
59 | //segunda varredura | |
60 | fill(0,110,0); | |
61 | beginShape(); | |
62 | for(int i = 0; i<180; i++){ | |
63 | x = raio + cos(radians((180+i)))*((novosValores[i])); | |
64 | y = raio + sin(radians((180+i)))*((novosValores[i])); | |
65 | vertex(x, y); | |
66 | } | |
67 | endShape(); | |
68 | //media | |
69 | fill(0,170,0); | |
70 | beginShape(); | |
71 | for (int i = 0; i < 180; i++) { | |
72 | x = raio + cos(radians((180+i)))*((novosValores[i]+velhosValores[i])/2); | |
73 | y = raio + sin(radians((180+i)))*((novosValores[i]+velhosValores[i])/2); | |
74 | vertex(x, y); | |
75 | } | |
76 | endShape(); | |
77 | //anel vermelho após duas voltas | |
78 | if (firstRun >= 360) { | |
79 | stroke(150,0,0); | |
80 | strokeWeight(1); | |
81 | noFill(); | |
82 | for (int i = 0; i < 180; i++) { | |
83 | if (velhosValores[i] - novosValores[i] > 35 || novosValores[i] - velhosValores[i] > 35) { | |
84 | x = raio + cos(radians((180+i)))*(novosValores[i]); | |
85 | y = raio + sin(radians((180+i)))*(novosValores[i]); | |
86 | ellipse(x, y, 10, 10); | |
87 | } | |
88 | } | |
89 | } | |
90 | // distância entre os anéis do radar | |
91 | for(int i = 0; i<=6; i++){ | |
92 | noFill(); | |
93 | strokeWeight(1); | |
94 | stroke(0, 255-(30*i), 0); | |
95 | ellipse(raio, raio, (100*i), (100*i)); | |
96 | fill(0, 100, 0); | |
97 | noStroke(); | |
98 | text(Integer.toString(radarDist+50), 380, (305-radarDist), 50, 50); | |
99 | radarDist+=50; | |
100 | } | |
101 | radarDist = 0; | |
102 | //desenha as linhas da grade a cada 30 graus | |
103 | for(int i = 0; i <= 6; i++){ | |
104 | strokeWeight(1); | |
105 | stroke(0,55,0); | |
106 | line(raio, raio, raio + cos(radians(180+(30*i)))*w, raio + sin(radians(180+(30*i)))*w); | |
107 | fill(0, 55, 0); | |
108 | noStroke(); | |
109 | if (180+(30*i) >= 300) { | |
110 | text(Integer.toString(180+(30*i)), (raio+10) + cos(radians(180+(30*i)))*(w+10), (raio+10) + sin(radians(180+(30*i)))*(w+10), 25,50); | |
111 | } else { | |
112 | text(Integer.toString(180+(30*i)), raio + cos(radians(180+(30*i)))*w, raio + sin(radians(180+(30*i)))*w, 60,40); | |
113 | } | |
114 | } | |
115 | //escreve as informações na tela | |
116 | noStroke(); | |
117 | fill(0); | |
118 | rect(350,402,800,100); | |
119 | fill(0, 100, 0); | |
120 | text("Graus: "+Integer.toString(graus), 100, 380, 100, 50); | |
121 | text("Distância: "+Integer.toString(valor), 100, 400, 100, 50); | |
122 | text("Radar screen code ", 540, 380, 250, 50); | |
123 | fill(0); | |
124 | rect(70,60,150,100); | |
125 | fill(0, 100, 0); | |
126 | text("Legenda:", 100, 50, 150, 50); | |
127 | fill(0,50,0); | |
128 | rect(30,53,10,10); | |
129 | text("1º varredura:", 115, 70, 150, 50); | |
130 | fill(0,110,0); | |
131 | rect(30,73,10,10); | |
132 | text("2º varredura:", 115, 90, 150, 50); | |
133 | fill(0,170,0); | |
134 | rect(30,93,10,10); | |
135 | text("Média", 115, 110, 150, 50); | |
136 | noFill(); | |
137 | stroke(150,0,0); | |
138 | strokeWeight(1); | |
139 | ellipse(29, 113, 10, 10); | |
140 | fill(150,0,0); | |
141 | text("Movido", 115, 130, 150, 50); | |
142 | stroke(0, 0, 110); | |
143 | fill(0, 0, 110); | |
144 | rect(630, 53, 10, 10); | |
145 | text("start", 715, 70, 150, 50); | |
146 | fill(pressionado); | |
147 | } | |
148 | ||
149 | void mouseClicked(){ | |
150 | arduinoport.write(pressionado); | |
151 | } | |
152 | ||
153 | //recolhe dados do radar | |
154 | void serialEvent (Serial arduinoport) { | |
155 | String xString = arduinoport.readStringUntil('\n'); // lê uma linha por vez | |
156 | if (xString != null) { | |
157 | xString = trim(xString); //retira os espaços em branco | |
158 | String getX = xString.substring(1, xString.indexOf("V")); // pega a posição do servo | |
159 | String getV = xString.substring(xString.indexOf("V")+1, xString.length()); // pega a distância | |
160 | graus = Integer.parseInt(getX); | |
161 | valor = Integer.parseInt(getV); | |
162 | velhosValores[graus] = novosValores[graus]; | |
163 | novosValores[graus] = valor; | |
164 | //valor para duas voltas | |
165 | firstRun++; | |
166 | if (firstRun > 360) { | |
167 | firstRun = 360; | |
168 | } | |
169 | } | |
170 | } |