Проблемы с прерыванием Arduino Nano с NRF24le1 - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь создать беспроводное управление светодиодной полосой. Для этого я использую 2 Arduino Nano с чипом NRF24le1 общаться друг с другом. Arduino 1 служит в качестве контроллера / мастера и имеет 3 кнопки и 1 фейдер для выбора соответствующего режима освещения / затемнения, а также Чтобы служить интенсивности света. Я хотел бы, чтобы значения были 6 байтов (button1, button2, button3, faderintensiät) и получил 2-й Arduino. Не константные значения отправляются, только при Смена ценностей. На 2-й нано должны быть активированы с помощью флагов прерываний, если нажать кнопку что и текущее значение из Fader Held так что петля остается прозрачной и там через RGBW Led Stripe, всегда после которого выбран флаг, может быть повторен.

Как я могу прикрепить прерывание? На моем передатчике 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
  }
}
...