• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Nokia 5110 + nRF24L01
#1
Witam, mam pytanie czy da się podłączyć jednocześnie ekran Nokia 5110 i moduł radiowy nRF24L01? Jeśli tak to jak to zrobić? Próbuję sam ale niestety nie działa moduł radiowy. Pozdrawiam.

Edit:
Dodaję kod:

Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Adafruit_GFX.h>                    
#include <Adafruit_PCD8544.h>            
#include <OneWire.h>
#include <DallasTemperature.h>

int nokiaLight = 2;
int CEPin = 28;
int CSPin = 29;
int potencjometr = A0;

int pot[1];

OneWire oneWire(A14);
DallasTemperature sensors(&oneWire);

const uint64_t pipe = 0x123456789ALL;

RF24 radio(CEPin, CSPin);

Adafruit_PCD8544 display = Adafruit_PCD8544(24, 25, 26);

void setup() {
pinMode(nokiaLight ,OUTPUT);
pinMode(potencjometr, INPUT);

display.begin();
display.clearDisplay();

radio.begin();
radio.openWritingPipe(pipe);

sensors.begin();
}

void loop() {

  pot[0]= analogRead(potencjometr) / 4;   //przypisz pierwszemu elementowi tablicy (pierwszej zmiennej) wartość z ADC
  radio.write(pot, sizeof(pot));

  sensors.requestTemperatures();
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(BLACK);
  display.setCursor(5,5);
  display.print("Temp:  ");
  display.setTextSize(2);
  display.setCursor(0,30);
  display.print(sensors.getTempCByIndex(0));
  display.print((char)247);
  display.print("C");
  display.display();

}
 
Odpowiedź
#2
Domyślam się, że używasz płytki Mega, próbowałeś używać SPI sprzętowego? Zdefiniuj piny SS/CE dla tych urządzeń. I zalicz kurs Arduino, poczytaj o millis(), dla DS włącz tryb asynchroniczny bo i tak wszystko będzie kuleć, kurs jest tu: https://forbot.pl/blog/kursy.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Tak, SPI sprzętowe to jest te 6 osobnych pinów? SS to jest to samo co CS? bo jeśli tak to chyba jest wszystko zdefiniowane w int jeśli chodzi o radio, a w wyświetlaczu jest tylko CS pod 25. Przeczytałem ten kurs i pododaje millis() .
 
Odpowiedź
#4
SS/CS (to to samo) dla każdego urządzenia na magistrali SPI ma być osobne, CLK, MOSI, MISO wspólne, jak nie wiesz, który to ma być pin możesz sobie wydrukować Serial.print(MOSI) i dostaniesz numerek. W Arduino MEGA nie są to raczej piny 24, 25, 26 co jak widać używasz: Adafruit_PCD8544(24, 25, 26);, jak tu podłączyłeś również radio, które korzysta ze sprzętowego SPI to nie zadziała. W przykładzie biblioteki do Noki masz taki opis:
Kod:
// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

// Hardware SPI (faster, but must use certain hardware pins):
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
// Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
// Note with hardware SPI MISO and SS pins aren't used but will still be read
// and written to during SPI transfer.  Be careful sharing these pins!
LCD może zadziałać, bo jak nie wykorzystasz sprzętowego, to i tak zadziała na softwarowym SPI, ale nie musi tak być dla modułu nRF.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
To SS mam osobne, w arduino Mega CLK, MOSI, MISO są na pinach 52, 51, 50 i mam tak podłączone. Ale dalej nie rozumiem dlaczego cały kod się zacina przy używanym radiu i jak to zlikwidować.
 
Odpowiedź
#6
Pokaż aktualny kod i schemat.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#7
Wstawiam kod i schemat. Schemat robiłem pierwszy raz więc jeśli coś poprawić to daj znać. 

Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Adafruit_GFX.h>                    
#include <Adafruit_PCD8544.h>      
#include <OneWire.h>
#include <DallasTemperature.h>

int nokiaLight = 2;
int CEPin = 28;
int CSPin = 29;
int potencjometr = A0;

int pot[1];

unsigned long aktualnyCzas = 0;
unsigned long zapamietanyCzas = 0;

OneWire oneWire(A14);
DallasTemperature sensors(&oneWire);

const uint64_t pipe = 0x123456789ALL;

RF24 radio(CEPin, CSPin);

Adafruit_PCD8544 display = Adafruit_PCD8544(24, 25, 26);//(RST, CS, DC)

void setup() {
 pinMode(nokiaLight ,OUTPUT);
 pinMode(potencjometr, INPUT);

 display.begin();
 display.clearDisplay();
 
 radio.begin();
 radio.openWritingPipe(pipe);

 sensors.begin();

}

void loop() {
 
   aktualnyCzas = millis();
 
    pot[0]= analogRead(potencjometr) / 4;  
    radio.write(pot, sizeof(pot));
   
if (aktualnyCzas - zapamietanyCzas >= 500UL)
  { zapamietanyCzas = aktualnyCzas;
   sensors.requestTemperatures();
   display.clearDisplay();
   display.setTextSize(2);
   display.setTextColor(BLACK);
   display.setCursor(5,5);
   display.print("Temp:  ");
   display.setTextSize(2);
   display.setCursor(0,30);
   display.print(sensors.getTempCByIndex(0));
   display.print((char)247);
   display.print("C");
   display.display();
 }
}


Załączone pliki Miniatury
   
 
Odpowiedź
#8
Nie widzę co prawda zasilania, ale zakładam że jest. Przejrzałem swoje próby z tym radiem i wypatrzyłem u Ciebie w szkicu dwie biblioteki:
#include <nRF24L01.h>
#include <RF24.h>
Której z nich używasz? Mam zapisany jako działający przykład z tą RF24.h, czy u Ciebie radio w ogóle działa pewnie w każdych warunkach bez tego ekranu Nokii? Pomaga kondensator i zmniejszenie mocy radia.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#9
Zasilanie jest. Na stronie z której brałem kod i przykład do radia biblioteki były opisane tak:
#include <nRF24L01.h>   //biblioteka do obsługi danego modułu
#include <RF24.h>       //bazowa biblioteka dla rodziny modułów RF24
Sprawdziłem bez ekranu i kod się jakby zacina w tym momencie:
     pot[0]= analogRead(potencjometr) / 4;   

     radio.write(pot, sizeof(pot));
     Serial.println("Tak"); // sprawdzenie czy kod idzie dalej
Czyli wychodzi że coś źle mam z radiem.
 
Odpowiedź
#10
Na razie doprowadź kod do tego, że działa osobno radio i osobno ekran (drugie już masz). Do każdej biblioteki masz przykład i na tym bazuj. Ja testowałem przykład transfer i rzeczy do ustawienia było znacznie więcej, a Twój szkic kompiluje się bez problemu również po zakomentowaniu biblioteki nrf2401 tak że w ogóle nie jest potrzebna. Dopisałem też uwagę w używanym przykładzie: problem z nawiązaniem komunikacji, wskazane kond ceramiczne, wskazane ustawienie mocy radia na min  radio.setPALevel(RF24_PA_MIN); więc to też miej na uwadze.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości