ino h cpp osztályok közti kapcsolat probléma

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
sokimm
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2016. július 29. péntek, 12:10

ino h cpp osztályok közti kapcsolat probléma

Hozzászólás Szerző: sokimm »

A név nem pontos, de velős.
A problémám az, hogy szeretnék egy 7 szegmenses "kijelzőt" meghajtani, de saját include (tanulási szándékkal) file létrehozásával, és nem egybe ömleszteni a loop részt.

A neten turkálva összehoztam ennyit, de az ino file loop-jában a 13. sor (sevensegment.kiir(byte szam);) ezt a hibát dobja:
expected unqualified-id before '.' token

Mit rontok el? Bármilyen útbaigazítást előre is köszönök! :))

Jöjjön hát az egész tákolmány:
sevensegment.ino-file:

Kód: Egész kijelölése

#include "sevensegment.h" 
void setup()
{ 
  sevensegment kijelzo(7, 9, 11, 8, 10, 6, 12, 13);
}
void loop()
{
  sevensegment.kiir(byte szam);  //  expected unqualified-id before '.' token
}
sevensegment.h file:

Kód: Egész kijelölése

#ifndef sevensegment_h  
#define sevensegment_h  
#include <Arduino.h> 

class sevensegment
{
  private:
  
  public:
    //byte f, k, a, bf, ba, jf, ja, p; 
    sevensegment(byte f, byte k, byte a, byte bf, byte ba, byte jf, byte ja, byte p);
    void kiir(byte szam); 
    
};
#endif
sevensegment.cpp-file:

Kód: Egész kijelölése

#include "Arduino.h"
#include "sevensegment.h"
#include "pins_arduino.h"

sevensegment::sevensegment(byte f, byte k, byte a, byte bf, byte ba, byte jf, byte ja, byte p)
{
  pinMode(f, OUTPUT);
  pinMode(k, OUTPUT);
  pinMode(a, OUTPUT);
  pinMode(bf, OUTPUT);
  pinMode(ba, OUTPUT);
  pinMode(jf, OUTPUT);
  pinMode(ja, OUTPUT);
  pinMode(p, OUTPUT);  
}

void sevensegment::kiir(byte szam)
{
  switch (szam) {
    case 0:
      Serial.println("anyad");
      break;
    
    default:
     
      break;
  }
}
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: ino h cpp osztályok közti kapcsolat probléma

Hozzászólás Szerző: Robert »

Tipp az INO fileban mintha a sevensegment osztály/hivatkozás nem lenne kiosztva...
sokimm
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2016. július 29. péntek, 12:10

Re: ino h cpp osztályok közti kapcsolat probléma

Hozzászólás Szerző: sokimm »

passzolom. :\ Már kiosztottam (elküldtem melegebb éghajlatra), de programozási szinten nem tudom mit jelent, hogy ki kellene osztani valahogy. :P
Kinek, hova, hogyan, miért kéne kiosztani? :)

szerk:
Olyan, mintha nem látna át a másik file-ba, vagy nem jól hivatkoznék át. Ha ezt a hivatkozó sort kitörlöm, akkor hiba nélkül tudna fordítani, de így megakad az ellenőrzés.

Akárhány másik forráskódot nézek neten, szintaktikailag helyesnek tűnik, szóval szerintem valamit a logikával rontok el.
sokimm
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2016. július 29. péntek, 12:10

Re: ino h cpp osztályok közti kapcsolat probléma

Hozzászólás Szerző: sokimm »

Módosítottam a kódot a következőre, és félig meddig működik, de az include rész olyan féllábú...
A kérdésem a következő lenne: Mért csak a sevensegment példányosítása után (sevensegment kijelzo) tudok, a kijelzo-n át, meghívni a kiir parancsot (kijelzo.kiir)?

Mért a void sevensegment::kiir(int szam)-ba kell deklarálni az input-output lábakat? (minden egyes meghíváskor megcsinálja, pedig elég lenne az elején (setup) egyszer megcsinálni. :\

Mit rontok el? Köszönöm a segítséget eddig is! :)

INO:

Kód: Egész kijelölése

#include "sevensegment.h" 
void setup()
{
  Serial.begin(9600);  
}

void loop()
{
  delay(1000);
  sevensegment kijelzo(7, 9, 11, 8, 10, 6, 12, 13);
  //Serial.println("1-9");
  //int a;
  //a = Serial.read();

  kijelzo.kiir(Serial.read());
  //Serial.println(a);
}
CPP:

Kód: Egész kijelölése

#include "Arduino.h"
#include "sevensegment.h"
#include "pins_arduino.h"

int f=7; int k=9; int a=11; int bf=8; int ba=10; int jf=6; int ja=12; int p=13;

sevensegment::sevensegment(int f, int k, int a, int bf, int ba, int jf, int ja, int p)
{
}

