Bac-Ka-Poux-Bêle 2019-2020

Découper votre projet en plusieurs fonctions élémentaires (lecture de capteur, chronométrage, communication wifi, bdd), et prendre les problèmes les uns après les autres.

D'ailleurs je ne comprends pas ce à quoi l'Arduino pourra servir, l'esp8266 doit pouvoir faire tout ça comme un grand.

Bonjour à tous
Je besoin d 'aide s' ils vous plaît. Je veux savoir comment activer une alarm selon "jour_heur et minute".
Merci.

je sens que ce post va vite aller à la poublelle.. lisez les règles d'usage du forum SVP

et avec ça, un petit café ?

dfgh:
et avec ça, un petit café ?

Oui, mais quand (jour, heure, minute) ?

Pour pouvoir servir le café avec un ARDUINO à une heure précise, il faut un DS3231 et un relais.

Bon, OK je sors ... :confused:

Ou un cadran solaire, une cellule photo electrique et un relais...

Ou un sablier, un cellule photo, un bras robot...

Bonjour à tous !

Je viens à vous car j'ai une revue de Projet de fin de terminale SSI vendredi, et voici plusieurs semaines que j'essaye de terminer mon expérimentation.

L’étude que je réalise porte sur la transmission de données, et pour cela j'ai décidé d'envoyer des trames d'un XBee à un autre et de vérifier grace à un Checksum Complément à 255 que la trame a correctement été reçu.

Seulement voila, je n'ai que très peu de connaissances en Arduino et mon programme ne fonctionne pas du tout. Il me reste deux jours et je compte bien réussir à obtenir des résultats.

Le problème à l'envoi est que mes caractères ne sont pas les bons à l'affichage et je reçois des " OK" puis "ERROR" quand j'appuie sur mon bouton.

A la réception, rien ne se passe, je pense que mon parsing n'est pas correct, de ce fait je n'obtiens aucun résultats.

je vous ai joint mes programme d'envoi et de réception ainsi que le protocole d'expérimentation.

Merci d'avance =)

xbee_snd.ino (3.4 KB)

xbee_rcv.ino (4.96 KB)

Protocole Experimental.pdf (81.8 KB)

hbachetti:
Pour pouvoir servir le café avec un ARDUINO à une heure précise, il faut un DS3231 et un relais.

Bon, OK je sors ... :confused:

:grin:

Ou ... juste une arduino avec du personnel dispo H24
il fut un temps où ça devait se faire 8)

