Witam, pracuję nad komunikacją pomiędzy dwoma arduino, który to ma wysyłać dane z czujnika piorunów. Lecz nadajnik nie chce pracować nadawać informacji. O to kod nadajnika:
#include "I2C.h" //I2C Library can be downloaded below
#include "AS3935_I2C.h" //Include AS393_i2C Library can be downloaded below
#include <Wire.h>
volatile int8_t ISR_Trigger = 0; // interrupt trigger global var
#define SI_PIN 9 //Set SI pin here
#define IRQ_PIN 2 // digital pins 2 and 3 are available for interrupt capability
#define AS3935_ADD 0x02 // x03 <-- you can use i2C scanner to see the i2c address
#define AS3935_CAPACITANCE 72 // <-- SET THIS VALUE TO THE NUMBER LISTED ON YOUR BOARD
#define AS3935_INDOORS 1 // Set to enabled for Indoor Used
#define AS3935_OUTDOORS 0 // Set to enabled for Outdoor Used
#define AS3935_DIST_DIS 0
#define AS3935_DIST_EN 1
void AS3935_ISR();
AS3935_I2C lightX((uint8_t)IRQ_PIN, (uint8_t)SI_PIN, (uint8_t)AS3935_ADD);
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("14CPRE | AS3935 Lightning Sensor Test");
Serial.println("Starting...................");
delay(2000);
I2c.begin(); // Set i2C Libr Enable pullups set to 400kHz speed
I2c.pullup(true); //Set i2C pUll up
I2c.setSpeed(1); //Set speed to 1
delay(2); // Delay
lightX.AS3935_DefInit(); // set registers to default
lightX.AS3935_ManualCal(AS3935_CAPACITANCE, AS3935_OUTDOORS, AS3935_DIST_EN); //
attachInterrupt(0, AS3935_ISR, RISING);
lightX.AS3935_PrintAllRegs();
ISR_Trigger = 0; // clear trigger
}
void loop()
{
while(0 == ISR_Trigger){
char piorun[6] = {0x7E, 'k','k','k','k',0x7F};
}
delay(5);
ISR_Trigger = 0; // reset interrupt flag
uint8_t int_src = lightX.AS3935_GetInterruptSrc();
if(0 == int_src)
{
Serial.println("IRQ source result not expected");
}
else if(1 == int_src)
{
uint8_t lightning_dist_km = lightX.AS3935_GetLightningDistKm();
if(lightning_dist_km > 10){
char piorun[6] = {0x7E, '1',lightning_dist_km,'k','k',0x7F};
}
}
else if(2 == int_src)
{
char piorun[6] = {0x7E, '1','3','k','k',0x7F};
}
else if(3 == int_src)
{
char piorun[6] = {0x7E, '1','3','k','k',0x7F};
}
lightX.AS3935_PrintAllRegs(); // Set for debug
}
void AS3935_ISR() //IRQ Handler for AS3935 Interrupts, set to return void take no arg.
{
ISR_Trigger = 1;
}
void turn(byte fn[6])
{
byte chk = 0;
byte i;
for(i = 0;i<4;i++)chk ^=fn[i];
fn[4] = chk;
for(i=0;i<6;i++)Serial.write(fn[i]);
}