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.Afunction () {
    verificarConexiones()
    // Enviar datos por serial
    enviarDatosSerial()
})

// Botón B: Ver promedio
input.onButtonPressed(Button.Bfunction () {
    // 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

Entradas populares de este blog

NOTAS PARCIALES 3CER PERIODO

NOTAS PARCIALES SEGUNDO PERIODO

NOTAS PARCIALES 4TO PERIODO