Télécommande APC220 portée 1000m
Après plusieurs demandes, je met ce petit tuto concernant les module émetteur récepteur APC220. Permettant de communiquer soit entre PC et arduino ou entre deux arduino. Je vais me pencher sur cette dernière config.D'après les spécifications technique ce petit module a une portée d'environ 1km en zone dégagée (pas testé)
Il est possible de configurer le module par le biais d'un petit soft (fréquence, ID, ....), j'y reviendrai plus tard.
Le câblage
Le câblage reste ultra simple !!
Il n'y a pas de module APC220 dans la bibliothèque Frizing j'ai donc pris un module approchant!
Je n'ai pas mis de led sur le récepteur car dans le sketch en exemple j'utilise celle de la carte. Vous remarquerez également que j'ai branché les bornes RX et TX des APC220 sur les bornes 10 et 11 de l'arduino ceci car j'utilise SoftwareSerial et donc je laisse la port série libre.
Les sketchs
Comme je l'ai dit plus haut, j'utilise la librairie SoftwareSerial.Le programme reste simple:
L'émetteur
"mySerial.begin(9600);"
création d'un flag "flag='a'; "
et envoie vers le récepteur
mySerial.print(flag);
Le récepteur
Ouverture du port virtuel
"mySerial.begin(9600);"
Configuration en mode réception
if(mySerial.available() > 0)
state = mySerial.read();
Réception du flag
if (state == 'a') {// (ici ce sera state car dans le programme final je force l'état du flag)
digitalWrite(ld,HIGH);
Les codes
Emetteur
//EMETTEUR by arduino-creations.blogspot.fr
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
int button_open =4;
int button_close =3;
int mes = 0;
char flag;
void setup()
{
pinMode(button_open, INPUT_PULLUP);
pinMode(button_close, INPUT_PULLUP);
Serial.begin(9600);
mySerial.begin(9600);
}
void loop()
{
if( digitalRead(button_open)==LOW)
{
flag='a';
mySerial.print(flag);
}
else
if( digitalRead(button_open)==HIGH)
{
flag='A';
mySerial.print(flag);
}
if(digitalRead(button_close)==LOW)
{
flag='b';
mySerial.print(flag);
}
delay(20);
}
Récépteur
//RECEPTEUR by arduino-creations.blogspot.fr#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
int ld = 13;
int state;
int flag=0;
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(ld, OUTPUT);
digitalWrite (ld,LOW);
}
void loop() {
if(mySerial.available() > 0){
state = mySerial.read();
flag=0;
}
if (state == 'a') {
digitalWrite(ld,HIGH);
Serial.print(state);
if(flag == 0){
flag=1;
}
}
else if (state == 'A'){
digitalWrite(ld,LOW);
Serial.print(state);
if(flag == 0){
flag=1;
}
}
delay(10);
}