bonjour,
je plante le décor :
matériel mis en œuvre :
x1 Arduino NANO (master I2C)
x1 Attiny84 (slave i2c)
x1 moteur x25.168 switech
x1 LED (debbug)
x1 encodeur rotatif (source développement avant projet final)
Fonctionnement :
pour faire simple, quand je fais tourner l'encodeur relié à la NANO, celui-ci envoi un nombre pour faire tourner le moteur relié à l'Attniny84 via le bus I2C.
le Hic c'est que quand le maitre dépasse 255, le slave ( l'attiny84) ne va pas plus loin).
En sortie de maitre j'ai un Int .
voici le code du slave :
#define I2C_SLAVE_ADDRESS 0x3 //this slave address (0x1, 0x2, 0x3)
#include <TinyWireS.h> //the ATTiny Wire library
#include <SwitecX25.h>
#define STEPS (315*3)
SwitecX25 motor1(STEPS,7,8,9,10);
int LEDPin = 1; //indicator LED
int i=1,ias;volatile byte reg_position;
void setup() {
motor1.zero();
// motor1.setPosition(STEPS/2);
TinyWireS.begin(I2C_SLAVE_ADDRESS);
TinyWireS.onReceive(receiveEvent);
pinMode(LEDPin, OUTPUT);
digitalWrite(LEDPin, HIGH);
}void loop() {
motor1.update();
TinyWireS_stop_check();
digitalWrite(LEDPin, LOW );
}void receiveEvent(uint8_t howMany)
{
if (howMany < 1)
{
// Sanity-check
//. digitalWrite(LEDPin, LOW );
return;
}
digitalWrite(LEDPin,HIGH); // debbug
reg_position = TinyWireS.receive();
ias = int(reg_position);
//howMany--;
/* if (!howMany)
{
// This write was only to set the buffer for next read
return;
}
*/
motor1.setPosition(map( ias , 0, 360, 0, STEPS ));
}
auriez vous une idée pour résoudre ce bug, bug qui m'a fait lire des Km de lignes sur le net mais sans trouver une réponse adaptée.
Merci pour votre aide
Cordialement