IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Eclairage automatique d'un aquarium


Sujet :

Raspberry Pi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Eclairage automatique d'un aquarium
    Bonjour tout le monde,

    J'ai acheté un aquarium il y a quelques semaines et j'aimerai automatiser l'éclairage de celui-ci.
    Pour cela j'utilise un relais contrôlé par un Arduino qui lui-même est relié à une Raspberry Pi.


    J'ai donc créé un programme python (qui utilise la bibliothèque Serial) qui sera activé par une tâche planifiée :

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import serial
     
    port = "/dev/ttyUSB0"
    output= 9600
    ser = serial.Serial(port, output)
    nb ="1"
    #nb = raw_input("nb: ")
     
    ser.write(nb)
     
    #print(ser.name)
    print(nb)

    le code est simple et pourtant il ne se passe rien à l'exécution.
    Ce qui est bizarre c'est que si je remplace le nb=1 par le raw_input() qui est en commentaire et que l'utilisateur rentre bien "1", le relais se déclenche...

    Voici le code de la Arduino :

    Code Arduino : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    int byte_read = 0; //<= the current byte
    int recieved_integer = 0; //<= the current recieved integer
     
    void setup() {
      pinMode(2, OUTPUT);
      digitalWrite(2, HIGH);
     
      Serial.begin(9600);
    }
     
    boolean is_a_number(int n){
      return n>=48 && n <=57;
    }
     
    int ascii2int(int n, int byte_read) {
      return n*10 + (byte_read - 48);
    }
     
    void loop() {
      recieved_integer =0;
      Serial.write("coucou");
      if (Serial.available()) { 
     
        int byte_read = Serial.read();
     
        if (is_a_number(byte_read)) {
          recieved_integer = ascii2int(recieved_integer, byte_read);
        }
     
        switch (recieved_integer ) {
          case 1:
              digitalWrite(2, LOW);
            break;
          case 2:
              digitalWrite(2, HIGH);
            break;
        }     
     
     
      }
      delay(2000);
    }

    Si vous avez une solution à mon problème je suis preneur...
    Dernière modification par Invité ; 12/10/2019 à 14h42. Motif: Ajout coloration syntaxique

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 210
    Billets dans le blog
    48
    Par défaut
    Bonjour,

    C'est sans doute parce que l'ouverture du port dans Python provoque un reset de l'Arduino et qu'il faut lui laisser le temps de redémarrer avant d'y envoyer des données.
    Le temps de la saisie au clavier grâce au raw_input, l'Arduino a fini de démarrer et est prêt à recevoir les données.

    Une solution simple, après l'ouverture du port, faire une pause d'une ou deux secondes avant d'écrire dessus.

    Question : raw_input, c'est du Python 2. Pourquoi ne pas passer à Python 3 ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai testé de mettre un time.sleep(5) (j'ai même essayé avec 20 secondes de pause), cela n'a rien changé ...

    Pour le raw_input() j'avais suivi un tuto et je ne faisais pas attention à la version de python que j'utilisais... Mais maintenant j'utilise bien la version 3

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 210
    Billets dans le blog
    48
    Par défaut
    Bonjour,

    Citation Envoyé par SabSab43 Voir le message
    J'ai testé de mettre un time.sleep(5) (j'ai même essayé avec 20 secondes de pause), cela n'a rien changé ...
    Même en Python 2 ? Parce qu'avec Python 3 il pourrait bien il y a voir d'autres soucis dus au traitement des chaînes de caractères qui est différent de Python 2

  5. #5
    Invité
    Invité(e)
    Par défaut
    Même résultat en python 2...

    Pour lancer un programme un python 3 il faut bien utiliser la commande python3 programme.py et pour python 2 la commande python programme.py ?
    Je suis complétement novice avec les Raspberry et les Arduino donc peut-être que j'utilise pas la bonne commande ?

    Je remets mon code au cas où (le "Finish !" s'affiche bien à la fin du programme)...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import serial
    import time
     
    port ="/dev/ttyUSB0"
    output = 9600
    ser = serial.Serial(port, output)
    nb = 1
     
    time.sleep(5)
    ser.write(nb)
     
    print("Finish !")

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 210
    Billets dans le blog
    48
    Par défaut
    nb=1 ou nb="1" ? Ce n'est pas la même chose...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6] [Interface] Redimensionnement automatique
    Par ychalan dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/09/2002, 18h32
  2. BDE : Configurer automatiquement le NETDIR
    Par Harry dans le forum Paradox
    Réponses: 10
    Dernier message: 29/07/2002, 11h33
  3. Génerer automatiquement plusieurs fichier .doc
    Par brunovitch dans le forum QuickReport
    Réponses: 3
    Dernier message: 09/07/2002, 08h19
  4. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo