Crypteq Geplaatst: 8 februari 2015 Rapport Geplaatst: 8 februari 2015 En dan zit je daar op je vrije zondag,wilt wel weer eens gaan modden maar je weet niet wat je moet maken. Toen kwam ik op het idee: Waarom niet delen van het spel visualiseren in de "echte wereld". Dus om makkelijk te beginnen: Politie licht wanneer je wanted hebt. Welke hardware heb ik gebruikt: Een Arduino RGB Led lichtje 330Ω weerstandje En wat kabeltjes Ik maak gebruik van een common anode RGB ledje. Op de volgende manier is het aangesloten op de Arduino (open spoiler): En voor de software: Programma geschreven voor de Arduino die "luistert" of er een signaal binnen komt met een bepaalde waarde. CLEO Plugin die op een eigen thread naar de seriële verbinding van de Arduino kan schrijven. Een Cleo script die controleert of er een wanted level is en communiceert dit via een opcode naar de CLEO plugin. Een video van dit hele gebeuren, niet veel spannends. https://www.youtube.com/watch?v=cdW5loSxSzw Wat heb je er aan? Niets, maar het kan, dat is voor mij reden genoeg. Als je suggesties heb wat je zou willen zien (display die de health laat zien, knoppen die iets in het spel laten gebeuren, etc.) post ze, dan zal ik zien wat ik kan doen. Overigens, zoiets zou ook met GTA IV mogelijk zijn. Het onderstaande diagram laat zien in welke volgorde welke onderdelen nodig zijn om opdrachten te geven aan de Arduino waar het lichtje mee verbonden is: Legenda: GTA SA Dit spreekt wel voor zich CLEO Script Dit is een CLEO script welke kijk of men een wanted level heeft. Wanneer het detecteert dat de speler een wanted level heeft roept het een zelf ontwikkelde functie aan die data zend naar de Arduino. {$CLEO .cs} thread 'ARDUINO_TEST' 0006: 1@ = 0 //ConnectionState 0006: 2@ = 5 //retrycount 0006: 3@ = 0 //retrycounter 0006: 5@ = 0 //wanted level 0006: 6@ = 0 //wanted level update 06D2: 20@v = "COM3" // COM PORT :INIT wait 1000 if Player.Defined($PLAYER_CHAR) else_jump @INIT :CONNECT 0ACE: show_formatted_text_box "Trying to connect with the Arduino at port %s" 20@v wait 250 0D00: Arduino_Initialize_Serial_Communication_At_COM_Port 20@v wait 500 :CHECK_CONNECTION wait 200 if 003B: 3@ == 2@ // (int) then 03E6: remove_text_box 0ACE: show_formatted_text_box "Can not connect with the Arduino" jump @EXIT end 0D02: 1@ = Arduino_Serial_Is_Connected if 0039: 1@ == 1 then 03E6: remove_text_box 0ACE: show_formatted_text_box "Arduino is successfully connected!" jump @LOOP else 000A: 3@ += 1 jump @CHECK_CONNECTION end :LOOP wait 100 if Player.Defined($PLAYER_CHAR) then 01C0: 5@ = player $PLAYER_CHAR wanted_level if 803B: not 6@ == 5@ then if 0019: 5@ > 0 then 0DB0: Arduino_Serial_Write_Char 1 0085: 6@ = 5@ // (int) else 0DB0: Arduino_Serial_Write_Char 0 0085: 6@ = 5@ // (int) end end end jump @LOOP 0A93: end_custom_thread CLEO Plugin Dit is een zelf ontwikkelde CLEO plugin die data kan lezen en schrijven van en naar een seriële verbinding, wat een Arduino ook gebruikt. COM Port Dit is simpelweg een soort poort wat je toegang geeft om data naar toe te sturen en te lezen. De Arduino is toegankelijk via een COM poort. Arduino De Arduino draait zelf geschreven software, wanneer ik hier een bepaald signaal naartoe zend dan zal het licht aan of uit gaan. int redPin = 5; int greenPin = 6; int bluePin = 3; boolean policeLightEnabled = false; boolean initlight = false; void setup() { pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); Serial.begin(9600); analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); initlight = true; } void serialEvent() { if (Serial.available()) { char value = (char)Serial.read(); if(value == 1) { policeLightEnabled = true; } else if(value == 0) { policeLightEnabled = false; } } } void loop() { if(policeLightEnabled) { analogWrite(greenPin, 255); analogWrite(redPin, 0); delay(150); analogWrite(bluePin, 0); analogWrite(redPin, 255); delay(150); } else if(initlight) { analogWrite(redPin, 255); analogWrite(greenPin, 0); analogWrite(bluePin, 255); delay(750); initlight = false; } else { analogWrite(redPin, 255); analogWrite(greenPin, 255); analogWrite(bluePin, 255); } } De plugin om dit mogelijk te maken en een tutorial met de uitleg zal ik op een later moment vrij geven. Reageren
.Sharingan Geplaatst: 8 februari 2015 Rapport Geplaatst: 8 februari 2015 Daaamn. Heel erg origineel idee! Reageren
Guardian1980 Geplaatst: 8 februari 2015 Rapport Geplaatst: 8 februari 2015 Haha, leuk gedaan hoor. Nou nog iets met meerdere lampjes, waarbij elk lampje voor een ster staat. Oftewel, dat er bij een wanted-level van 4 sterren ook vier lampjes gaan knipperen. Reageren
Big Boss Geplaatst: 8 februari 2015 Rapport Geplaatst: 8 februari 2015 Probeer een keer zo'n verklikker à la Need For Speed te maken. Reageren
Dexist Geplaatst: 9 februari 2015 Rapport Geplaatst: 9 februari 2015 Geweldig dit , ik zou ook graag eentje willen zien met meerdere lampjes! Of iets met je health: Een rood led lampje dat afneemt in sterkte naarmate je schade krijgt. Reageren
Michael Geplaatst: 9 februari 2015 Rapport Geplaatst: 9 februari 2015 Heel erg nice! Mijn complimenten! Reageren
GolfG60 Geplaatst: 9 februari 2015 Rapport Geplaatst: 9 februari 2015 Doet me denken aan de PS4 versie van GTA 5, daar heb je dit ook. Wat je misschien kan proberen, is dat hoe meer sterren je hebt, des te sneller het gaat flitsen zoals op de PS4 versie van GTA5. Of inderdaad wat Guardian zei, voor iedere ster een ledje zeg maar. Iig, wel erg gaaf gedaan Reageren
KoningJesper Geplaatst: 9 februari 2015 Rapport Geplaatst: 9 februari 2015 Zulke dingen vind ik altijd heel erg leuk Reageren
Together Geplaatst: 9 februari 2015 Rapport Geplaatst: 9 februari 2015 Leuk hoor! Knap dat je dat kan maken. Reageren
GuitarGuy666 Geplaatst: 9 februari 2015 Rapport Geplaatst: 9 februari 2015 Echt supervet om te zien. Ook leuk dat het een zwaailicht is, maar jammer dat het er geen 6 zijn. Misschien leuk om dat eens te gaan proberen. Reageren
Crypteq Geplaatst: 9 februari 2015 Auteur Rapport Geplaatst: 9 februari 2015 Tnx voor de aanmoedigende reacties. Het idee om met meer ledjes te doen, was ook in mij al opgekomen maar heb helaas hier maar 4 RGB-ledjes liggen. Heb nog wel 100 groene ledjes, misschien dat ik daarmee wel kan laten zien. Voor nu heb ik eerste de CLEO plugin uitgebreid met de volgende opcodes: 0D00: Arduino_Initalize_Serial_Communication_At_COM_Port "COM3" 0D01: Arduino_Disconnect_Serial_Communication 0D02: 0@ = Arduino_Serial_Is_Connected 0DA0: 0@ = Arduino_Serial_Read_Char 0DA1: 0@ = Arduino_Serial_Read_Short 0DA2: 0@ = Arduino_Serial_Read_Long 0DA3: 0@ = Arduino_Serial_Read_Float 0DA4: 0@v = Arduino_Serial_Read_String_Long 0DA5: 0@s = Arduino_Serial_Read_String_Short 0DB0: Arduino_Serial_Write_Char 0@ 0DB1: Arduino_Serial_Write_Short 0@ 0DB2: Arduino_Serial_Write_Long 0@ 0DB3: Arduino_Serial_Write_Float 0@ 0DB4: Arduino_Serial_Write_String_Long 0@v 0DB5: Arduino_Serial_Write_String_Short 0@s Een SCM/CLEO Script om verbinding te maken en een char te versturen ziet er nu zo uit: {$CLEO .cs} thread 'ARDUINO_TEST' 0006: 1@ = 0 //ConnectionState 0006: 2@ = 5 //retrycount 0006: 3@ = 0 //retrycounter 06D2: 20@v = "COM3" // COM PORT :INIT wait 1000 if Player.Defined($PLAYER_CHAR) else_jump @INIT :CONNECT 0ACE: show_formatted_text_box "Trying to connect with the Arduino at port %s" 20@v 0D00: Arduino_Initalize_Serial_Communication_At_COM_Port 20@v wait 500 :CHECK_CONNECTION wait 200 if 003B: 3@ == 2@ // (int) then 03E6: remove_text_box 0ACE: show_formatted_text_box "Can not connect with the Arduino" jump @EXIT end 0D02: 1@ = Arduino_Serial_Is_Connected if 0039: 1@ == 1 then 03E6: remove_text_box 0ACE: show_formatted_text_box "Arduino is successfully connected!" jump @LOOP else 000A: 3@ += 1 jump @CHECK_CONNECTION end :LOOP wait 1500 0DB0: Arduino_Serial_Write_Char 1 jump @LOOP :EXIT 0D01: Arduino_Disconnect_Serial_Communication 0A93: end_custom_thread Nu ik dit werkend heb, is de volgende stap: - Meerdere ledjes laten knipperen (wanted level weergeven) - Health weergeven (op wat voor manier dan ook) - Fysieke knoppen om iets in het spel te laten gebeuren. Zal de "geslaagde" pogingen hier wel posten. Reageren
robin_be Geplaatst: 14 februari 2015 Rapport Geplaatst: 14 februari 2015 Je kan misschien een health/armor bar maken met al die ledjes, zou ook wel vet zijn. Ik heb hier ook nog een arduino liggen en enkele kleine ledjes, en met java en arduino al gecommuniceerd, maar niet met c++ (heb ook niet echt ervaring met c++). Zin om de plugin te releasen? Reageren
Dutchy3010 Geplaatst: 14 februari 2015 Rapport Geplaatst: 14 februari 2015 Ziet er weer top uit, Crypt! Reageren
Hanneswasco Geplaatst: 17 februari 2015 Rapport Geplaatst: 17 februari 2015 Erg origineel idee, ben benieuwd hoe dit project zal vorderen en ik zal het zeker opvolgen! Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.