Skocz do zawartości

TFT 1.8' + NRF24l01 czyli konflikt urzadzen na wspolnym SPI


Pomocna odpowiedź

Witam...mam problem jak w temacie..czyli lcd z rf troszke sie "gryza"

Jesli rf (z lcd) pracuje jako nadajnik to wszystko gra...jesli natomiast chcial bym odbierac dane to otrzymuje "smieci" bardzo szybko...w skrocie jedno ardu co 100ms inkrementuje bajta i go wysyla a drugie (z lcd) ma to odbierac...probowalem juz sam zarzadzac pinami CS (low = ON/ high = OFF) ale nic to nie daje...

Dziwi mnie to o tyle bo myslalem ze rf.available() zwraca prawde jesli cos radiowo zostalo odebrane, a tu wychodzi ze jesli cos zostalo wyslane po SPI to rf traktuje to jako pakiet odebrany...🤔 Ma ktos jakies pomysly ciekawe? Dodam ze juz ten temat chwile walkowalem i duzo ludzi zglasza takie problemy...😕 Bede wdzieczny za jaka kolwiek pomoc😉 kod zaraz do-edytuje..

Link to post
Share on other sites
(edytowany)
14 minut temu, ethanak napisał:

ESP czy Arduino?

No wlasnie Arduino...pro mini..juz kod dosylal, choc nie ma tam zadnych cudasiow...wiem ze moge lcd podpiac na softowych pinach, ale chcialem tego uniknac ze wzgledu ze mi poprostu pinow brakuje...wykorzystam docelowo wszystkie na zero..

Odbiornik z LCD

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

byte data = 0;
byte stan = 0;
byte d = 0;
byte dat = 0;

uint32_t last = 0;

RF24 radio(5, 4); // CE, CSN
const byte address[6] = "00001";

#include <TFT.h>  // Arduino LCD library
#include <SPI.h>

// pin definition for the Uno
#define cs   9
#define dc   7
#define rst  8

TFT TFTscreen = TFT(cs, dc, rst);
int xPos = 0;

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.openWritingPipe(address);  //////
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
  radio.setDataRate(RF24_250KBPS);

  TFTscreen.begin();
  TFTscreen.background(250, 16, 200);
  TFTscreen.setRotation(90);
}

void loop() {
  int sensor = analogRead(A0);
  int drawHeight = map(sensor, 0, 1023, 0, TFTscreen.height());

  Serial.println(drawHeight);
 
  TFTscreen.stroke(250, 180, 10);
  TFTscreen.line(xPos, TFTscreen.height() - drawHeight, xPos, TFTscreen.height());

  if (xPos >= 160) {
    xPos = 0;
    TFTscreen.background(250, 16, 200);
  } else {
    xPos++;
  }
     delay(30);

  if ( radio.available() ) {
    radio.read(&data, sizeof(data));
    Serial.println(data);
    data = 0;
  }
}

 

Nadajnik

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

byte data = 0;
byte stan = 0;
byte d = 0;
byte dat = 0;

uint32_t last = 0;

RF24 radio(10, 9); // CE, CSN
const byte address[6] = "00001";

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.openWritingPipe(address);  //////
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
  radio.setDataRate(RF24_250KBPS);
  pinMode(A0, OUTPUT);
}
void loop()  {  

if (millis() - last > 100UL) {
      radio.stopListening();
   data += 1;
      radio.write(&data, sizeof(data));
      last = millis();
      d = 0;
  }
  if  (d == 0) {
    radio.startListening();
    d = 1;
  }
}

 

Edytowano przez farmaceuta
Link to post
Share on other sites
7 minut temu, farmaceuta napisał:

No wlasnie Arduino

A to nie - myślałem że może już się ESP32 zacząłeś bawić.

  • Lubię! 1
Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

1 minutę temu, ethanak napisał:

A to nie - myślałem że może już się ESP32 zacząłeś bawić.