Bonjour/bonsoir à toutes et à tous, je me présente BrutusLeCactus et je me manifeste aujourd'hui car j'ai beaucoup de mal avec le code que je dois finir. Alors oui, pour certains mon problème sera d'une facilité à résoudre ou du moins je l'espère pour eux mais moi n'étant pas très calé en langage arduino, j'ai beaucoup de mal. Je vais donc énoncé mon problème :
Mon code est un code barrière infrarouge et a pour but d'allumer une led lorsque cela affiche 0 dans le moniteur série. J'arrive bien à afficher 1 et 0 (1 quand la barrière n'est pas coupé et 0 quand elle est coupée) mais je n'arrive pas à faire allumé la led quand cela affiche 0. Pouvez vous m'aider s'il vous plait ?
Voici le code :
void __ardublockDigitalWrite(int pinNumber, boolean status)
{
pinMode(pinNumber, OUTPUT);
digitalWrite(pinNumber, status);
}

boolean __ardublockDigitalRead(int pinNumber)
{
pinMode(pinNumber, INPUT);
return digitalRead(pinNumber);
}

void setup()
{
Serial.begin(9600);
__ardublockDigitalWrite(3, HIGH);

}

void loop()
{
Serial.print(__ardublockDigitalRead(2));
Serial.println();
}

Bonjour à tous,
j'aurais besoin de rédiger un programme non bloquant. Je m'explique. En fait, je travail actuellement sur un robot qui contient 4 moteurs et 6 capteurs infrarouges. Si par exemple, les trois capteurs infrarouges du devant détectent du vide, alors le robot recule. Si c'est ceux de droite alors il tourne à gauche ect. Le problème, c'est que je me sers de delay. Et donc si mon robot détecte du vide à l'avant, il recule pendant 5 secondes par exemple. Le problème est que du coup, les autres capteurs ne sont plus vérifiés, et si pendant ces 5 secondes, il y a du vide à l'arrière par exemple il va tomber. J'ai essayé avec des boucles while sans succès. Voici un extrait du programme simplifié pour que vous puissiez facilement comprendre le problème :

while(analogRead(infra0)<valA){ //ValA est la variable pour les capteurs infrarouges, infra0 est
un des capteur infrarouge
arret(5000); // Fonction arrêt (le paramètre est un delay)
droite(5000); // Fonction droite (le paramètre est un delay)
}

while(analogRead(infra1)<valA){
reculer(5000);
tourner(5000);
}

while(analogRead(infra2)<valA){
arret(5000);
gauche(5000);
}

Et voici la fonction avancer() pour que vous voyez sa structure :

void avancer(int DELAY){
digitalWrite(sens1AVD,HIGH); //roue avant droite tourne en avant
digitalWrite(sens2AVD,LOW);

digitalWrite(sens1AVG,HIGH); //roue avant gauche tourne en avant
digitalWrite(sens2AVG,LOW);

digitalWrite(sens1ARD,HIGH); //roue arriere droite tourne en avant
digitalWrite(sens2ARD,LOW);

digitalWrite(sens1ARG,HIGH); //roue arriere gauche tourne en avant
digitalWrite(sens2ARG,LOW);

delay(DELAY);
}

Voilà pour le porgramme, j'espère avoir été clair et vous remercie d'avance pour votre aide.

Projet scolaire ?

Si tu lis l'anglais, un tuto est dispo ici

Salut, je travaille sur un projet et j'aimerais pouvoir afficher sur un écran la dernière heure à laquelle mon servomoteur s'est activer (une sorte d'historique ) actuellement j'ai juste réussie à afficher l'heure sur mon écran voici le programme :

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x27,20,2);
RTC_DS1307 RTC;

void setup()

{

Serial.begin(57600);
Wire.begin();
RTC.begin();
RTC.adjust(DateTime(DATE, TIME));

lcd.init();
lcd.cursor_on();
lcd.blink_on();
lcd.backlight();
lcd.setCursor(4,0);
lcd.print("Hello");
delay(1000);
lcd.cursor_off();
lcd.blink_off();
}

void loop()
{
DateTime now = RTC.now();

lcd.clear(); //code pour afficher heure et date de la clock (du RTC) sur l'écran LCD
lcd.print(" ");
lcd.setCursor(4,1);
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
lcd.setCursor(3,0);
lcd.print(now.day(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.print(' ');
delay(1000);

}

J'aimerai donc savoir comment rajouter le servomoteur et afficher sa dernière heure d’ouverture sur mon écran.
Merci d'avance :slight_smile:

Il te suffit de stocker l'heure de démarrage dans une variable :

 DateTime start = RTC.now();

Et ensuite tu affiche suivant le même principe.
Il est possible d'écrire une fonction qui prend en paramètre l'heure à afficher, donc un paramètre du type DateTime.

Un exemple simplissime, donc facile à adapter est le second exemple livré avec l'IDE d'Arduino "BlinkWithoutDelay". Le seul effort susceptible de coller une méningite est de lire 2 entrées de menu....

Alors j’ai déjà essayé d’intégrer la fonction millis, mais je ne suis pas sur de l’avoir bien comprise et ce n’est pas faute d’avoir essayé.
Sur le principe j’ai compris qu’il y a une histoire de chrono, mais je ne vois pas du tout comment l’integrer a mon programme et surtout où. Dans la loop ou dans les fonctions ?
(Et non, il s’agit plus d’un projet personnel que je réalise avec trois autres collègues qu’un projet scolaire).
Merci

Si tes variables temporelles sont globales, tu peux mettre ta gestion du temps où tu veux, loop ou fonctions.

Si tu dois gérer plusieurs chronos liés chacun à une fonction, tu peux mettre chaque gestion dans chaque fonction, ça fait plus propre.

L'idée c'est de tester en début de fonction si le temps est écoulé. Si non, return direct. Si oui, tu exécutes la fonction. Et tu relances ton chrono.

Est ce que ce serait possible de me montrer comment serait construit le programme en intégrant la fonction millis dans une fonction s’il vous plaît ?

Tu déclares des chronos en global

unsigned long chrono1 = 0;
unsigned long chrono2 = 0;

ainsi que des périodes liées à chaque fonction

const unsigned long periode1 = 10000;
const unsigned long periode2 = 25000;

Selon ton besoin tu les initialises dans le setup

chrono1 = millis();
chrono2 = millis();

Lorsque tu veux agir sur le "truc" numéro 1, avec la fonction 1:

void fonction1 () {  // mettre éventuellement des arguments et un type adéquat
  if (millis() - chrono1 < periode1) return;
  chrono1 = millis();

  ... Les instructions liées à la fonction

}

Idem pour les autres fonctions, c'est tout simple...