• 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
Problem z projektem arduino (amator c++)
#1
Witam,

Robię projekt na uczelnie, który ma za zadanie zliczać urządzenia nadające odpowiednia ramkę danych. Co prawda jestem amatorem C i C++ ale jakoś udało mi się wszystko podłaczyć i oprogramować. Całość wydaje się działać prawidłowo tz. UNO odbiorca dostaje sygnał od UNO transmiterów zlicza te urządzenia i wyświetla ich ilość na ekranie LCD. Problem jest tylko z wypisywaniem nazw urządzeń. Przy wyświetlaniu na LCD zmiennej "devicesText", która powinna zawierać nazwy urządzeń pochodzące od zmiennej "data.text" pojawiaja się nazwa tylko jednego urządzenia np "TR1" dwa razy. Ekran LCD wyglada mniej więcej tak:

TR1:TR1
Devices: 2

a powinno:

TR1:TR2
Devices: 2

Kiedy odkomentuje kod:


Kod:
       /*lcd.setCursor(0,0);
       lcd.print("RECEIVING...");
       lcd.setCursor(0,1);
       lcd.print(data.id);
       lcd.print(":");
       lcd.print(data.text);*/


To na ekranie LCD wyświetla się na zmianę "1:TR1" lucz "2:TR2" czyli zmienna data.text dostaje właściwe dane.

Najprawdopodobniej jest to mój błąd wynikający z braku wiedzy na temat zmiennych Char, tablic itd. Próbowałem szukać informacji w internecie, czytać kursy itd ale nie znalazłem odp. Poniżej wrzucam kod odbiornika i nadajnika.

Odbiornik



Kod:
#include <LiquidCrystal.h>
#include <SPI.h>  
#include "RF24.h"
LiquidCrystal lcd(0,1,2,3,4,5);
RF24 myRadio (7, 8);

int devicesNumber = 0;
char* devicesText[8];
char devices[8] = {};
int devicesCounter = 0;
char scrap[8] = {0};
int scrapCounter = 0;

struct package
{
 int id = 0;
 char text[8] = "TRX";
};

typedef struct package Package;
Package data;

void readPackage(int _id, char* _text)
{
addToScrap();
addDevice(_id, data.text);
}

void addToScrap()
{
 if(scrapCounter < sizeof(scrap))
 {
   scrap[scrapCounter] = data.id;
   scrapCounter++;  
 }  
}

void addDevice(int _dev, char* _txt)
{
bool isDevice = true;
for(int i=0; i < sizeof(devices); i++)
{
  if(devices[i] == data.id)
  {
    isDevice = false;
  }
}
if(isDevice != false)
{
  int _d = devicesCounter;
  devices[_d] = _dev;
  devicesText[_d] = _txt;
  devicesCounter++;  
}
}

void countDevices()
{
 int _count = 0;
 for(int z = 0; z < sizeof(devices); z++)
 {
   if(devices[z] !=0)
   {
     _count++;
   }
 }
 devicesNumber = _count;
}

byte addresses[][9] = {"0001"};
void setup() {
 // put your setup code here, to run once:
 lcd.begin(16,2);
 lcd.clear();
 myRadio.begin();
 myRadio.setChannel(115);
 myRadio.setPALevel(RF24_PA_MAX);
 myRadio.setDataRate( RF24_250KBPS ) ;
 myRadio.openReadingPipe(1, addresses[0]);
 myRadio.startListening();

}

void loop() {
 if ( myRadio.available())
 {
   while (myRadio.available())
   {
     if(scrapCounter < 8)
     {
       // Correct code
       myRadio.read(&data, sizeof(data));
       readPackage(data.id, data.text);
       // For testing LCD output
       /*lcd.setCursor(0,0);
       lcd.print("RECEIVING...");
       lcd.setCursor(0,1);
       lcd.print(data.id);
       lcd.print(":");
       lcd.print(data.text);*/
       lcd.print(".");
     }else {
       lcd.clear();
       lcd.setCursor(0,0);
       // For testing LCD output
       /*for(int j = 0; j < sizeof(scrap); j++)
       {
         lcd.setCursor(j, 0);
         lcd.print((int)scrap[j]);          
       }
       lcd.setCursor(0,1);
       for(int x = 0; x < sizeof(devices); x++)
       {
         lcd.print((int)devices[x]);
       }
       lcd.print(":");
       lcd.print(devicesNumber);
       lcd.print(":");
       lcd.print(devicesCounter);*/
       // Correct code
       for(int s = 0; s < devicesNumber; s++)
       {
         lcd.print(devicesText[s]);
         lcd.print(":");
       }
       lcd.setCursor(0,1);
       countDevices();
       lcd.print("Devices: ");
       lcd.print(devicesNumber);
       delay(10000);
       scrapCounter = 0;
       devicesCounter = 0;
       memset(devices, 0, sizeof(devices));
       memset(devicesText, 0, sizeof(devicesText));
       lcd.clear();
     }
   }
 }

}

Nadajnik:

Kod:
#include <SPI.h>  
#include "RF24.h"

RF24 myRadio (7, 8);
byte addresses[][9] = {"0001"};

struct package
{
 int id = 2;
 char text[100] = "TR2";
};


typedef struct package Package;
Package data;


void setup()
{
 Serial.begin(115200);
 delay(1000);
 myRadio.begin();  
 myRadio.setChannel(115);
 myRadio.setPALevel(RF24_PA_MAX);
 myRadio.setDataRate( RF24_250KBPS ) ;
 myRadio.openWritingPipe( addresses[0]);
}

void loop()
{
 myRadio.write(&data, sizeof(data));

 Serial.print("\nPackage:");
 Serial.print(data.id);
 Serial.print("\n");
 Serial.println(data.text);
 delay(2000);

}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości