Tudsz-e Arduinoban programozni (mit ír ki)?

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Tudsz-e Arduinoban programozni (mit ír ki)?

HozzászólásSzerző: csabeszq » 2017. január 14. szombat, 22:54

Arduino 1.6.13-mal próbáltam (nano), szépen le is fordult, korábbi verziókkal ne próbáljátok.
A teszt után mindenki maga eldöntheti, hogy mennyire is tud C++ -ban programozni:

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

enum class Allapot { ELOSZOR, MASODSZOR, HARMADSZOR };

template <typename T> void kiiro(T&& a, bool && ujsor = false)
{
  if( ujsor )
    Serial.println(a);
  else
    Serial.print(a);
}

template <typename T> auto szamolo(T && a, T && b) -> decltype(a + b)
{
  return a+b;
}

auto setup() -> void {
  Serial.begin(115200);
}

auto allapot = Allapot::ELOSZOR;

[[deprecated("Ird at jobbra")]]
auto dekodolo = [] (char i) {
  if( --i == '@' )
    return 'Z';
  return i;
};

auto loop() -> void {
  switch(allapot)
  {
    case Allapot::ELOSZOR:
      {
        char puffer[] = {'I', 'F', 'M', 'M', 'P', '\x0B'};
        for( auto & c : puffer )
          kiiro(dekodolo(c));
      }
      allapot = Allapot::MASODSZOR;
      break;
    case Allapot::MASODSZOR:
      {
        kiiro( szamolo(12,13), true );
        kiiro( szamolo(12.2,13.1), true );
      }
      allapot = Allapot::HARMADSZOR;
      break;
    case Allapot::HARMADSZOR:
      auto a = 12;
      decltype (a) b = a + 5;
      kiiro(b, true);
      allapot = Allapot::ELOSZOR;
      break;
  }
  delay(250);
}

Avatar
SzLacus
Tranzisztorgyógyász
Hozzászólások: 175
Csatlakozott: 2012. május 20. vasárnap, 6:00
Tartózkodási hely: Budapest

Re: Tudsz-e Arduinoban programozni (mit ír ki)?

HozzászólásSzerző: SzLacus » 2017. január 15. vasárnap, 20:30

Mindíg tudtam, hogy a kulcslyukon keresztül lesegetem az arduino világát, de hogy nem is kulcslyuk, csak egy gombostűnyi folytonossági hiány, arra most jöttem rá. :-(
Már csak azért is, mert a "kulcslyuk sebészet" az létező dolog, de gombostű sebészetről még nem hallottam. :-)
De a tudás vágy az dolgozik bennem, ezért uppoltam 1.6.11-ről 13-ra, hogy kipróbáljam mi is fog történni.
A kódot nézegetve a nagybetűk megjelenésére számítok, és az "Ird at jobbra" szövegnek is lesz szerepe, de ez csak pár morzsa. Ez sem tudás, inkább csak sejtés. Még az sem derült ki számomra, hogy hova másoljam a kódot, így egy üres template setup-jába raktam.

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

void setup() {
enum class Allapot { ELOSZOR, MASODSZOR, HARMADSZOR };

template <typename T> void kiiro(T&& a, bool && ujsor = false)
{
  if( ujsor )
    Serial.println(a);
  else
    Serial.print(a);
}

template <typename T> auto szamolo(T && a, T && b) -> decltype(a + b)
{
  return a+b;
}

auto setup() -> void {
  Serial.begin(115200);
}

auto allapot = Allapot::ELOSZOR;

[[deprecated("Ird at jobbra")]]
auto dekodolo = [] (char i) {
  if( --i == '@' )
    return 'Z';
  return i;
};

auto loop() -> void {
  switch(allapot)
  {
    case Allapot::ELOSZOR:
      {
        char puffer[] = {'I', 'F', 'M', 'M', 'P', '\x0B'};
        for( auto & c : puffer )
          kiiro(dekodolo(c));
      }
      allapot = Allapot::MASODSZOR;
      break;
    case Allapot::MASODSZOR:
      {
        kiiro( szamolo(12,13), true );
        kiiro( szamolo(12.2,13.1), true );
      }
      allapot = Allapot::HARMADSZOR;
      break;
    case Allapot::HARMADSZOR:
      auto a = 12;
      decltype (a) b = a + 5;
      kiiro(b, true);
      allapot = Allapot::ELOSZOR;
      break;
  }
  delay(250);
}

}

void loop() {
  // put your main code here, to run repeatedly:

}


Viszont nálam nem fordul le, hibát dob, az alábbiak szerint.

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

Vázlat fordítása...
"C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10613 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR   "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs" "C:\Users\Laci\AppData\Local\Temp\arduino_build_30852\sketch\Csabeszq.ino.cpp" -o "C:\Users\Laci\AppData\Local\Temp\arduino_build_30852\sketch\Csabeszq.ino.cpp.o"
C:\Users\Laci\Documents\Arduino\Csabeszq\Csabeszq.ino: In function 'void setup()':

Csabeszq:4: error: a template declaration cannot appear at block scope

 template <typename T> void kiiro(T&& a, bool && ujsor = false)

 ^

Csabeszq:17: error: a function-definition is not allowed here before '{' token

 auto setup() -> void {

                      ^

Csabeszq:30: error: a function-definition is not allowed here before '{' token

 auto loop() -> void {

                     ^

Csabeszq:63: error: expected '}' at end of input

 }

 ^

exit status 1
a template declaration cannot appear at block scope


Avatar
SzLacus
Tranzisztorgyógyász
Hozzászólások: 175
Csatlakozott: 2012. május 20. vasárnap, 6:00
Tartózkodási hely: Budapest

Re: Tudsz-e Arduinoban programozni (mit ír ki)?

HozzászólásSzerző: SzLacus » 2017. január 15. vasárnap, 20:31

Ja és win8.1 64, nano a com10-en.

Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Tudsz-e Arduinoban programozni (mit ír ki)?

HozzászólásSzerző: csabeszq » 2017. január 15. vasárnap, 23:58

Poénnak szántam, de új témát nyitok a kérdéskörben: a C++11 szabvány.

Avatar
SzLacus
Tranzisztorgyógyász
Hozzászólások: 175
Csatlakozott: 2012. május 20. vasárnap, 6:00
Tartózkodási hely: Budapest

Re: Tudsz-e Arduinoban programozni (mit ír ki)?

HozzászólásSzerző: SzLacus » 2017. január 16. hétfő, 10:30

Sikeres volt, jót nevettem magamon. Eszembe jutott egy nagyon régi rádiotechnika cikk, amiben a yagi antennák méretének csökkentését írják le, mégpedig úgy, hogy a környzet dielektromos állandójának megfelelő arányban lehet csökkenteni az antenna méretét. Ha vízbe teszem az antennát (alkalmas méretű befőttes üveg), akkor a víz dielektromos állandójának megfelelő arányban kell csökkenteni a méretet.
Ott annyi könnyítés volt, hogy ez egy áprilisi rádiótechnikában jelent meg, erről felismerhető volt a turpisság. Én meg a fizika tanulás általános iskolai szakaszánál tartottam. :-)

ksanci
DrótVégénSzéndarab
Hozzászólások: 28
Csatlakozott: 2016. július 24. vasárnap, 12:04

Re: Tudsz-e Arduinoban programozni (mit ír ki)?

HozzászólásSzerző: ksanci » 2017. január 22. vasárnap, 11:08

Nem ér, előbb olvastam a c++11 topikot, mint ezt, így lefordult gond nélkül :)
Jópofa újítások, de én még a régihez sem értek igazán, anélkül csak összezavar :)


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég