Bonjour à tous, je débute en arduino, notamment à utiliser des capteurs.
J'ai deux arduinos, j'aimerais que l'une des arduino lise l'info d'un capteur I2C, transforme ce qu'elle lit légerement et envoie sous forme de tension entre 0 et 5 V l'information à la seconde arduino qui doit la lire sur l'une de ses pins.
J'arrive à lire la valeur, à la transformer et à l'envoyer (analogWrite), c'est au moment de la réception que ça coince.
J'ai naivement essayé un analogRead mais cela ne marche pas car la "tension variable" en sortie de la première arduino est en fait un pwm, j'obtiens alors 0 ou 5V, de façon aléatoire. j'ai donc cherché à lire un pwm. la fonction "pulseIn(pwmPin, HIGH);" me retourne 0 et en utilisant attachInterrupt(digitalPinToInterrupt(pwmPin), pulseHandler, CHANGE); la fonction pulseHandler n'est jamais appelée. pourtant à l'oscillo je vois mon PWM entre 0 et 5V, sa fréquence de 2 ms et aucun bruit.
Je suis preneur de toute solution permettant d'envoyer à la seconde arduino cette info.
+1 sur le mode de transmission incongru (ne pas oublier de relier les GNDs)
lesquels? (le PWM va varier en fonction de l'arduino et de la broche)
Par exemple sur un Arduino Uno, la plupart des broches PWM ont une fréquence PWM standard d'environ 490 Hz. Cependant la broche 5 a une fréquence PWM de base de 980 Hz
oui pardon, une pro mini et une méga. j'ai deux capteurs de pression de chez blue robotics qui ont la meme adresse I2c et ne peut donc pas les lire avec la meme arduino. j'utilise donc la seconde pour transmettre à la principale la valeur mesurée
Bonjour
Si je ne me trompe pas, les capteurs en I2 peuvent changer d'adresse avec un petit pont de soudure, pour la plupart ? @alexbonbons quel est ton capteur, stp ? Parfois, la bibliothèque utilisée peu permettre de changer l'adresse, également. Postes ton/tes code(s).
oh ce serait fou ! mais j'ai peur que l'electro ne soit pas accessible. ce sont deux Depth sensors (la version 02). j'ai donc utilisé les codes proposés avec pour lire les valeurs de pression et c'est cette valeur que j'utilisais pour mon analogWrite.
#include <Wire.h>
#include "MS5837.h"
MS5837 sensor;
void setup() {
Serial.begin(9600);
Serial.println("Starting");
Wire.begin();
// We can't continue with the rest of the program unless we can initialize the sensor
while (!sensor.init()) {
Serial.println("Init failed!");
Serial.println("Are SDA/SCL connected correctly?");
Serial.println("Blue Robotics Bar30: White=SDA, Green=SCL");
Serial.println("\n\n\n");
delay(5000);
}
sensor.setFluidDensity(997); // kg/m^3 (freshwater, 1029 for seawater)
}
void loop() {
sensor.read();
Serial.print("Depth: ");
Serial.print(sensor.depth());
Serial.println(" m");
delay(1000);
}
je pense essayer par liaison série comme le conseille J-M-L
l'émulation soft I2C sur une autre paire de broches. Un exemple ci-dessous mais il y a d'autres librairies qui proposent la même chose SoftwareWire - Arduino Reference
Interessant ! je me suis penché sur la librairie softwire et je ne comprend pas comment est ce que je pourrais l'utiliser avec mon capteur bluerobotics. Ce capteur est fait pour être lu par la librairie "MS5837.h" et je ne vois pas comment récupérer cette info avec les cables que je défini dans "SDA,SCL,etc...". est ce que tu aurais des conseils la dessus ? Tu saurais adapter mon code ci-dessus avec cette librairie.
C’est le contraire - cette bibliothèque est un exemple de code lisant le capteur. Le capteur en lui même expose une interface standardisée et documentée.
Si vous n’utilisez pas le hardware (et donc la bibliothèque Wire sur Arduino) et vous passez par une émulation logicielle pour le protocole de communication, alors il faut modifier la bibliothèque pour qu’elle utilise l’émulation logicielle
Je n'ai pas eu le temps de regarder en profondeur et je suis occupé ce jour mais, SoftwareWire annonce une compatibilité avec Wire, je pense que l'on doit pouvoir ajouter un init() et un begin() qui prennent en argument un objet SoftwareWire et ça pourrait peut-être faire le job.
D'après le readme du projet
I added some glue to that code to make it behave like the Wire library.
....
made it a drop-in replacement for the Wire library.
@pandaroux007
Certain capteurs composants I2C ne sont pas multiples dans un montage.
Exemple un DS3231, horloge, il serait idiot d’en utiliser plusieurs simultanément. Les adresses I2C étant rares et payantes le stict nécessaire est utilisé. Je n’en ai jamais rencontré, mais j’ai lu qu’il existe maintenant des adresses sur deux octets.