Blog

  • CardioMove: simulation sons et lumière

    Etape 1 : changement son en fonction de la vitesse

    Appuie sur BP1 pour accélérer

    BP2 pour ralentire et reculer

    Code Arduino

    int buzzer = 3;

    int BP1 = 2; // augmente le niveau
    int BP2 = 4; // diminue le niveau

    int niveau = 0; // de 0 à 9

    int frequences[10] = {
    150, 220, 300, 400, 500,
    650, 800, 1000, 1300, 1600
    };

    void setup() {
    pinMode(buzzer, OUTPUT);

    pinMode(BP1, INPUT_PULLUP);
    pinMode(BP2, INPUT_PULLUP);
    }

    void loop() {

    if (digitalRead(BP1) == LOW) {
    niveau++;

    if (niveau > 9) {
      niveau = 9;
    }
    
    delay(250);

    }

    if (digitalRead(BP2) == LOW) {
    niveau–;

    if (niveau < 0) {
      niveau = 0;
    }
    
    delay(250);

    }

    if (niveau == 0) {
    noTone(buzzer);
    } else {
    tone(buzzer, frequences[niveau]);
    }
    }

  • Casino Utan Spelpaus: En Genomgång av Alternativen

    I den moderna världen av online-spel har regler och riktlinjer blivit avgörande för att skydda spelare och främja ansvarsfullt spelande. I Sverige har Spelinspektionen införlivat en funktion som kallas Spelpaus, vilket syftar till att ge spelare möjlighet att stänga av sig själva från spel under en viss period. Trots detta har behovet av alternativ som inte omfattar Spelpaus blivit allt mer aktuellt. Denna artikel kommer att utforska konceptet av « casino utan spelpaus », dess betydelse och vad spelare bör överväga innan de deltar i sådana plattformar.

    Vad Är Spelpaus?

    Innan vi dyker ner i alternativa casinon utan spelpaus är det viktigt att förstå vad Spelpaus innebär. Spelpaus är en självavstängningsfunktion som gör det möjligt för spelare att stänga av sin tillgång till alla licensierade spelprodukter i Sverige. Detta inkluderar både fysiska och online-casinon. Målet med denna funktion är att ge spelare ett verktyg för att hantera sitt spelande och förhindra problematisk användning.

    Spelpaus ska vara en säkerhetsåtgärd för att skydda spelare från att utveckla spelberoende. Under tiden en spelare är avstängd kan de inte logga in på sina spelkonton, och de får ingen reklam eller marknadsföring från spelbolagen. Eftersom Spelpaus har inrättats finns det dock en växande efterfrågan på casinon som inte har denna restriktion, vilket leder oss till konceptet “casino utan spelpaus”.

    Casinon Utan Spelpaus – Vad Är Det?

    Casino utan spelpaus syftar till plattformar som inte är registrerade under den svenska Spelinspektionen och därmed inte omfattas av kraven på Spelpaus. Dessa casinon är ofta registrerade i andra länder och kan därmed erbjuda sina tjänster utan begränsningarna som Spelpaus medför. För spelare innebär detta en större frihet, men också potentiella risker.

    Att spela på casino utan spelpaus kan se attraktivt ut för många, särskilt för dem som vill ha tillgång till bonusar och kampanjer som kan vara begränsade i Sverige. Denna typ av plattformar erbjuder ofta spel med mer generösa villkor, såsom större bonusar och fler spelalternativ, inklusive ett brett utbud av spelautomater, bordsspel och livespel.

    Fördelar och Nackdelar med Casino Utan Spelpaus

    Som med alla val inom spelvärlden, finns det både fördelar och nackdelar med att spela på casino utan spelpaus. Nedan följer en lista med dessa aspekter:

    1. Fördelar:
      • Större spelutbud och variation av spel.
      • Mer generösa bonusar och erbjudanden.
      • Ingen Spelpaus-funktion som begränsar tillgången.
    2. Nackdelar:
      • Inga svenska konsumentskydd och regleringar.
      • Ökad risk för spelberoende utan Spelpaus.
      • Svårare att få hjälp och stöd vid spelproblem.

    Det är viktigt att spelare noggrant överväger dessa faktorer innan de väljer att spela på en plattform utan Spelpaus. Med en större frihet kommer också ett större ansvar för att säkerställa att spelandet förblir under kontroll.

    Vad Ska Man Tänk På När Man Väljer Casino Utan Spelpaus?

    När du funderar på att spela på casino utan spelpaus är det avgörande att göra din egen forskning och att välja plattformar som är välrenommerade. Här är några punkter att tänka på:

    • Kontrollera licensen: Se till att casinot har en giltig spellicens från en erkänd myndighet.
    • Granska kundrecensioner: Sök efter feedback från andra spelare för att få en bättre förståelse för plattformens pålitlighet.
    • Undersök spelutbudet: Se till att casinot erbjuder dina favoritspel samt spel från kända spelutvecklare.
    • Begränsa ditt spelande: Även om du spelar på ett casino utan spelpaus, sätt upp egna gränser för insättningar och förluster.

    Genom att ta dessa faktorer i beaktande kan spelare minimera riskerna och njuta av en mer ansvarsfull spelupplevelse.

    Casinons Ansvarsfulla Spelmetoder

    Förutom att överväga de ovan nämnda faktorerna är det också viktigt att förstå vilka ansvarsfulla spelmetoder som kan tillämpas på casinon utan spelpaus. Många av dessa plattformar implementerar egna verktyg och funktioner för att stödja spelare i deras spelande. Till exempel kan vissa casinon erbjuda möjligheter till att sätta insättningsgränser, tidsbegränsningar samt självutvärderingsverktyg för att bedöma sitt spelbeteende.

    Det finns även plattformar som samarbetar med organisationer som GamCare och BeGambleAware för att ge spelare tillgång till resurser och stöd, vilket kan vara till stor hjälp för de som är oroliga över sitt spelande. Det är av stor betydelse för spelare att itera på att även om de spelar på en plattform utan Spelpaus, kan de alltid ta ansvar för sitt eget spelande genom att aktivt söka hjälp och använda tillgängliga verktyg.

    Den frivilliga delen av ansvarsfullt spelande är avgörande; det uppmanar spelare att ställa frågor om sina spelvanor och be om hjälp när det behövs. Många casinon utan spelpaus erbjuder även tysta blockeringsalternativ, vilket innebär att spelare kan blockera sig själva för en viss period utan att gå igenom en officiell avstängningsprocess.

    Fallstudier och Exempel

    För att belysa verkligheten av casinon utan spelpaus kan vi titta på några exempel som visar hur spelare navigerar i denna värld. En spelare, Anna, började spela på ett casino utan spelpaus för att dra nytta av en förmånlig välkomstbonus. Hon uppskattade den breda variationen av spel och de extra funktioner som detta casino erbjöd. Men efter en tid insåg hon att utan Spelpaus-funktionen, hade hon svårt att sätta gränser för hennes spelande, vilket ledde till en ökning av hennes insatser och spelande. Hennes erfarenhet visar vikten av att ha självdisciplin och insikt när man spelar på dessa plattformar.

    Å andra sidan har vi spelaren Erik, som har spelat på flera casinon utan spelpaus men har alltid använt sig av de tillgängliga verktygen för ansvarsfullt spelande. Han sätter alltid en budget innan han börjar spela och använder insättningsgränser. Erik tycker att dessa verktyg har hjälpt honom att njuta av spelupplevelsen utan att förlora kontrollen. Hans historia är ett exempel på hur spelare kan ha en positiv upplevelse även när de väljer att spela på casinon utan Spelpaus, så länge de förblir medvetna om sina vanor och använder tillgängliga resurser.

    Att delta på ett casino utan spelpaus kan vara lockande, men det medför också risker. Det är viktigt att spelare förstår konsekvenserna av att välja sådana plattformar. För dem som söker friheten att spela utan begränsningar kan valet av ett casino utan spelpaus verka tilltalande. Men som med alla spelbeslut, kom ihåg att spela ansvarsfullt och sätta egna gränser. För de som är villiga att ta del av denna fria spelmiljö är det klokt att först överväga alla alternativen och de risker som följer. När du navigerar igenom detta landskap, kom ihåg att det finns många alternativ där ute, och om du väljer att gå vägen av , se till att du gör det med ansvar och medvetenhet.

  • Mots de passe PAC

    sim_idlabelrolepasswordapi_token
    defaultADMINadmin5njbmEKqLqe4b8394264cb074bbc7b4a4902677581e07c61edc848c4c7ed
    eleve01ELEVE01studentmWphvci7P307d2c641ab02bf918098a28197614d29e6b771c70a2572c7
    eleve02ELEVE02studentCAcJnUnf4Se6be08d289a6f99290109a6942c56b1ac5f1edf94b957fd7
    eleve03ELEVE03studentJur9QJdsFDcc5fd0fe1c9f8f86fa6b7fc05f9127d4d77ce03869d78dab
    eleve04ELEVE04student6DcZGtr2Xu022fd9bfe706ada0a52f8ce151f242c25acdd3a2f9f42e6a
    eleve05ELEVE05studentsdYcZoSewCd3777b7ae09a2022078ca7c832360dfe71d4aab29e40b675
    eleve06ELEVE06studentLhXPz2PC5x62d13086e91430f88006cb7b45f3cc47e42c079639eba926
    eleve07ELEVE07studentCMsQ6f9bTHe54f3be163919a4b92496356fb170884f34aa8f35f6d404f
    eleve08ELEVE08studentwNYEMQAVNZ9c18d0e1c6b3bc3a11d8c249b677786344dc2c95443b57e5
    eleve09ELEVE09studentmi2CJ9tqxt2bd8edfa2b938fa871afa20eb0b6203d9720c64eac442dd3
    eleve10ELEVE10studentZZKcQeTPbr0075073aa5c93c2a4c3cb73fedd6fd9f5f05fd618bc43a23
  • Controle de la PAC Requettes http avec curl en ligne de commande

    Accès web

    Voir sa PAC dans le navigateur

    Ouvrir :

    https://proxy-automate.latelier22.fr/pac.php?sim=eleveXX

    Exemple :

    https://proxy-automate.latelier22.fr/pac.php?sim=eleve03

    Se connecter pour piloter sa PAC

    Lien vers les mots de passe et les tokens (jetons pour connexion API)
    https://www.fulgence-bienvenue.fr/2026/05/11/mots-de-passe-pac/

    Ouvrir :

    https://proxy-automate.latelier22.fr/login.php?sim=eleveXX&redirect=/pac.php?sim=eleveXX

    Exemple :

    https://proxy-automate.latelier22.fr/login.php?sim=eleve03&redirect=/pac.php?sim=eleve03

    Après connexion, l’élève revient sur sa PAC.

    Lire l’état brut en JSON

    Ouvrir :

    https://proxy-automate.latelier22.fr/api.php?sim=eleveXX

    Commandes curl Windows

    Remplacer :

    • eleveXX par votre identifiant
    • TOKEN_ELEVE_XX par votre token

    Lire l’état

    curl "https://proxy-automate.latelier22.fr/api.php?sim=eleveXX"

    START

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=start&sim=eleveXX"

    STOP

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=stop&sim=eleveXX"

    Consigne +

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=sp_plus&sim=eleveXX"

    Consigne –

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=sp_minus&sim=eleveXX"

    Mettre une consigne directe à 22.5

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=set_setpoint&setpoint=22.5&sim=eleveXX"

    Mettre la température ambiante à 18

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=set_ambient&ambient_temp=18&sim=eleveXX"

    RESET

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=reset&sim=eleveXX"

    Exemple réel pour eleve10

    Lire

    curl "https://proxy-automate.latelier22.fr/api.php?sim=eleve10"

    START

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: 0075073aa5c93c2a4c3cb73fedd6fd9f5f05fd618bc43a23" -d "action=start&sim=eleve10"

    STOP

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: 0075073aa5c93c2a4c3cb73fedd6fd9f5f05fd618bc43a23" -d "action=stop&sim=eleve10"

    RESET

    curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: 0075073aa5c93c2a4c3cb73fedd6fd9f5f05fd618bc43a23" -d "action=reset&sim=eleve10"

    A faire

    Modifier votre application mobile

    Ajouter 2 boutons PLUS et MOINS pour augmenter / diminuer la consigne de température de la PAC

    il faudra ajouter votre token, sinon vous ne serez pas autorisé à commander la PAC à distance….

  • Tuto app inventor / arduino

    App Inventor — LED Bluetooth — anglais

    1. Elements à mettre et à nommer

    Dans User Interface

    Élément à glisserRenommer enText
    ListPickerListPicker_BTConnect Bluetooth
    ButtonButton_ONON
    ButtonButton_OFFOFF
    LabelLabel_StatusNot connected

    Dans Connectivity

    Élément à glisserRenommer en
    BluetoothClientBluetoothClient1

    2. Blocks

    Cliquer sur Blocks.


    3. Bloc connexion : liste Bluetooth

    Cliquer sur ListPicker_BT.

    Prendre :

    when ListPicker_BT.BeforePicking

    Ajouter :

    set ListPicker_BT.Elements to BluetoothClient1.AddressesAndNames

    Bloc complet :

    when ListPicker_BT.BeforePicking
    do set ListPicker_BT.Elements to BluetoothClient1.AddressesAndNames

    4. Bloc connexion : choisir HC-05

    Cliquer sur ListPicker_BT.

    Prendre :

    when ListPicker_BT.AfterPicking

    Ajouter :

    call BluetoothClient1.Connect address ListPicker_BT.Selection

    Ajouter :

    set Label_Status.Text to "Connected"

    Bloc complet :

    when ListPicker_BT.AfterPicking
    do call BluetoothClient1.Connect address ListPicker_BT.Selection
    set Label_Status.Text to "Connected"

    5. Bloc bouton ON

    Cliquer sur Button_ON.

    Prendre :

    when Button_ON.Click

    Ajouter :

    if BluetoothClient1.IsConnected
    then call BluetoothClient1.SendText text "1"

    Bloc complet :

    when Button_ON.Click
    do if BluetoothClient1.IsConnected
    then call BluetoothClient1.SendText text "1"

    6. Bloc bouton OFF

    Cliquer sur Button_OFF.

    Prendre :

    when Button_OFF.Click

    Ajouter :

    if BluetoothClient1.IsConnected
    then call BluetoothClient1.SendText text "0"

    Bloc complet :

    when Button_OFF.Click
    do if BluetoothClient1.IsConnected
    then call BluetoothClient1.SendText text "0"

    7. Résultat

    ON  → envoie 1 → LED allumée
    OFF → envoie 0 → LED éteinte
  • Bettingsidor utan svensk licens: En djupdykning i alternativ för spelare

    I dagens digitala värld har ditt val av spelsajter blivit mer mångfacetterat än någonsin tidigare. För svenska spelare finns det en rad bettingsidor utan svensk licens som erbjuder olika typer av spelupplevelser. Dessa sajter är ofta attraktiva för spelare som söker större bonusar, bredare spelutbud och mindre strikt reglering. Men vad betyder det egentligen att spela på dessa plattformar, och vilka risker och fördelar är kopplade till dem? I denna artikel ska vi utforska världen av bettingsidor utan svensk licens, hur de skiljer sig från sina licensierade motsvarigheter och vad du bör tänka på som spelare.

    Fördelarna med att använda bettingsidor utan svensk licens

    Det finns flera anledningar till varför många spelare i Sverige väljer att registrera sig hos bettingsidor utan svensk licens. Här är några av de mest framträdande fördelarna:

    • Bättre bonusar: Många av dessa sidor erbjuder generösa välkomstbonusar och andra kampanjer som kan vara mer förmånliga än vad som erbjuds på sidor med svensk licens.
    • Bredare urval av spel: Utbudet av spel kan vara större, inklusive flera internationella sporter och unika casinospel som kanske inte är tillgängliga på svenska plattformar.
    • Mindre stränga regler: Spelreglerna kan vara mer flexibla, vilket ger spelarna frihet att spela på sina egna villkor.

    Riskerna med att välja bettingsidor utan svensk licens

    Samtidigt finns det även potentiella risker som spelare bör vara medvetna om. Att spela på utländska bettingsidor kan medföra en del osäkerheter, såsom:

    1. Ingen konsumentskydd: Utan svensk licens har du inte samma skyddsnivåer eller möjligheter att anmäla problem, vilket kan göra det svårare att få hjälp om något går fel.
    2. Lägre säkerhet: Vissa sidor kanske inte handlar om samma säkerhetsstandarder som de svenska alternativen, vilket potentiellt kan innebära risker för dina personliga uppgifter.
    3. Reglering och skatt: Att spela på dessa sidor kan också potential blanda in skattefrågor, särskilt om du vinner stora summor och inte är säker på hur skattelagstiftningen fungerar i ditt fall.

    Hur hittar man bettingsidor utan svensk licens?

    Att navigera i landskapet av bettingsajter kan kännas överväldigande. Här är några tips för hur du identifierar säkra och pålitliga bettingsidor utan svensk licens:

    1. Forskning är nyckeln: Ta dig tid att forska om olika sajter. Läs recensioner och kolla in forum där andra spelare delar sina erfarenheter.
    2. Kolla efter licenser: Många internationella sajter har egna licenser utfärdade i andra EU-länder. Kontrollera alltid vilka regler de följer.
    3. Säkerhet; Se till att sajten använder SSL-kryptering och erbjuder säkra betalningsalternativ.

    Klarna-spel: En unik möjlighet bland bettingsidor utan svensk licens

    Några av de mer populära alternativen bland bettingsidor utan svensk licens inkluderar plattformar som erbjuder Klarna som betalningsmetod. Dessa sajter ger spelarna möjlighet att hantera sina insättningar och uttag smidigt och snabbt. Med Klarna kan du göra en insättning inom ett par minuter utan krångel, vilket ger en bättre strömning i ditt spelande.

    Särskilt populärt bland sportspelare, tillhandahåller dessa alternativ en smidig upplevelse där man enkelt kan sätta in pengar på sitt konto och börja spela direkt. Dessutom säkerställer Klarna ett högre skydd på transaktionerna, vilket är viktigt för många användare.

    När man ser till potentialen hos bettingsidor utan svensk licens bör man dock minnas att också ta hänsyn till eventuella avgifter relaterade till transaktionerna samt den allmänna användarupplevelsen. En likvärdig bedömning mellan olika sajter är alltid nödvändig innan man bestämmer sig för var man ska spela.

    Kundsupport hos bettingsidor utan svensk licens

    Ett annat viktigt aspekt när man väljer en bettingsida utanför den svenska jurisdiktionen är kvaliteten på kundsupporten. På många internationella plattformar varierar supportnivån kraftigt. Vissa sajter har utmärkt kundservice med chattfunktioner dygnet runt, medan andra erbjudanden via e-post eller formulär kan ta längre tid innan du får svar. Att ha snabb och effektiv hjälp när problem uppstår är avgörande för en positiv spelupplevelse. Innan du registrerar dig bör du kontrollera vilka supportalternativ som finns tillgängliga och se till att det finns alternativ på ditt språk eller engelska åtminstone.

    Dessutom bör du prata med andra användare eller läsa recensioner för att få en känsla för hur snabbt och tillfredsställande problemen löses på den valda plattformen. En bra kundtjänst ska inte bara ha kort väntetid; den ska också kunna bemöta dina frågor med skyndsamhet och precision — ett absolut måste när det handlar om pengar och din spelsäkerhet!

    Sammanfattning och framtidsperspektiv

    I takt med att marknaden förändras kommer valet mellan svenska licenserade sidor och de utan sådan rättslig granskning fortsätta vara en het potatis bland svenska spelare. Det viktigaste är emellertid att alltid prioritera säkerheten först; gör din forskning noggrant, var medveten om riskerna och ta kloka beslut baserade på din individuella situation.
    Att spela på bettingsidor utan svensk licens kan erbjuda nya möjligheter, men kräver också ökad vaksamhet från din sida. Oavsett vilken väg du väljer att gå så kom alltid ihåg: spela ansvarsfullt!

    Spelansvar: En viktig aspekt av bettingkulturen

    När vi diskuterar betting, särskilt utanför gränserna för den svenska lagstiftningen, måste vi också ta upp begreppet spelansvar. Ansvarsfullt spelande innebär att alltid vara medveten om sina egna begränsningar samt ha kontroll över sitt beteende när det gäller insättningarna och tidsanvändningen vid gamblingaktiviteter.

    Många internationella plattformar erbjuder nu verktyg för självavstängning eller insättningsgränser, vilket gör det enklare för spelare att hålla koll på sin aktivitet. Till exempel har vissa sidor funktioner där användaren lätt kan ställa in veckovisa eller månatliga budgetar för deras spelfunktionalitet. Detta är avgörande för att minimera risken för problematiskt spelande, vilket allt fler aktörer inser vikten av.

    Dessutom rekommenderas det starkt att du bekantar dig med självtestverktyg online som hjälper dig att utvärdera ditt eget beteende kring gambling. Om resultatet visar tecken på riskabelt beteende, kan det vara dags att söka professionell hjälp från organisationer som fokuserar på detta område.

    Till syvende og sist gäller det inte bara om hur man spelar eller var man spelar — det handlar i lika stor utsträckning om hur man tar ansvar kring sitt eget spelande för en hållbar och positiv upplevelse!

  • SUITE DU TUTO — AJOUTER LE BOUTON RESET ROBOT

    Objectif

    Ajouter un bouton qui envoie une requête vers :

    https://sti2d.latelier22.fr/fiber/api/reset
    

    Quand on appuie sur ce bouton :

    • l’application envoie un POST
    • le serveur répond
    • la réponse s’affiche dans LabelPos

    1) Dans Designer, ajouter les composants

    A. Ajouter le bouton

    Dans User Interface :

    • ajoute un Button
    • nom : BtnReset

    Mettre :

    • Text = RESET ROBOT

    B. Ajouter un composant Web

    Dans Connectivity :

    • ajoute un Web
    • nom : WebReset

    2) Créer le bloc du clic sur le bouton

    Ajoute ce bloc :

    when BtnReset.Click
    do
    

    3) Dans BtnReset.Click, mettre l’adresse

    Dans ce bloc, mets :

    set WebReset.Url to "https://sti2d.latelier22.fr/fiber/api/reset"
    

    4) Envoyer la requête

    Toujours dans le même bloc, ajoute :

    call WebReset.PostText
        text ""
    

    5) Bloc complet BtnReset.Click

    Ton bloc doit être :

    when BtnReset.Click
    do
        set WebReset.Url to "https://sti2d.latelier22.fr/fiber/api/reset"
        call WebReset.PostText
            text ""
    

    6) Créer le bloc de réponse du serveur

    Ajoute ce bloc :

    when WebReset.GotText
        url responseCode responseType responseContent
    do
    

    7) Afficher la réponse du serveur

    Dans WebReset.GotText, mets :

    set LabelPos.Text to join
        "RESET HTTP "
        responseCode
        "\n"
        responseContent
    

    8) Bloc complet WebReset.GotText

    Ton bloc doit être :

    when WebReset.GotText
        url responseCode responseType responseContent
    do
        set LabelPos.Text to join
            "RESET HTTP "
            responseCode
            "\n"
            responseContent
    

    9) Résultat attendu

    Quand on clique sur RESET ROBOT :

    1. l’application appelle :
    https://sti2d.latelier22.fr/fiber/api/reset
    
    1. elle envoie un POST
    2. la réponse du serveur s’affiche dans LabelPos

    10) Ordre exact des étapes

    Fais-les dans cet ordre :

    1. ajouter BtnReset
    2. ajouter WebReset
    3. créer when BtnReset.Click
    4. créer when WebReset.GotText

    11) Si ça ne marche pas

    Vérifier :

    • que BtnReset existe bien
    • que WebReset existe bien
    • que l’URL est exactement :
    https://sti2d.latelier22.fr/fiber/api/reset
    
    • que le bloc WebReset.GotText existe

    12) Résumé très court à ajouter au document

    Bloc 8 : ajouter un bouton RESET ROBOT

    On souhaite maintenant ajouter un bouton permettant d’envoyer une commande de réinitialisation au robot.

    Composants à ajouter

    Dans le Designer, ajouter :

    • un bouton BtnReset
    • un composant WebReset

    Fonctionnement

    Quand on clique sur le bouton :

    • l’application envoie un POST à l’adresse :
    https://sti2d.latelier22.fr/fiber/api/reset
    
    • la réponse du serveur est affichée dans LabelPos

    13) Les 3 boutons / actions de l’appli à ce stade

    Ton appli sait maintenant :

    • afficher ta position GPS
    • afficher la position du robot
    • envoyer APPEL ROBOT
    • envoyer RESET ROBOT

  • SUITE DU TUTO — AJOUTER LE BOUTON APPEL ROBOT


    Objectif

    Quand on appuie sur le bouton :

    • l’application envoie la position du téléphone au serveur
    • le serveur reçoit :
    {"x":48.1762,"y":-2.7520}
    

    Adresse utilisée :

    https://sti2d.latelier22.fr/fiber/api/call-robot
    

    1) Dans Designer, ajouter les composants

    A. Ajouter le bouton

    Dans User Interface :

    • ajoute un Button
    • nom : BtnAppel

    Mettre :

    • Text = APPEL ROBOT

    B. Ajouter un Notifier

    Dans User Interface :

    • ajoute un Notifier
    • nom : Notifier1

    C. Ajouter un Web

    Dans Connectivity :

    • ajoute un Web
    • nom : Web1

    2) Vérifier les variables globales

    Dans Blocks, il faut avoir au minimum :

    initialize global lat to 0
    initialize global lon to 0
    initialize global hasFix to false
    

    Si elles n’existent pas, crée-les.


    3) Modifier le bloc GPS

    Dans ton bloc :

    when LocationSensor1.PositionChanged
    

    ajoute ces 3 lignes si elles n’y sont pas déjà :

    set global lat to get Latitude
    set global lon to get Longitude
    set global hasFix to true
    

    Résultat attendu du bloc GPS

    Ton bloc doit contenir au moins :

    when LocationSensor1.PositionChanged
        Latitude Longitude Altitude speed
    do
        set global lat to get Latitude
        set global lon to get Longitude
        set global hasFix to true
    
        set Marker1.Latitude to get Latitude
        set Marker1.Longitude to get Longitude
    

    4) Créer le bloc du clic sur le bouton

    Ajoute ce bloc :

    when BtnAppel.Click
    do
    

    5) Dans BtnAppel.Click, tester si le GPS est prêt

    Dans ce bloc, mets :

    if not get global hasFix
    then
        call Notifier1.ShowAlert
            notice "GPS pas prêt"
    else
        call Notifier1.ShowChooseDialog
            message join
                "Appeler le robot ?"
                "\nlat = "
                get global lat
                "\nlon = "
                get global lon
            title "CONFIRMATION"
            button1Text "OUI"
            button2Text "NON"
            cancelable true
    

    6) Créer le bloc après la boîte de dialogue

    Ajoute ce bloc :

    when Notifier1.AfterChoosing
        choice
    do
    

    7) Dans Notifier1.AfterChoosing, tester si on a cliqué sur OUI

    Mets :

    if get choice = "OUI"
    then
    

    8) Dans le then, mettre l’adresse du serveur

    Ajoute :

    set Web1.Url to "https://sti2d.latelier22.fr/fiber/api/call-robot"
    

    9) Ajouter les headers

    Ajoute ensuite :

    set Web1.RequestHeaders to make a list
        make a list "Content-Type" "application/json"
        make a list "Connection" "Keep-Alive"
    

    10) Envoyer les coordonnées

    Méthode simple à faire comme sur ton image

    Ajoute :

    call Web1.PostText
        text make a dictionary
            key "x" value get global lat
            key "y" value get global lon
    

    11) Bloc complet Notifier1.AfterChoosing

    Au final, ton bloc doit être :

    when Notifier1.AfterChoosing
        choice
    do
        if get choice = "OUI"
        then
            set Web1.Url to "https://sti2d.latelier22.fr/fiber/api/call-robot"
    
            set Web1.RequestHeaders to make a list
                make a list "Content-Type" "application/json"
                make a list "Connection" "Keep-Alive"
    
            call Web1.PostText
                text make a dictionary
                    key "x" value get global lat
                    key "y" value get global lon
    

    12) Créer le bloc de réponse du serveur

    Ajoute ce bloc :

    when Web1.GotText
        url responseCode responseType responseContent
    do
    

    13) Dans Web1.GotText, afficher la réponse

    Mets :

    set LabelPos.Text to join
        "Réponse serveur : "
        responseCode
        "\n"
        responseContent
    

    14) Résultat attendu

    Quand on clique sur APPEL ROBOT :

    1. l’application vérifie si le GPS est prêt
    2. une boîte de confirmation s’ouvre
    3. si on clique sur OUI
    4. l’application envoie :
    {"x": latitude, "y": longitude}
    
    1. la réponse du serveur s’affiche dans LabelPos

    15) Ordre exact des blocs à ajouter

    Fais-les dans cet ordre :

    1. ajouter BtnAppel
    2. ajouter Notifier1
    3. ajouter Web1
    4. vérifier les variables globales lat, lon, hasFix
    5. modifier LocationSensor1.PositionChanged
    6. créer when BtnAppel.Click
    7. créer when Notifier1.AfterChoosing
    8. créer when Web1.GotText

    16) Si rien ne se passe

    Vérifier

    • que BtnAppel existe bien
    • que Notifier1 existe bien
    • que Web1 existe bien
    • que global hasFix passe à true
    • que global lat et global lon sont bien mis à jour

    17) Si tu veux le texte exact à mettre dans ton document

    Bloc 7 : ajouter un bouton d’appel du robot

    On souhaite maintenant ajouter un bouton permettant d’envoyer la position du téléphone au serveur.

    Composants à ajouter

    Dans le Designer, ajouter :

    • un bouton BtnAppel
    • un composant Notifier1
    • un composant Web1

    Fonctionnement

    Quand on clique sur le bouton :

    • l’application vérifie que le GPS est prêt,
    • elle demande une confirmation,
    • si l’utilisateur clique sur OUI,
    • elle envoie la position du téléphone à l’adresse :
    https://sti2d.latelier22.fr/fiber/api/call-robot
    

    Les coordonnées envoyées sont :

    • x pour la latitude
    • y pour la longitude

    Réponse attendue

    La réponse du serveur est affichée dans le label de position.


  • SUITE DU TUTO — AJOUTER LE ROBOT ET VOIR LES 2 MARQUEURS

    • ajouter le marqueur du robot
    • voir toujours les 2 marqueurs
    • sans blabla

    On part des de ton appli actuelle avec :

    • Map1
    • Marker1 = téléphone
    • LabelPos
    • BtnSend
    • TxtJson
    • LocationSensor1


    1) Dans Designer, ajouter 2 composants

    A. Ajouter le marqueur du robot

    Dans Maps :

    • ajoute un Marker
    • renomme-le : MarkerRobot

    B. Ajouter le composant Web

    Dans Connectivity :

    • ajoute un Web
    • renomme-le : WebRobot

    C. Ajouter une horloge

    Dans Sensors :

    • ajoute un Clock
    • renomme-le : ClockRobot

    2) Régler les propriétés

    MarkerRobot

    • Visible = false

    ClockRobot

    • TimerEnabled = true
    • TimerInterval = 2000

    Cela veut dire :

    • toutes les 2 secondes
    • l’application demandera la position du robot

    3) Créer les variables globales

    Va dans Blocks et ajoute ces variables :

    initialize global myLat to 0
    initialize global myLon to 0
    initialize global robotLat to 0
    initialize global robotLon to 0
    initialize global hasRobot to false
    initialize global decodedRobot to 0
    initialize global robotData to 0
    

    4) Modifier le bloc Screen1.Initialize

    Tu as déjà un bloc when Screen1.Initialize.

    Ajoute dedans :

    set WebRobot.Url to "https://sti2d.latelier22.fr/fiber/api/robot-last"
    set MarkerRobot.Visible to false
    

    Ton bloc ressemble maintenant à ça :

    when Screen1.Initialize
    do
        set Map1.ZoomLevel to 16
        set Map1.CenterFromString to "48.1762740,-2.7520210"
        set LabelPos.Text to "Position : en attente du GPS"
        set WebRobot.Url to "https://sti2d.latelier22.fr/fiber/api/robot-last"
        set MarkerRobot.Visible to false
    

    5) Créer une procédure pour centrer la carte entre les 2 marqueurs

    Dans Procedures :

    • crée une procédure
    • nom : UpdateMapCenter

    6) Dans UpdateMapCenter, mettre les blocs suivants

    Dans cette procédure, mets :

    if get global hasRobot
    then
        set Map1.CenterFromString to join
            ((get global myLat + get global robotLat) / 2)
            ","
            ((get global myLon + get global robotLon) / 2)
    
        set Map1.ZoomLevel to 16
    else
        set Map1.CenterFromString to join
            get global myLat
            ","
            get global myLon
    
        set Map1.ZoomLevel to 18
    

    7) À quoi sert cette procédure

    Elle fait ceci :

    • si le robot est connu → la carte se centre au milieu des 2
    • sinon → la carte reste centrée sur le téléphone

    Important :
    quand les 2 existent, on met ZoomLevel = 16
    pour avoir les 2 marqueurs visibles


    8) Modifier le bloc LocationSensor1.PositionChanged

    Dans ton bloc actuel :

    when LocationSensor1.PositionChanged
    

    ajoute d’abord ces 2 lignes :

    set global myLat to get Latitude
    set global myLon to get Longitude
    

    Ensuite garde :

    set Marker1.Latitude to get Latitude
    set Marker1.Longitude to get Longitude
    

    Puis supprime les lignes qui mettaientt directement :

    set Map1.CenterFromString to ...
    et
    set Map1.ZoomLevel to 18
    

    et remplace-la par :

    call UpdateMapCenter
    

    Puis garde :

    set LabelPos.Text to join get Latitude "," get Longitude
    

    9) Ton bloc LocationSensor1.PositionChanged doit devenir

    when LocationSensor1.PositionChanged
        Latitude Longitude Altitude speed
    do
        set global myLat to get Latitude
        set global myLon to get Longitude
    
        set Marker1.Latitude to get Latitude
        set Marker1.Longitude to get Longitude
    
        call UpdateMapCenter
    
        set LabelPos.Text to join
            "Moi : "
            get Latitude
            ", "
            get Longitude
    

    10) Créer le bloc pour demander la position du robot

    Ajoute ce bloc :

    when ClockRobot.Timer
    do
        call WebRobot.Get
    

    11) Créer le bloc WebRobot.GotText

    Ajoute ce bloc :

    when WebRobot.GotText
        url responseCode responseType responseContent
    do
    

    12) Dans WebRobot.GotText, décoder le JSON

    Dans ce bloc, mets d’abord :

    set global decodedRobot to call WebRobot.JsonTextDecodeWithDictionaries
        responseContent
    

    13) Vérifier que la réponse est bonne

    Juste après, ajoute :

    if get value for key "ok"
       in dictionary get global decodedRobot
       or if not found false
    then
    

    14) Récupérer l’objet robot

    Dans le then, ajoute :

    set global robotData to get value for key "robot"
        in dictionary get global decodedRobot
        or if not found 0
    

    15) Lire la latitude et la longitude du robot

    Toujours dans le then, ajoute :

    set global robotLat to get value for key "x"
        in dictionary get global robotData
        or if not found 0
    
    set global robotLon to get value for key "y"
        in dictionary get global robotData
        or if not found 0
    

    16) Déplacer le marqueur robot

    Toujours dans le then, ajoute :

    set MarkerRobot.Latitude to get global robotLat
    set MarkerRobot.Longitude to get global robotLon
    set MarkerRobot.Visible to true
    set global hasRobot to true
    

    17) Recentrer la carte pour voir les 2 marqueurs

    Toujours dans le then, ajoute :

    call UpdateMapCenter
    

    18) Bloc complet WebRobot.GotText

    Au final, ton bloc doit ressembler à ceci :

    when WebRobot.GotText
        url responseCode responseType responseContent
    do
        set global decodedRobot to call WebRobot.JsonTextDecodeWithDictionaries
            responseContent
    
        if get value for key "ok"
           in dictionary get global decodedRobot
           or if not found false
        then
            set global robotData to get value for key "robot"
                in dictionary get global decodedRobot
                or if not found 0
    
            set global robotLat to get value for key "x"
                in dictionary get global robotData
                or if not found 0
    
            set global robotLon to get value for key "y"
                in dictionary get global robotData
                or if not found 0
    
            set MarkerRobot.Latitude to get global robotLat
            set MarkerRobot.Longitude to get global robotLon
            set MarkerRobot.Visible to true
            set global hasRobot to true
    
            call UpdateMapCenter
    

    19) Ce qu’il faut changer dans ton appli

    Avant

    Tu recentrais la carte seulement sur le téléphone

    Maintenant

    Tu centres la carte :

    • sur le téléphone si le robot n’est pas encore connu
    • au milieu entre téléphone et robot si le robot est connu

    C’est ça qui permet de voir les 2 marqueurs


    20) Très important

    Ne fais plus ça

    Dans LocationSensor1.PositionChanged, ne mets plus :

    set Map1.ZoomLevel to 18
    set Map1.CenterFromString to ...
    

    sinon la carte reviendra toujours sur toi, et on ne verra pas le robot.

    Fais ça à la place

    Dans LocationSensor1.PositionChanged, mets juste :

    call UpdateMapCenter
    

    21) Résultat attendu

    Quand l’appli tourne :

    1. Marker1 affiche ta position
    2. ClockRobot appelle l’API toutes les 2 secondes
    3. MarkerRobot apparaît quand la position robot arrive
    4. la carte se centre entre les 2
    5. les 2 marqueurs restent visibles

    22) Adresse à mettre

    Dans Screen1.Initialize, l’adresse est :

    https://sti2d.latelier22.fr/fiber/api/robot-last
    

    23) Résumé ultra court

    Ajouter :

    • MarkerRobot
    • WebRobot
    • ClockRobot

    Créer les variables :

    • myLat
    • myLon
    • robotLat
    • robotLon
    • hasRobot
    • decodedRobot
    • robotData

    Créer la procédure :

    • UpdateMapCenter

    Ajouter les blocs :

    • when ClockRobot.Timer
    • when WebRobot.GotText

    Modifier :

    • when Screen1.Initialize
    • when LocationSensor1.PositionChanged

    24) Si tu veux que ça marche du premier coup

    Fais les étapes dans cet ordre exact :

    1. ajouter MarkerRobot
    2. ajouter WebRobot
    3. ajouter ClockRobot
    4. régler ClockRobot
    5. créer les variables globales
    6. compléter Screen1.Initialize
    7. créer la procédure UpdateMapCenter
    8. modifier LocationSensor1.PositionChanged
    9. créer ClockRobot.Timer
    10. créer WebRobot.GotText