Arduino Polska Forum

Pełna wersja: Problem z projektem arduino (amator c++)
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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);

}