使用NRF24le1中断arduino nano的问题

时间:2019-05-09 19:22:29

标签: arduino interrupt

我正在尝试构建LED条纹的无线控件。 为此,我将2个Arduino Nano与NRF24le1芯片一起使用 互相交流。 Arduino 1用作控制器/主机,具有3个按钮和1个推子 用于选择相应的照明模式/停电,以及 服务光强度。 我想将值设为6个字节(button1,button2,button3, faderintensiät),并在第二个Arduino上获得。 不发送恒定值,仅在 价值观的变化。 然后在第二个Nano上应通过中断标志激活, 如果一个按钮按下什么,推子保持的当前值 这样循环就可以保持清晰,并通过RGBW LED条纹在那里 选择该标志之后,可以进行迭代。

如何附加中断?在我的Transmitter Adruino上,流正在运行

这是我的代码:

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define LED_PIN 3
#define LED_COUNT 228

uint8_t BRIGHTNESS = 60;

// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRBW + NEO_KHZ800);

RF24 wirelessSPI(7, 8); // CE, CSN

#define PinIRQ 3  // Arduino Uno, Mega und Nano: Pin 3
#define IRQ 1

const byte address[6] = "00001";


boolean light_on = false;
boolean mode_a_active = false;
boolean mode_b_active = false;

boolean receivedMessage = false;
int interruptcounter = 0;


uint8_t settings[6] = {0, 0, 0, 0, 0, 0};                 //Saving the incoming data

void setup() {
  pinMode(6, OUTPUT);
  Serial.begin(9600);
  wirelessSPI.begin();
  //wirelessSPI.setAutoAck(1);                  //new
  //wirelessSPI.enableAckPayload();              //new
  //wirelessSPI.maskIRQ(1,1,0);                 //new
  wirelessSPI.setPALevel(RF24_PA_MIN);       //You can set this as minimum or maximum depending on the distance between the transmitter and receiver.
  wirelessSPI.openReadingPipe(0, address);   //Setting the address at which we will receive the data
  wirelessSPI.startListening();              //This sets the module as receiver

  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)

  attachInterrupt(IRQ, incommingmessage, HIGH);
}

void loop()
{
  wirelessSPI.read(&settings, sizeof(settings));  //Reading the data

  if(receivedMessage == true){
    Serial.println("messange on interupt received");
    Serial.print("interruptcounter counts: ");
    Serial.println(interruptcounter);
    Serial.println();
    Serial.print(settings[0]);
    Serial.print(settings[1]);
    Serial.print(settings[2]);
    Serial.print(settings[3]);
    Serial.print(settings[4]);
    Serial.println(settings[5]);
    receivedMessage = false;
  }
}

void incommingmessage()
{
  interruptcounter++;
  while (wirelessSPI.available()) {
    wirelessSPI.read(&settings, sizeof(settings));  //Reading the data
    receivedMessage = true;    // Variable setzen, dass eine neue Nachricht zur Auswertung bereit steht
  }
}

1 个答案:

答案 0 :(得分:0)