Salut,
Pour les portails y'a beaucoup de télécommande universelle après tout dépend l'âge de ton système, j'ai justement un collègue qui m'a demandé de l'aide ce week end pour essayer de bricoler ou trouver un truc pour faire une autre télécommande de sa copropriété : je sais pas de quand ça date mais j'ai jamais vu ça et rien de chez rien sur le net, c'est du 3khz ...
Après pour ton portail ne néglige pas un point embêtant : il va falloir apparier à chaque ouverture/fermeture ... Problème du profil SPP en BT ...
Pour tes blocks il s'agit juste d'un renommage d'un listpicker.
Pour ton souci de code : oublie les String déjà. Enfin c'est pas forcément de la que vient le problème mais les String d'une part c'est foireux, d'autre part on s'en passe très très bien.
J'ai repris ton code :
/***********************************************************************/
/* ANDRUINO V1.0 */
/* */
/* Programme nécessaire au fonction de l'Application Android Andruino */
/* */
/* le 27/02/2015 par Alexandre Pailhoux */
/* */
/* Schéma et App sur: http://les-electroniciens.com */
/***********************************************************************/
#include <SoftwareSerial.h>
SoftwareSerial HC06(13,12);
char messageRecu[100];
/***********************************************************************/
/* INIT */
/***********************************************************************/
void setup()
{
HC06.begin(9600);
for(int i=0;i<=11;i++)
{
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
}
/***********************************************************************/
/* BOUCLE INFINIE */
/***********************************************************************/
void loop()
{
if(HC06.available() {
delay(20);
memset(messageRecu,NULL,sizeof(messageRecu));
int i=0;
while(HC06.available()) messageRecu[i++] = HC06.read();
if (strstr(messageRecu,"D02") != NULL) digitalPin(2);
if (strstr(messageRecu,"D03") != NULL) digitalPin(3);
if (strstr(messageRecu,"D04") != NULL) digitalPin(4);
if (strstr(messageRecu,"D05") != NULL) digitalPin(5);
if (strstr(messageRecu,"D06") != NULL) digitalPin(6);
if (strstr(messageRecu,"A0") != NULL)) analogPin(0);
if (strstr(messageRecu,"A1") != NULL)) analogPin(1);
}
}
void digitalPin(int pin) {
if (strstr(messageRecu,"ON") != NULL)) digitalWrite(pin,HIGH);
else if(strstr(messageRecu,"OFF") != NULL)) digitalWrite(pin,LOW);
else analogWrite(pin,getPWMValue(messageRecu));
}
void analogPin(int pin) {
float valeurAnalog = 0;
valeurAnalog = analogRead(pin);
valeurAnalog = valeurAnalog*4.8/100;
char buffer[10];
memset(buffer,NULL,sizeof(buffer));
itoa(valeurAnalog,buffer,10); // a diviser par 10 sur appli
HC06.print(buffer);
}
byte getPWMValue(char* toParse){
char buffer[5];
memset(buffer,NULL,sizeof(buffer));
buffer[0]=toParse[3];
buffer[1]=toParse[4];
buffer[2]=toParse[5];
return byte(atoi(buffer));
}
Pas testé. Plus de String, j'ai revu la partie réception série, utilisation de fonctions pour alléger le tout, j'ai pas gérer toutes les combinaisons.