Bonjour à tous,
Voila j'ai depuis peut un arduino mega 2560, je souhaite m'en servir pour controler des relais avec mon PC...bref plutot basic à priori.
J'ai acheté une carte 8 relais et je l'ai connectée, elle fonctionne bien, ensuite j'ai mis sur l'arduino un bout de code pour les controler en serie (trouvé ici Envoyer/Interpréter des commandes par Port Série - MCHobby - Le Blog)
Créé le July 21, 2010, par Mark Aosawa. mark.aosawa@yahoo.com
Modifié en profondeur April 7, 2012 par MC Hobby, info@mchobby.be
*/
//String buffer/mémoire tampon
String cmd = String("");
// Initialiser la LED de la pin 13 comme sortie (OUTPUT)
int ledPin = 34;
int ledPin2 = 36;
void setup() {
// Initialise la communication série (et baud rate à 9600):
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
// Affiche un message quand le port série est ouvert.
// Permet de vérifier que le programme est bien en court de fonctionnement
//Serial.println("OK");
}
void loop() {
// Vérifier si des caractères sont reçu sur le port série
if (Serial.available() > 0) {
// Variable temporaire pour copier le caractère lu
char SerialInByte;
// Lire un caractère (un Byte)
SerialInByte = Serial.read();
// Si c'est --> traiter la commande
if(SerialInByte==13){
ProcessCmd();
}
else{
// sinon, ajouter le caractère à la mémoire tampon (cmd)
cmd += String(SerialInByte);
//et afficher un message de déboggage
Serial.print( "SerialInByte: " );
Serial.print( SerialInByte, DEC );
Serial.print( ", Buffer " );
Serial.println( cmd );
}
}
}
// Renvoyer la commande (contenu du buffer) sur le port série
void printCmd(){
Serial.println(cmd);
}
// Réinitialiser le buffer (et vider le port série)
void clearCmd(){
cmd="";
Serial.flush();
}
// Interpréter la commande reçue
//
void ProcessCmd() {
// Un petit message de débogage. La commande est entourée avec [] pour clairement
// identifier chacun des caractères qui la compose (même les espaces).
Serial.print( "ProcessCmd for [" );
Serial.print( cmd );
Serial.println( "]" );
if(cmd.equals("chauffageoff")){
printCmd();
digitalWrite(ledPin, HIGH);
clearCmd();
}
else if(cmd.equals("chauffageon")){
printCmd();
digitalWrite(ledPin, LOW);
clearCmd();
}
else if(cmd.equals("pompeoff")){
printCmd();
digitalWrite(ledPin2, HIGH);
clearCmd();
}
else if(cmd.equals("pompeon")){
printCmd();
digitalWrite(ledPin2, LOW);
clearCmd();
}
else{
// toutes les autres commandes sont ignorées.
Serial.println("unknown command!");
clearCmd();
}
}
J'usque la tout va bien je lance screen ":~$ screen /dev/ttyACM0 9600" je tape pompeoff il eteint ma pompe pompeon il allume ma pompe...Géniale.
MAIS je voudrais faire de même avec un script afin de pour le mettre dans mon crond.
J'ai testé plusieurs choses,
-
echo "pompeoff\n" >/dev/ttyACM0
-
echo "pompeoff" >/dev/ttyACM0
en python ..
#!/usr/bin/python -O
import serial
ser = serial.Serial('/dev/ttyACM0', 9600)
ser.write('pompeoff')
Avec screen..
screen -mdS session /dev/ttyACM0 9600
Puis
screen session pompeoff
Mais rien n'y fait quand je tente d'envoyer pompeoff les relais clignotes (comme quand je me connect en serie) mais rien de plus...
Pouvez-vous m'aider sur ce sujet SVP??
Merci par avance!