View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Programmer le pcDuino : Fichiers : L'appui sur un BP ajoute une ligne dans un fichier texte.

Par X. HINAULT - Juin 2013

Ce que l'on va faire ici

  • Dans ce code, l'appui sur un bouton poussoir va permettre d'enregistrer une ligne dans un fichier texte, à l'emplacement de son choix sur le système. Ce code ouvre les bases de datalogging sur évènements capteurs.
  • Vous remarquerez la simplicité du code obtenu.

Pré-requis

Schéma fonctionnel

  • L'entrée numérique déclenche l'écriture dans le fichier texte.

Matériel nécessaire

Système

  • Le pcDuino seul

E/S

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • un bouton poussoir pour CI,

Instructions de montage

  • Connecter un bouton poussoir entre la broche 2 (configurée en entrée avec rappel au plus) et le 0V

Le montage à réaliser

Le fichier *.py

Copier/coller ce code dans l'éditeur Geany :


#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino

# Ajout d'une ligne dans un fichier lors appui sur un BP

from pyduino import * # importe les fonctions Arduino pour Python

# entete declarative
BP=2  # declare la broche a utiliser
APPUI=LOW # valeur broche lors appui

filepath="" # variable globale chemin fichier

#--- setup ---
def setup():

        global filepath # variable globale

        # configuration du BP
        pinMode(BP,PULLUP) # met la broche en entree avec rappel au plus actif
        Serial.println("La broche "+str(BP)+" est en entree avec rappel au plus actif !")

        # configuration fichier a utiliser
        path=homePath()+ dataPath(TEXT)  # chemin du répertoire à utiliser
        filename="test.txt" # nom du fichier
        filepath=path+filename # chemin du fichier

        print ("Fichier utilise : " + filepath )

# -- fin setup --

# -- loop --
def loop():

        if digitalRead(BP)==APPUI : # si appui BP

                # pas a pas :
                """
                dataFile=open(filepath,'a') # ouvre le fichier en ecriture pour ajout
                dataFile.write("Appui BP : " + nowdatetime() +"\n")
                dataFile.close()
                """


                # ajout dans fichier en 1 ligne
                appendDataLine(filepath, "Appui BP : " + nowdatetime())

                # message console
                Serial.println ("Ajout ligne : "+ "Appui BP : " + nowdatetime() +" dans fichier " + filepath)

                delay (250) # anti-rebond

# -- fin loop --

#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction main
        while not noLoop: loop() # appelle fonction loop sans fin
 

Ce code est également disponible ici : https://raw.github.com/sensor56/pyduino-exemples/master/SD/FileAppendAppuiBp.py

Utilisation

  • Vérifier au préalable que le répertoire utilisé existe sur le système et le créer graphiquement au besoin.
  • Appuyer sur le bouton exécuter dans Geany
  • Une fenêtre de Terminal vide doit apparaître : lors d'un appui sur le bouton poussoir, un message indique qu'une ligne est ajoutée dans le fichier texte :
  • On peut fermer ou non le programme est ouvrir le fichier texte séparément à partir de Geany ou autres éditeur de texte, voire même du navigateur et constaté que le fichier contient bien les lignes ajoutées.
  • Simple et efficace.

Discussion technique

  • Ici, la CPU est trop sollicitée par la boucle loop() donc, on pourra utiliser plutôt un Timer pour lire le BP à intervalle occasionnel plutôt qu'en boucle permanente.