Génération de code "arduino" avec librairie IRremote

Salut à tous,

aimant bien le PHP, je me suis amusé à créer un petit script qui permet en quelque sorte de générer un code arduino.
Tout d'abord, munissez vous de : une télécommande infrarouge, un récepteur infrarouge, une arduino, l'IDE arduino avec la librairie IRremote.

Dans votre IDE arduino, allez dans : Fichier, Exemple, IRremote, IRrecvDump. Brancher votre recepteur au bon pin. (11 par défaut) puis compiler et envoyer le programme sur votre arduino.
Ouvrez votre console, cliquer sur un bouton de télécommande : vous devriez avoir d'afficher quelque chose comme ça :

Raw (32): 28990 2400 -600 1200 -550 650 -550 1250 -550 650 -600 1200 -550 650 -550 650 -550 650 -550 650 -550 1250 -550 650 -550 1250 -550 600 -600 1200 -600 650

Et bien, copiez le ! Copiez toute la ligne, et collez-là sur cette page : Annaliseur IR et envoyez ! Le script se chargera d'enlever tous les "-" devant chaque nombre, et de mettre des virgules après chaque nombre. Vous pouvez aussi mettre plusieurs lignes, le script se chargera tout écrire dans l'ordre.

Bref, certain trouveront ce script inutile ( quoi que c'est pas faux ) mais au moins il m'a servi donc je vous en fait part, si ça peut aider quelqu'un. ^^

Bonjour,

Ce serais plus intéressant d'avoir les sources du script PHP :wink:
Perso j'aurai fait un script python pour ça, mais bon c'est une question de gout :grin:

bonjour,
je dirais une chose comme ca vite fait, mais doit y avoir d'autres solutions
par contre ton script bug parfois, et ne prend pas en compte des changements volontaires, un + ou * :wink:

$code=$_POST['code'];
$code = explode(":",$code);
$code = $code[1];
$code = str_replace("-","",$code);
$code = str_replace(" ",",",$code);
$compteur = count($code);
$compteur = $compteur + 2;
echo $compteur;
echo "unsigned int channel1[".$compteur."] ={".$code."}";

Salut,

hmm oui je procède un peu de la même manière. ^^
Et sinon pour les bugs avec les * et les +, je ne l'ai traite pas puisque l'arduino ne donnera jamais ces caractères. :slight_smile:
Sinon le code est le suivant :

<!DOCTYPE html>
<html>
	<head>
		<title>Annaliseur IR</title>
	</head>
	<body>
		<div style="text-align:center">
			<div>
				<h2>IR</h2>
			</div>
			<div>
				<form action="?" method="post">
					Trame
<textarea name="ir" rows="7" cols="100">Raw (32): 28990 2400 -600 1200 -550 650 -550 1250 -550 650 -600 1200 -550 650 -550 650 -550 650 -550 650 -550 1250 -550 650 -550 1250 -550 600 -600 1200 -600 650 </textarea>

					<input type="submit" value="Envoyer !" />
				</form>
			</div>
		</div>
			<div>
				<?php
				function find($chaine,&$array,&$nb)
				{
					$array = array();
					
					$chaine = str_replace('-','',$chaine);
					
					$nb = substr_count($chaine,' ');
					
					$chaine = str_replace(' ','|',$chaine);
					
					$array = explode('|',$chaine);
				}
				
				if (isset($_POST['ir']))
				{
					$total_ch = substr_count($_POST['ir'],'Raw')+1;
					
					$array_nb = array();
					$array_nb[0] = $total_ch;
					$string = '';
					
					$string = $string.'#include <IRremote.h>


IRsend irsend;

';
					
					$ss = explode(':',$_POST['ir']);
					
					for ($i=1; $i<$total_ch; $i++)
					{
						$chaine_ligne = explode('R',$ss[$i]);
						
						find($chaine_ligne[0],$array,$nb);
						
						$array_nb[$i] = $nb;
						
						$string = $string.'unsigned int channel'.$i.'['.$nb.'] ={';
						
						for ($o=2; $o<$nb; $o++)
						{
							if ($o == $nb-1)
							{
								$string = $string.$array[$o];
							}
							else
							{
								$string = $string.$array[$o].',';
							}
						}
						
						$string = $string.'};
';
					}
					
					$string = $string.'
';
					$string = $string.'void setup()
{
}

void loop()
{
';
					
					for ($j=1; $j<$array_nb[0]; $j++)
					{
						if ($array_nb[$j]&1)
						{
							$len = ($array_nb[$j]-1)/2;
						}
						else
						{
							$len = ($array_nb[$j]/2);
						}
						
						$string = $string.'	irsend.sendRaw(channel'.($j).', '.$array_nb[$j].', '.$len.');
';
						$string = $string.'	delay(2);

';
					}
					
					$string = $string.'}';
					
					include_once('geshi/geshi.php');
					$geshi = new GeSHi($string,'c');
					
					echo $geshi->parse_code();
				}
				?>
			</div>
	</body>
</html>

Il est assez long puisque je gère aussi le multi-ligne :grin:

Kouaaks:
Salut,

hmm oui je procède un peu de la même manière. ^^
Et sinon pour les bugs avec les * et les +, je ne l'ai traite pas puisque l'arduino ne donnera jamais ces caractères. :slight_smile:

oui, mais quelqu'un peut très bien mettre n'importe quoi dans ton entre les chiffres, j'ai testé :wink: et le n'importe quoi ressort.

Oui c'est vrai, au pire je peux toujours rectifier ça

Tient ... personne n'as tenté de faire un bête preg_replace() ?
L'extraction des différents champs de la string d'origine ne demanderait qu'une regex basique et gérerait tout les cas d'erreurs de syntaxe possible.