PRÁTICA ESPECIAL – APROXIMAÇÃO DE PI
Objetivos:
- Essa prática especial é um “crossover” da prática de loop while em C++ (prática 5).
- Essa prática executa em Arduino Uno, a mesma busca por força bruta para procurar a melhor aproximação racional x/y = pi.
Tarefa:
- Conectar o Arduíno Modelo UNO ao cabo USB ao computador.
- Abrir o software do Arduíno.
- Rodar o programa busca por pi.
Placa do Arduíno Uno:

Programa 1 – Força Bruta PI com pino 13
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
void setup() { pinMode(13, OUTPUT); digitalWrite(13, LOW); Serial.begin(9600); float erro; float erromin = 1000; float x,y; float melhor_x,melhor_y; int maxNumber = 100; unsigned long startTime = millis(); for (x=1;x<maxNumber;x++) { for (y=1;y<maxNumber;y++) { erro = 3.1415926 - x/y; if (erro < 0) erro = erro * (-1); if (erro < erromin) { melhor_x = x; melhor_y = y; erromin = erro; } } } unsigned long endTime = millis(); unsigned long durationMs = endTime - startTime; Serial.print("x = "); Serial.println(melhor_x); Serial.print("y = "); Serial.println(melhor_y); Serial.print("erro = "); Serial.println(erromin, 7); Serial.print("Tempo de execução: "); Serial.print(durationMs); Serial.println("ms"); } void loop() { digitalWrite(13, HIGH); } |
Resultados encontrados:
- Esse programa demora 520ms (mais que meio segundo) para encontrar a melhor aproximação de dois dígitos.
- Para três dígitos, o tempo de busca sobe para 52s.
- Compare o tempo de busca com a versão PC desse programa e perceba o quanto o Arduino Uno é computacionalmente inferior;
- O Uno não tem a capacidade de fazer contas com ponto flutuante (float) por hardware.
