Algoritmo de decisão: seguir linha → se obstáculo → desviar.
// Pinagem Robô
// Rastreio linha → P0
// IV obstáculos → P1
// HC-SR04 Trig → P2, Echo → P3
// Servo direcção → P8
pins.servoWritePin(AnalogPin.P8, 90) // Centro
basic.forever(function() {
let linha = pins.digitalReadPin(DigitalPin.P0)
let iv = pins.digitalReadPin(DigitalPin.P1)
let dist = sonar.ping(DigitalPin.P2, DigitalPin.P3, PingUnit.Centimeters)
if (iv == 0 || dist < 15) {
// Obstáculo detectado → vira à direita
pins.servoWritePin(AnalogPin.P8, 135)
basic.showArrow(ArrowNames.East)
basic.pause(600)
pins.servoWritePin(AnalogPin.P8, 90)
} else if (linha == 0) {
// Segue a linha em frente
basic.showArrow(ArrowNames.North)
} else {
// Perdeu a linha → procura
pins.servoWritePin(AnalogPin.P8, 45)
basic.showArrow(ArrowNames.West)
basic.pause(300)
}
basic.pause(100)
})