Hi, I'm thinking of creating a data field for my Garmin Edge 840 Solar but after installing vs code with its extensions for Monkey C I can't continue writing the code. My idea was to simulate a real power meter so as to be recognized by Garmin and be able to use all its features. If anyone would like to help me out, I'll leave the code I wrote but can't test below:
// Importa i pacchetti necessari di Garmin
import Toybox.WatchUi as WatchUi;
import Toybox.Lang as Lang;
import Toybox.System as System;
import Toybox.Time as Time;
import Toybox.Sensor as Sensor;
import Toybox.Haptic as Haptic;
import Toybox.Activity as Activity;
import Toybox.Ui as Ui;
import Toybox.Graphics as Graphics;
// Parametri del ciclista e della bici
var weightCyclist = 59; // Peso del ciclista in kg
var weightBike = 8.5; // Peso della bici in kg
var airDensity = 1.225; // Densità dell'aria in kg/m^3
var dragCoefficient = 0.88; // Coefficiente di resistenza aerodinamica
var frontalArea = 0.5; // Area frontale in m^2
var roadSlope = 0.05; // Pendenza in percentuale (5% = 0.05)
var rollingResistance = 0.0045; // Coefficiente di resistenza al rotolamento per ruote da 40mm
var windSpeed = 0; // Velocità del vento (m/s)
var bikeSpeed = 10; // Velocità della bici in m/s (equivalente a 36 km/h)
var gravity = 9.81; // Accelerazione gravitazionale in m/s^2
// Variabili per la potenza
var powerOutput = 0; // Potenza in watt
var previousPower = 0; // Potenza precedente per calcolare la differenza
var stamina = 100; // Stamina simulata (in percentuale)
// Funzioni per calcolare la resistenza
function calculateAirResistance() {
return 0.5 * airDensity * dragCoefficient * frontalArea * bikeSpeed^2;
}
function calculateRollingResistance() {
return rollingResistance * (weightCyclist + weightBike) * gravity;
}
function calculateSlopeResistance() {
return (weightCyclist + weightBike) * gravity * roadSlope;
}
// Funzione per calcolare la potenza
function calculatePower() {
var airResistance = calculateAirResistance();
var rollingResistance = calculateRollingResistance();
var slopeResistance = calculateSlopeResistance();
// Potenza necessaria per superare tutte le resistenze
powerOutput = (airResistance + rollingResistance + slopeResistance) * bikeSpeed / 1000; // Potenza in watt
return powerOutput;
}
// Funzione per aggiornare la stamina
function updateStamina() {
// Simula il decremento della stamina in base alla potenza
stamina = Math.max(0, stamina - (powerOutput / 1000));
}
// Funzione per inviare i dati come sensore Garmin
function sendPowerData() {
// Crea un sensore ANT+ per la potenza
var powerSensor = new Sensor.Sensor();
powerSensor.setType(Sensor.SensorType.POWER);
// Simula i dati di potenza inviati ogni secondo
powerSensor.setValue(powerOutput);
powerSensor.setCadence(80); // Cadence simulata (rpm)
powerSensor.setHeartRate(120); // Frequenza cardiaca simulata
powerSensor.setPowerBalance(50); // Bilanciamento di potenza (simulato)
// Invia il sensore dati al dispositivo
Sensor.SensorManager.addSensor(powerSensor);
}
// Funzione per aggiornare il display
function updateDisplay() {
var screen = WatchUi.getCurrentScreen();
screen.clear();
// Visualizza la potenza calcolata
screen.drawText(0, 20, "Potenza stimata: " + powerOutput.toFixed(2) + " W", WatchUi.FONT_SIZE_LARGE);
screen.drawText(0, 60, "Stamina: " + stamina.toFixed(0) + "%", WatchUi.FONT_SIZE_MEDIUM);
screen.drawText(0, 100, "Velocità: " + (bikeSpeed * 3.6).toFixed(2) + " km/h", WatchUi.FONT_SIZE_MEDIUM);
// Mostra altre metriche
screen.drawText(0, 140, "Pendenza: " + (roadSlope * 100).toFixed(2) + "%", WatchUi.FONT_SIZE_SMALL);
WatchUi.update();
}
// Funzione di avvio dell'app
function onStart() {
System.println("Simulatore di potenza Garmin avviato.");
sendPowerData();
}
// Funzione di fine dell'app
function onStop() {
System.println("Simulatore di potenza Garmin fermato.");
}
// Funzione per il ciclo principale
function onUpdate(dc) {
// Calcola la potenza e aggiorna la stamina
calculatePower();
updateStamina();
updateDisplay();
dc.setTimer(1000, updateDisplay); // Esegui ogni 1000 ms (1 secondo)
}
If anyone can help me I would be very grateful.
thanks in advance everyone
Caroppo Cristian