void sevensegment::kiir(int szam)
{

  pinMode(f, OUTPUT);
  pinMode(k, OUTPUT);
  pinMode(a, OUTPUT);
  pinMode(bf, OUTPUT);
  pinMode(ba, OUTPUT);
  pinMode(jf, OUTPUT);
  pinMode(ja, OUTPUT);
  pinMode(p, OUTPUT);

  switch (szam) {
    case 48:
      digitalWrite(jf, LOW); //0
      digitalWrite(ja, LOW);
      digitalWrite(f, LOW);
      digitalWrite(bf, LOW);
      digitalWrite(k, HIGH);
      digitalWrite(a, LOW);
      digitalWrite(ba, LOW);
      break;
    case 49:
      digitalWrite(jf, LOW); // 1
      digitalWrite(ja, LOW);
      digitalWrite(f, HIGH);
      digitalWrite(bf, HIGH);
      digitalWrite(k, HIGH);
      digitalWrite(a, HIGH);
      digitalWrite(ba, HIGH);
      break;
    case 50:
      digitalWrite(jf, LOW); // 2
      digitalWrite(ja, HIGH);
      digitalWrite(f, LOW);
      digitalWrite(bf, HIGH);
      digitalWrite(k, LOW);
      digitalWrite(a, LOW);
      digitalWrite(ba, LOW);
      break;
    case 51:
      digitalWrite(jf, LOW); // 3
      digitalWrite(ja, LOW);
      digitalWrite(f, LOW);
      digitalWrite(bf, HIGH);
      digitalWrite(k, LOW);
      digitalWrite(a, LOW);
      digitalWrite(ba, HIGH);
      break;
    case 52:
      digitalWrite(jf, LOW); // 4
      digitalWrite(ja, LOW);
      digitalWrite(f, HIGH);
      digitalWrite(bf, LOW);
      digitalWrite(k, LOW);
      digitalWrite(a, HIGH);
      digitalWrite(ba, HIGH);
      break;
    case 53:
      digitalWrite(jf, HIGH); // 5
      digitalWrite(ja, LOW);
      digitalWrite(f, LOW);
      digitalWrite(bf, LOW);
      digitalWrite(k, LOW);
      digitalWrite(a, LOW);
      digitalWrite(ba, HIGH);
      break;
    case 54:
      digitalWrite(jf, HIGH); //6
      digitalWrite(ja, LOW);
      digitalWrite(f, LOW);
      digitalWrite(bf, LOW);
      digitalWrite(k, LOW);
      digitalWrite(a, LOW);
      digitalWrite(ba, LOW);
      break;
    case 55:
      digitalWrite(jf, LOW); //7
      digitalWrite(ja, LOW);
      digitalWrite(f, LOW);
      digitalWrite(bf, HIGH);
      digitalWrite(k, HIGH);
      digitalWrite(a, HIGH);
      digitalWrite(ba, HIGH);
      delay(500);
      break;
    case 56:
      digitalWrite(jf, LOW); // 8
      digitalWrite(ja, LOW);
      digitalWrite(f, LOW);
      digitalWrite(bf, LOW);
      digitalWrite(k, LOW);
      digitalWrite(a, LOW);
      digitalWrite(ba, LOW);
      delay(500);
      break;
    case 57:
      digitalWrite(jf, LOW); // 9
      digitalWrite(ja, LOW);
      digitalWrite(f, LOW);
      digitalWrite(bf, LOW);
      digitalWrite(k, LOW);
      digitalWrite(a, LOW);
      digitalWrite(ba, HIGH);
      delay(500);
      break;

    default:
      //Serial.println("default");
      break;
  }
}
h:

Kód: Egész kijelölése

#ifndef sevensegment_h  
#define sevensegment_h  
#include "Arduino.h"

class sevensegment
{
  private:
  
  public:
    sevensegment(int f, int k, int a, int bf, int ba, int jf, int ja, int p);
    void kiir(int szam); 
    
};
#endif
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: ino h cpp osztályok közti kapcsolat probléma

Hozzászólás Szerző: kapu48 »

Ha igy próbálnád:

Kód: Egész kijelölése

#include "sevensegment.h" 

// Létre hozod az Osztály 1 példányét
sevensegment kijelzo;

void setup()
{
  Serial.begin(9600);  
	kijelzo(7, 9, 11, 8, 10, 6, 12, 13);
	
}

void loop()
{
  delay(1000);

  //Serial.println("1-9");
  //int a;
  //a = Serial.read();

  kijelzo.kiir(Serial.read());
  //Serial.println(a);
}
:?:
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: ino h cpp osztályok közti kapcsolat probléma

Hozzászólás Szerző: kapu48 »

sokimm
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2016. július 29. péntek, 12:10

Re: ino h cpp osztályok közti kapcsolat probléma

Hozzászólás Szerző: sokimm »

Kapu48 linkje alapján a következő módosításokkal lefut (csak nem tudom konzolról beolvasni a számot... valamit rosszul hivatkozok? :\)

sevensegment.ino:

Kód: Egész kijelölése

#include "sevensegment.h" 

sevensegment kijelzo(7, 9, 11, 8, 10, 6, 12, 13);

void setup()
{
  Serial.begin(9600);  
  Serial.println("csak 1-9 kozotti erteket adj meg!");
}

void loop()
{    
  kijelzo.kiir(Serial.read());
  delay(500);
}
sevensegment.h:

Kód: Egész kijelölése

#ifndef sevensegment_h
#define sevensegment_h
#include <Arduino.h>

class sevensegment
{
  private:
    byte _f; byte _k; byte _a; byte _bf; byte _ba; byte _jf; byte _ja; byte _p;
  public:
    byte szam;
    sevensegment(byte f, byte k, byte a, byte bf, byte ba, byte jf, byte ja, byte p);
    void kiir(byte szam);
};
#endif
sevensegment.cpp:

Kód: Egész kijelölése

#include "Arduino.h"
#include "sevensegment.h"
#include "pins_arduino.h"

sevensegment::sevensegment(byte f, byte k, byte a, byte bf, byte ba, byte jf, byte ja, byte p)
{
  pinMode(f, OUTPUT);
  _f = f;
  pinMode(k, OUTPUT);
  _k = k;
  pinMode(a, OUTPUT);
  _a = a;
  pinMode(bf, OUTPUT);
  _bf = bf;
  pinMode(ba, OUTPUT);
  _ba = ba;
  pinMode(jf, OUTPUT);
  _jf = jf;
  pinMode(ja, OUTPUT);
  _ja = ja;
  pinMode(p, OUTPUT);
  _p = p;
}

void sevensegment::kiir(byte szam)//
{
  //byte szam = Serial.read();
  switch (szam) {
    case 0:
      Serial.println("nulla");
      break;
    case 1:
      digitalWrite(_jf, LOW);// 1
      digitalWrite(_ja, LOW);
      digitalWrite(_f, HIGH);
      digitalWrite(_bf, HIGH);
      digitalWrite(_k, HIGH);
      digitalWrite(_a, HIGH);
      digitalWrite(_ba, HIGH);
      break;
    case 2:
      digitalWrite(_jf, LOW);// 2
      digitalWrite(_ja, HIGH);
      digitalWrite(_f, LOW);
      digitalWrite(_bf, HIGH);
      digitalWrite(_k, LOW);
      digitalWrite(_a, LOW);
      digitalWrite(_ba, LOW);
      break;
    case 3:
      digitalWrite(_jf, LOW);// 3
      digitalWrite(_ja, LOW);
      digitalWrite(_f, LOW);
      digitalWrite(_bf, HIGH);
      digitalWrite(_k, LOW);
      digitalWrite(_a, LOW);
      digitalWrite(_ba, HIGH);
      break;
    case 4:
      digitalWrite(_jf, LOW);// 4
      digitalWrite(_ja, LOW);
      digitalWrite(_f, HIGH);
      digitalWrite(_bf, LOW);
      digitalWrite(_k, LOW);
      digitalWrite(_a, HIGH);
      digitalWrite(_ba, HIGH);
      break;
    case 5:
      digitalWrite(_jf, HIGH);// 5
      digitalWrite(_ja, LOW);
      digitalWrite(_f, LOW);
      digitalWrite(_bf, LOW);
      digitalWrite(_k, LOW);
      digitalWrite(_a, LOW);
      digitalWrite(_ba, HIGH);
      break;
    case 6:
      digitalWrite(_jf, HIGH);// 6
      digitalWrite(_ja, LOW);
      digitalWrite(_f, LOW);
      digitalWrite(_bf, LOW);
      digitalWrite(_k, LOW);
      digitalWrite(_a, LOW);
      digitalWrite(_ba, LOW);
      break;
    case 7:
      digitalWrite(_jf, LOW);//7
      digitalWrite(_ja, LOW);
      digitalWrite(_f, LOW);
      digitalWrite(_bf, HIGH);
      digitalWrite(_k, HIGH);
      digitalWrite(_a, HIGH);
      digitalWrite(_ba, HIGH);
      break;
    case 8:
      digitalWrite(_jf, LOW);// 8
      digitalWrite(_ja, LOW);
      digitalWrite(_f, LOW);
      digitalWrite(_bf, LOW);
      digitalWrite(_k, LOW);
      digitalWrite(_a, LOW);
      digitalWrite(_ba, LOW);
      break;
    case 9:
      digitalWrite(_jf, LOW);// 9
      digitalWrite(_ja, LOW);
      digitalWrite(_f, LOW);
      digitalWrite(_bf, LOW);
      digitalWrite(_k, LOW);
      digitalWrite(_a, LOW);
      digitalWrite(_ba, HIGH);
      break;

    default:

      break;
  }
}
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: ino h cpp osztályok közti kapcsolat probléma

Hozzászólás Szerző: kapu48 »

Válasz küldése