Cos sie zaczalem😉 ale powolutku...a pro mini mam kilka sztuk z dawnych czasow i warto wykorzystac, tym bardziej ze z Esp dopiero zaczynam..

Link to post
Share on other sites

Ale ze mnie ciemna masa...jakby Forbot przyznawal tytul idioty miesiaca...to styczen bylby moj😁 uzylem kawalka exampla do lcd i nie zwrocilem uwagi ze tam na serialu wyswietla sie wysokosc w pikselach...🙄 I to wlasnie byly te moje "smieci"...wszystko ladnie chodzi, jedynie podczas przeladowania lcd jest malytka pauza, ale nie ma wplywu na dzialanie...ech.......

Link to post
Share on other sites

Panowie zna ktos dobra biblioteke do obslugu TFT st7735? Uzywam tej Arduinowej wbudowanej, ale jak sie okazalo ze nie ma tam zwyklych print/ln tylko text i trzeba konwertowac na char'y kazda zmienna i przed wyswietleniem jeszcze czyscic obszar tej zmiennej to juz mam drgawki...a do tego z float jest problem (juz chyba wiem jaki)...moze jest cos bardziej domyslnego? Teraz jeszcze mam czas bo nie rozpisalem sie za bardzo, a chcialbym wyprobowac co z nrf bedzie dzialalo...

Link to post
Share on other sites

Zrób sobie funkcje pomocnicze które będą przyjmowały "twoje" typy danych i wolały te funkcje które używa biblioteka arduinowa

  • Pomogłeś! 1
Link to post
Share on other sites

A jaki problem dopisać sobie dwie linijki do printfa czy stream (czego tam wolisz uzywać)?

Co do floatów - kiedyś przy jakiejś okazji podawałem, co zrobić żeby *printf łykał floaty (jedna flaga do linkera).

  • Pomogłeś! 1
Link to post
Share on other sites
(edytowany)

printf jest już wykorzystany przez bibliotekę nrf. Można pobawić się fprintf.

Edytowano przez ethanak
  • Pomogłeś! 1
Link to post
Share on other sites

No więc skoro ten printf i tak jest już dołączony do projektu to nic ino korzystać z niego. 

  • Lubię! 1
Link to post
Share on other sites

I będziesz co chwila zmieniać stdout z uarta na tft? Dlatego wspomniałem o fprintf.

  • Lubię! 1
Link to post
Share on other sites
38 minut temu, _LM_ napisał:

Zrób sobie funkcje pomocnicze które będą przyjmowały "twoje" typy danych

No juz cos takiego mam...nic nadzwyczajnego...dwie linijki i gotowe, ale wkurza mnie np. takie cos..

funkcja(dane);    //moj bajt
tft.text(tab, 1, 10);


void funkcja(byte b)
  String s = (String)b;
  s.tocharArray(tab, 4); //czy jakos tak

 

37 minut temu, ethanak napisał:

Co do floatów

to brakowalo mi char'ow w tablicy...zalozylem ze float to 4 chary, a w rzeczywistosci to przeciez 6...zakladajac ze po przecinku dwie cyfry..

 

38 minut temu, ethanak napisał:

A jaki problem dopisać sobie dwie linijki do printfa

 

20 minut temu, _LM_ napisał:

Możesz też użyć funkcji printf 

Nie wiem troche o co chodzi z tym printf...i jak mial bym to wykorzystac z tft..gdzie wogole znajde ta wbudowana biblioteke TFT a Ardu?? Musze tam zajrzec..(tak dluzej byc nie moze..😡)

Link to post
Share on other sites

Przede wszystkim nie wrzucałbym takiej kobyły do obsługi prostego transmitera. Oraz dlatego zaproponowałem lżejszą bibliotekę do takich zastosowań, gdzie zależnie od potrzeb można podmienić wskaźnik na jedną funkcję wysyłającą jeden znak. 

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.