godot_et_le_port_serie
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
godot_et_le_port_serie [2020/03/06 09:54] – Simon Deplat | godot_et_le_port_serie [2020/12/01 17:43] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. serge | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Godot et le port série ====== | ||
- | ====== Présentation | + | ===== Présentation ===== |
Aujourd' | Aujourd' | ||
Ligne 6: | Ligne 7: | ||
Les technologies impliquées sont les suivantes : un KY-038 ( ou microphone ), relié à un Arduino, qui communique par le port série avec le logiciel Godot, que je maîtrise assez bien pour créer de petites animations. | Les technologies impliquées sont les suivantes : un KY-038 ( ou microphone ), relié à un Arduino, qui communique par le port série avec le logiciel Godot, que je maîtrise assez bien pour créer de petites animations. | ||
- | ====== Arduino et KY-038 | + | ===== Arduino et KY-038 ===== |
Le module de microphone est tout simple à utiliser : il possède quatre broches. | Le module de microphone est tout simple à utiliser : il possède quatre broches. | ||
Ligne 26: | Ligne 27: | ||
int counter = 0; // On initialise un compteur | int counter = 0; // On initialise un compteur | ||
- | int measure = 0; // On crée une variable pour stocker nos données | + | |
| | ||
while ( counter < measure_length ) { // Tant que l'on a pas fini de compter | while ( counter < measure_length ) { // Tant que l'on a pas fini de compter | ||
Ligne 38: | Ligne 39: | ||
measure = measure / measure_length; | measure = measure / measure_length; | ||
- | Serial.println( measure ); // Et on affiche tout ça dans le port série, sous Linux à priori / | + | Serial.write( measure ); // Et on affiche tout ça dans le port série, sous Linux à priori / |
} | } | ||
</ | </ | ||
Ligne 44: | Ligne 45: | ||
Une moyenne est effectuée afin de minimiser les éventuelles incohérences. | Une moyenne est effectuée afin de minimiser les éventuelles incohérences. | ||
- | ====== Lien avec Godot ====== | + | ===== Lien avec Godot ===== |
Je pensais qu'il existait une classe déjà prête de communication avec le port série dans Godot mais ce n'est pas le cas. À la place, j'ai trouvé ceci : | Je pensais qu'il existait une classe déjà prête de communication avec le port série dans Godot mais ce n'est pas le cas. À la place, j'ai trouvé ceci : | ||
Ligne 74: | Ligne 75: | ||
pour retirer l' | pour retirer l' | ||
+ | |||
+ | ===== Créer son propre programme ===== | ||
+ | |||
+ | Nous n' | ||
+ | |||
+ | Voici l' | ||
+ | |||
+ | {{media_12: | ||
+ | |||
+ | Le script du nœud KY038 est tout beau tout neuf. | ||
+ | |||
+ | Le script du nœud Serial est une //copie// de MenuLogic.gd. | ||
+ | |||
+ | Le script du nœud COM est Com.gd. | ||
+ | |||
+ | Le code de base est dépendant de l' | ||
+ | |||
+ | Le script du nœud KY038 est le suivant : | ||
+ | |||
+ | < | ||
+ | extends Node2D | ||
+ | |||
+ | func new_input( value ): | ||
+ | print( value ) | ||
+ | </ | ||
+ | |||
+ | Le script du nœud Serial est le suivant : | ||
+ | |||
+ | < | ||
+ | tool | ||
+ | extends Control | ||
+ | |||
+ | const SERCOMM = preload(" | ||
+ | onready var PORT = SERCOMM.new() | ||
+ | |||
+ | var value_string = "" | ||
+ | |||
+ | func _ready(): | ||
+ | PORT.open( "/ | ||
+ | PORT.flush() | ||
+ | set_physics_process(true) | ||
+ | |||
+ | # | ||
+ | #for best speed, you can use a thread | ||
+ | #do not use _process due to fps being too high | ||
+ | func _physics_process(delta): | ||
+ | if PORT != null && PORT.get_available()> | ||
+ | for i in range(PORT.get_available()): | ||
+ | var data = PORT.read() | ||
+ | get_node(" | ||
+ | </ | ||
+ | |||
+ | Note : j'ai d' | ||
+ | |||
+ | Pour finir, j'ai rajouté un CPUParticles2D afin que celui-ci émette un visuel quand on détecte un bruit sur le capteur : | ||
+ | |||
+ | Script du nœud KY038 : | ||
+ | |||
+ | < | ||
+ | extends Node2D | ||
+ | |||
+ | var threshold = 45; | ||
+ | |||
+ | func new_input( value ): | ||
+ | if value < threshold: | ||
+ | $CPUParticles2D.set_emitting( false ) | ||
+ | else: | ||
+ | $CPUParticles2D.set_emitting( true ) | ||
+ | </ | ||
+ | |||
+ | Maintenant, de petites étoiles apparaissent sur l' |
godot_et_le_port_serie.1583488482.txt.gz · Dernière modification : 2020/03/06 09:54 de Simon Deplat