Sujet : mon premier code

voici mon premier code, il s'agit de faire clignoter 2 led avec des fréquences spécifiques...

/*
  Blink
  Turns on an Green and a Red LED with each an own frequence.

 */
 
// Pin 13 has an LED connected on most Arduino boards.

int ledVerte = 13;
int timerVerte = 0; 

int ledRouge = 12;
int timerRouge = 0; 


// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(ledVerte, OUTPUT);     
}


void blinkAsynchrone (int led, int delayOn, int delayOff) {
    if(led==ledVerte) {
      if (timerVerte==0) digitalWrite(ledVerte, HIGH); // passe à HIGH et y reste pendant qu'on compte.... 
      else {
        if (timerVerte>delayOn) digitalWrite(ledVerte, LOW); //passe à LOW lorsque timerVerte=delayOn et y reste pendant qu'on compte
        if (timerVerte>(delayOn+delayOff)) timerVerte=-1;  //on recommence à compter à partir de zéro
      }
      timerVerte++;
    }
    
    if(led==ledRouge) {
      if (timerRouge==0) digitalWrite(ledRouge, HIGH); // passe à HIGH et y reste pendant qu'on compte.... 
      else {
        if (timerRouge>delayOn) digitalWrite(ledRouge, LOW); //passe à LOW lorsque timerVerte=delayOn et y reste pendant qu'on compte
        if (timerRouge>(delayOn+delayOff)) timerRouge=-1;  //on recommence à compter à partir de zéro
      }
      timerRouge++;
    }
}

// the loop routine runs over and over again forever:
void loop() {

    blinkAsynchrone(ledVerte, 1000,1000); 
    blinkAsynchrone(ledRouge, 600,300); 
   delay(1);  

    

}

comment faire pour rendre le tout réellement asynchrone (i.e. sans le delay(1) bien pourri ;-) ) ?
Frédéric

2

Re : mon premier code

Et bien il existe la solution "DuinOS" : http://www.pobot.org/-DuinOS-.html

Ou d'autres solutions plus simples (mais moins puissantes) comme la librairie MsTimer2 qui permet d'avoir un appel récurrent à une fonction donnée.

(oups, le serveur n'était pas passé à l'heure d'hiver...)

Re : mon premier code

Merci Julien,
en fouillant sur le web, je pensai tenir la solution mais le code ne compile pas :
aynchBlinkLed:23: error: ISO C++ forbids declaration of 'initBlinkVerte' with no type
aynchBlinkLed.cpp: In function 'int initBlinkVerte(int, int)':
aynchBlinkLed:27: error: 'MsTimer2' has not been declared
aynchBlinkLed:28: error: 'MsTimer2' has not been declared
aynchBlinkLed:33: error: 'MsTimer2' has not been declared
aynchBlinkLed:34: error: 'MsTimer2' has not been declared


/*
  Blink
  Turns on an Green and a Red LED with each an own frequence.

 */
 
// Pin 13 has an LED connected on most Arduino boards.

int ledVerte = 13;
int ledRouge = 12;
 

#include <MsTimer2.h>

void switchOffVerte () {
  digitalWrite(ledVerte, LOW);
}

void switchOnVerte () {
  digitalWrite(ledVerte, HIGH);
}


initBlinkVerte (int delayOn, int delayOff){
  switchOffVerte();
  delay(delayOff);
  
  MsTimer2::set(delayOn+delayOff, switchOnVerte); // 500ms period
  MsTimer2::start();
  
  switchOnVerte();
  delay(delayOn);
  
  MsTimer2::set(delayOn+delayOff, switchOffVerte); // 500ms period
  MsTimer2::start();
  
}

void setup() {
  pinMode(ledVerte, OUTPUT);
  initBlinkVerte(300,1000);
}

void loop() {
}

il y a qqch à rajouter pour que le compilateur trouve le .h ?

4

Re : mon premier code

Pas si simple ! Seules les bibliothèques que tu vois dans le second menu avec la commande "import library..." sont activées sur ton installation.

Et MsTimer2 doit être téléchargée et installée  : www.arduino.cc/playground/Main/MsTimer2

Un des robots construits par un adhérent avec MsTimer2 : http://www.pobot.org/CerBac-un-robot-Arduino.html

Re : mon premier code

Merci de ton aide Julien. Si j'ai bien compris je dois :

1 télécharger les librairies mais où ? cela dépend-il du chipset ? de la marque de la carte ? ou de rien parce que le C est "portable" ?

2 installer le "package" depuis l'interface arduino 1.0.1... mais comment ?

6

Re : mon premier code

Il y a une explication de l'installation des libraries ici : http://arduino.cc/en/Guide/Libraries

Toutes les bibliothèques ne fonctionnent pas pour toutes les cartes. Celle que tu as (DFRDuino Uno-like) est celle qui les supporte le mieux, c'est avec les Mega et certaines puces spéciales qu'il y a des problèmes, car les pattes du circuit ne correspondent pas à ce qui est prévu.