Show Posts
Pages: 1 ... 102 103 [104] 105 106 ... 241
1546  International / Français / Re: Programme simple utilisant RTC DS1307 on: September 09, 2013, 03:00:20 am
fdufnews s'est mélangé les touches en tapant son code smiley ...il voulait écrire uint8_t en fait.
Oupsss smiley-red
1547  International / Français / Re: AUTOMATE ARDUINO ET PROGRAMMATION "GESTION D'UN SECHOIR" on: September 09, 2013, 02:08:29 am
Quote
je me demande s'il ne me faudrait pas plutôt trois ou quatres arduino

La gestion de 3 séchoirs n'exige pas des temps de réponse très rapide et peut parfaitement être géré par un seul arduino.

Quote
Commander chaque relais, ok, mais lorsque je lance un cycle "automatique" sur un séchoir (mesures/commande relais), je ne vois pas comment je pourrais interagir avec les deux autres séchoirs en stand by, lancer éventuellement un cycle sur les 2 restant ou piloter les relais individuellement (mode manuel) car le programme bouclerait sur une fonction acquisition de mesure/pilotage relais et ne pourrait sortir de cette boucle que lorsque le cycle de séchage serait terminé...

Mets toi à la place de ton arduino. Qu'est-ce que tu ferais si tu devais le faire à la main.
Début du processus
  regarder les paramètres du 1er équipement:
    - il est en stand by je passe
    - il est actif:
         - acquérir les paramètres (température, humidité, ...
         - agir en conséquence (allumer/couper le chauffage, la ventilation, ....)
  regarder les paramètres du 2ème équipement:
    - il est en stand by je passe
    - il est actif:
         - acquérir les paramètres (température, humidité, ...
         - agir en conséquence (allumer/couper le chauffage, la ventilation, ....)
  regarder les paramètres du 3ème équipement:
    - il est en stand by je passe
    - il est actif:
         - acquérir les paramètres (température, humidité, ...
         - agir en conséquence (allumer/couper le chauffage, la ventilation, ....)
retour au début


la paire "début de cycle / retour au début" c'est la fonction loop() de l'arduino
Il faut donc traiter chacun à son tour mais ne pas rester bloqué dans une fonction. Si tu dois gérer des temporisations, il ne faut pas utiliser delay() qui est bloquant mais gérer le temps avec des variables et la fonction millis() et à chaque itération de la boucle vérifier si le "délais" est écoulé.
1548  International / Français / Re: Programme simple utilisant RTC DS1307 on: September 08, 2013, 02:54:02 pm
oui, à la limite je comprends bien cette boucle, c'est un début.

Mais voila, j'utilise la library RTClib, je ne sais pas comment déclarer les variables, qui sont heures minutes seconds, ou encore ce qu'il faut inclure au début du code.

voila mon début de code (désolé..)

Code:

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;


void setup() {                
  
  pinMode(13, OUTPUT);
 
  
DateTime now = RTC.now();

;if ((RTC_DS1307 ............. )
  {
    digitalWrite(13, HIGH);
  }

 else if ((RTC_DS1307 ......... )
    digitalWrite(13, LOW);
  }
Avec RTClib, il faut distinguer 2 choses:
   la classe RTC_1307 qui accède au composant horloge temps réel
   la classe DateTime qui manipule le temps

Une fois l'horloge à l'heure normalement tu n'utilises plus que RTC.now() qui va lire l'heure courante dans le composant et le mettre dans un objet DateTime. C'est ce que fait cette ligne:
Code:
DateTime now = RTC.now();
ensuite tu utilises les propriétés de l'objet now pour récupérer les différentes parties de l'heure.
 now.year()
 now.month()
 now.day()
 now.hour(), et pareil avec .minute(), .second() et .dayOfWeek
Ces propriétés retournent des nombres de type uint8_t sauf l'année qui retourne un uint16_t.

Donc tu peux les utiliser facilement. Un exemple simple qui allume une LED à une heure donnée
Code:
DateTime heureRTC;
uint8_t heureAlarme=8;
uint8_t minuteAlarme=23;

heureRTC = RTC1307.now();

if (heureRTC.hour()==heureAlarme && heureRTC.minute()==minuteAlarme){
    digitalWrite(LEDpin,HIGH);
}else{
    digitalWrite(LEDpin,HIGH);
}

Ce morceau de code pour qu'il fonctionne correctement doit être appelé périodiquement. Il peut par exemple être placé dans la fonction loop()

edit correction sur l'erreur de type uint8_t
1549  International / Français / Re: Programme simple utilisant RTC DS1307 on: September 08, 2013, 01:59:12 pm
Il y a un tuto ici : http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/overview
Les fonctions de base de la librairie sont présentées. Les explications sont données pour écrire et lire dans le composant.
Si tu sais lire l'heure, après il suffit de faire des comparaisons entre l'heure lue et une heure que tu as fixée au paravent et à laquelle tu déclenches un événement.
Quand je dis heure cela peut aussi bien être heure, minute, seconde ou seulement minute ou n'importe quelle combinaison des champs de la date et de l'heure.
Le boîtier gérant aussi la date, tu peux faire un truc qui tous les mardi entre 15h00 et 15h16 fera clignoter un LED 5 secondes toutes les minutes.
1550  International / Français / Re: Question sur les moteurs pas à pas on: September 08, 2013, 11:37:12 am
Quote
après avoir visionner ce tutoriel , je pensais qu'il était possible de brancher directement le moteur, mais c'est peut etre un cas spéciale.
Tu ferais bien de le revoir alors parce que pendant la moitié de la vidéo Massimo justement explique que l'arduino ne peut pas piloter directement un moteur et qu'il faut utiliser un organe de commande de puissance; Dans le cas présenté, il utilise un MosFET.
1551  International / Français / Re: Question sur les moteurs pas à pas on: September 07, 2013, 12:43:42 pm
Déjà le second ce n'est pas un moteur pas à pas mais un potentiomètre

Concernant le moteur pas à pas on ne peut pas le brancher directement sur les broches de l'arduino. Il faut utiliser un circuit d'interface "de puissance" qui pourra fournir le courant nécessaire au bon fonctionnement du moteur.
quelque chose comme ça par exemple: http://www.watterott.com/en/Adafruit-Motor-Shield
1552  International / Français / Re: Une pause avec une interruption on: September 07, 2013, 07:52:46 am
Quote
En fait le pb était que à l'appel de sleep.sleepInterrupt(0, RISING); la librairie désactive l'interruption. J'ai donc fait un nouvel appel de attachInterrupt() pour la réactiver.
En fait la librairie Sleep_n0m1 utilise attachInterrupt pour ces propres besoins. Elle attache sa propre fonction de gestion de l'interruption (celle qui est appelée au réveil) et du coup au retour la fonction que l'on avait attachée est perdue.
1553  International / Français / Re: Problème USART - ATMega2560 on: September 07, 2013, 06:08:46 am


Code:
// Pour remplacer le défunt serial.flush()
void monFlush(){
for (int c=0; c<64; c++){
if ( Serial1.available()>0 ) Serial1.read();
else return;
}}

Testé: Cette fonction s'exécute en 0,4ms pour un buffer plein de 63 octets.


Sans doute plus rapide
Code:
while(Serial.available()){
    Serial.read();
}
1554  International / Français / Re: Fonction sinus optimisée ? on: September 07, 2013, 01:41:12 am
i s'incrémentant régulièrement, pour gagner un peu de temps ta boucle peut s'écrire:
Code:
temp_flt = 0;
for(int i = 0; i < G_Donnees_generation.Nbre_points; ++i)
 {           
            // Calcul d'un point du signal
            temp_flt += temp_flt3;
            temp_flt = sin(temp_flt); 
            G_Donnees_generation.points_courbes[i]=temp_flt2*temp_flt;   
}                   
Cela fait gagner une multiplication de flottant

Quote
Et oui sur la ram d'une Due c'est pas le soucis.
Je vais quand même essayer de comprendre ce qu'a fait Skywood en flash
Pas sur que les accès flash puissent rivaliser avec une lecture en RAM.
1555  International / Français / Re: Une pause avec une interruption on: September 06, 2013, 03:33:21 pm
Quote
fdunews, je vais d'abord voir si j'y arrive sans librairie, je ne sais pas de toute façon si elle me sera utile car je cherche pas a mettre en veille l'Arduino, la pause n'est jamais très longue (max 1min).
Si tu avais seulement pris le temps de regarder la librairie en question, tu aurais vu qu'il y a le mode IDLE qui est une simple mise en pause du processeur soit pour un temps donné soit en l'attente d'une nouvelle interruption.
1556  International / Français / Re: Pourquoi Serial.available me retourne toujours 0 on: September 06, 2013, 03:19:48 pm
S'il n'y a pas de données à lire c'est normal que available retourne 0.
Code:
    // checks if the module is started
    answer = sendATcommand("AT", "OK", 2000);
    if (answer == 0)
    {
Dans le code d'origine il semble que le cas soit prévu d'un retour sans donnée.
Il faudrait peut être prévoir un hors temps dans ta fonction.

Si une librairie existe déjà ce serait peut être plus simple de l'utiliser en la dégraissant des fonctions qui ne te sont pas utiles. Le lien que tu donnes pointe sur une librairie indiquée comme obsolète.
1557  International / Français / Re: Fonction sinus optimisée ? on: September 06, 2013, 02:40:12 pm
En y réfléchissant, 2µs !! cela me parait un peu trop rapide.
Il faudrait que je vérifie s'il n'y a pas une embrouille avec la fonction micros() sur le Due.
Demain je mettrai un coup d'oscilloscope pour vérifier.
Bon effectivement le programme devait être trop simple et l'optimisation aidant il ne devait rien se passer du tout.
Je l'ai un peu modifié et maintenant je trouve environ 230ms pour le remplissage de la table.
1558  International / Français / Re: Erreur librairie SerialLcd on: September 06, 2013, 09:51:19 am
La ligne de code où se produit l'erreur c'est celle-là:
Code:
class SerialLCD : public SoftwareSerial{
Tu as bien la librairie SoftwareSerial ?
normalement dans les versions récentes de l'IDE elle devrait être installée.
1559  International / Français / Re: Communauté Arduino sur Paris ? on: September 06, 2013, 08:51:53 am
Moi ce qui me chiffonne c'est cette phrase.
Quote
Nous voulons construire l'Electolab V2, à savoir passer de 180M2 à 1500M2, et devenir un acteur majeur dans le domaine.
Dans les messages précédents sur ce fil, il est apparu que ce qui bloque le plus ce sont les déplacements qui sont particulièrement dissuasifs en région Parisienne. Donc à mon sens une dissémination des hacker space plutôt que leur centralisation m'aurait paru plus pertinente. Quitte à centraliser certaines ressources (rares, chères ou très pointues dans leur utilisation). Les parisiens travaillent de plus en plus loin de leur lieu de résidence et reprendre les transports (personnels ou en commun) après une journée de boulot c'est pas très motivant.
1560  International / Français / Re: Petit Prolème avec mon code on: September 06, 2013, 08:42:08 am
Le Serial.print() surtout à 96000 bauds prend un certain temps.
Peut être cela te fait-il rater un événement fugitif sur un discret.

un "0" de trop ?   smiley-mr-green
C'est vrai. Pour le coup ça n'aurait pas pris trop de temps.
Pages: 1 ... 102 103 [104] 105 106 ... 241