CODIGO EMISOR RECEPTOR
// EMISOR
let lugarID = 1 // Cambiar según ubicación (1=canchas, 2=baños, 3=cafeteria)
let ultimoEnvio = 0
let intervaloEnvio = 2000
let conectado = false
let ultimoPong = 0
// Configurar radio
radio.setGroup(1)
// Escuchar respuesta PONG del receptor
radio.onReceivedString(function (receivedString) {
if (receivedString == "PONG") {
conectado = true
ultimoPong = input.runningTime()
basic.showIcon(IconNames.Yes)
}
})
// Enviar PING periódicamente para verificar conexión
basic.forever(function () {
let tiempoActual = input.runningTime()
// Verificar si seguimos conectados (si no recibimos PONG en 5 segundos)
if (tiempoActual - ultimoPong > 5000) {
conectado = false
basic.showIcon(IconNames.No)
}
// Enviar PING cada segundo
radio.sendString("PING")
basic.pause(1000)
// Solo enviar datos si hay conexión
if (conectado && tiempoActual - ultimoEnvio >= intervaloEnvio) {
let temp = input.temperature()
radio.sendNumber(lugarID * 1000 + temp)
ultimoEnvio = tiempoActual
// Mostrar ubicación y temperatura
if (lugarID == 1) {
basic.showString("C")
} else if (lugarID == 2) {
basic.showString("B")
} else {
basic.showString("F")
}
basic.showNumber(temp)
}
})
//RECEPETOR
// Variables para control de conexión
let ultimaRecepcionC = 0
let ultimaRecepcionB = 0
let ultimaRecepcionF = 0
let tiempoTimeout = 10000 // 10 segundos de timeout
// Variables para temperaturas
let temp2 = 0
let id = 0
let tempCanchas = 0
let tempBanos = 0
let tempCafeteria = 0
// Configurar radio y serial
radio.setGroup(1)
serial.setBaudRate(BaudRate.BaudRate115200)
// Función para verificar si un sensor está conectado
function sensorConectado(ultimaRecepcion: number): boolean {
return (input.runningTime() - ultimaRecepcion) <= tiempoTimeout
}
// Función para enviar datos por serial
function enviarDatosSerial() {
let tiempoActual = input.runningTime()
serial.writeString("C:")
if (sensorConectado(ultimaRecepcionC)) {
serial.writeNumber(tempCanchas)
} else {
serial.writeString("XX")
}
serial.writeString(",B:")
if (sensorConectado(ultimaRecepcionB)) {
serial.writeNumber(tempBanos)
} else {
serial.writeString("XX")
}
serial.writeString(",F:")
if (sensorConectado(ultimaRecepcionF)) {
serial.writeNumber(tempCafeteria)
} else {
serial.writeString("XX")
}
serial.writeString("\n")
}
// Escuchar PING y responder con PONG
radio.onReceivedString(function (receivedString) {
if (receivedString == "PING") {
radio.sendString("PONG")
}
})
// Función para verificar estado de conexiones y mostrar datos
function verificarConexiones() {
let tiempoActual = input.runningTime()
// Verificar y mostrar Canchas
basic.showString("C")
if (tiempoActual - ultimaRecepcionC > tiempoTimeout) {
basic.showIcon(IconNames.No)
} else {
basic.showIcon(IconNames.Yes)
basic.showNumber(tempCanchas)
}
basic.pause(1000)
// Verificar y mostrar Baños
basic.showString("B")
if (tiempoActual - ultimaRecepcionB > tiempoTimeout) {
basic.showIcon(IconNames.No)
} else {
basic.showIcon(IconNames.Yes)
basic.showNumber(tempBanos)
}
basic.pause(1000)
// Verificar y mostrar Cafetería
basic.showString("F")
if (tiempoActual - ultimaRecepcionF > tiempoTimeout) {
basic.showIcon(IconNames.No)
} else {
basic.showIcon(IconNames.Yes)
basic.showNumber(tempCafeteria)
}
basic.pause(1000)
}
// Recibir datos por radio
radio.onReceivedNumber(function (receivedNumber) {
// Separar ID y temperatura
id = Math.floor(receivedNumber / 1000)
temp2 = receivedNumber % 1000
// Guardar según ID y actualizar tiempo de última recepción
if (id == 1) {
tempCanchas = temp2
ultimaRecepcionC = input.runningTime()
} else if (id == 2) {
tempBanos = temp2
ultimaRecepcionB = input.runningTime()
} else if (id == 3) {
tempCafeteria = temp2
ultimaRecepcionF = input.runningTime()
}
// Enviar datos actualizados por serial
enviarDatosSerial()
})
// Botón A: Ver todas las temperaturas
input.onButtonPressed(Button.A, function () {
verificarConexiones()
// Enviar datos por serial
enviarDatosSerial()
})
// Botón B: Ver promedio
input.onButtonPressed(Button.B, function () {
// Solo contar sensores conectados para el promedio
let sumaTemp = 0
let sensoresConectados = 0
if (sensorConectado(ultimaRecepcionC)) {
sumaTemp += tempCanchas
sensoresConectados++
}
if (sensorConectado(ultimaRecepcionB)) {
sumaTemp += tempBanos
sensoresConectados++
}
if (sensorConectado(ultimaRecepcionF)) {
sumaTemp += tempCafeteria
sensoresConectados++
}
let promedio = sensoresConectados > 0 ? sumaTemp / sensoresConectados : 0
basic.showString("P")
if (sensoresConectados > 0) {
basic.showNumber(promedio)
// Enviar promedio por serial
serial.writeString("Promedio:")
serial.writeNumber(promedio)
serial.writeString("\n")
} else {
basic.showString("XX")
serial.writeString("Promedio:XX\n")
}
})
// Verificación periódica de conexiones y envío de datos
basic.forever(function () {
verificarConexiones()
enviarDatosSerial()
basic.pause(5000)
})
Comentarios
Publicar un comentario