Arduino kezdő

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52

Re: Arduino kezdő

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

Köszi! Azt hiszem menni fog. Ha sikerül, akkor közzéteszem, másnak már ne kelljen szívnia!
Bagi
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino kezdő

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

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

/////////////////////////////////////////////////////////////////
// Created by Kevin Elsenberger                                //
// June 2, 2013                                                //
// elsenberger.k at gmail.com                                   //
/////////////////////////////////////////////////////////////////

//Needed to access the eeprom read write functions
#include <EEPROM.h> 

long number1 = 123456789;
long number2 = 987654321;

//This function will write a 4 byte (32bit) long to the eeprom at
//the specified address to address + 3.
void EEPROMWritelong(int address, long value)
      {
      //Decomposition from a long to 4 bytes by using bitshift.
      //One = Most significant -> Four = Least significant byte
      byte four = (value & 0xFF);
      byte three = ((value >> 8) & 0xFF);
      byte two = ((value >> 16) & 0xFF);
      byte one = ((value >> 24) & 0xFF);

      //Write the 4 bytes into the eeprom memory.
      EEPROM.write(address, four);
      EEPROM.write(address + 1, three);
      EEPROM.write(address + 2, two);
      EEPROM.write(address + 3, one);
      }

//This function will return a 4 byte (32bit) long from the eeprom
//at the specified address to address + 3.
long EEPROMReadlong(long address)
      {
      //Read the 4 bytes from the eeprom memory.
      long four = EEPROM.read(address);
      long three = EEPROM.read(address + 1);
      long two = EEPROM.read(address + 2);
      long one = EEPROM.read(address + 3);

      //Return the recomposed long by using bitshift.
      return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
      }

void setup()
      {
      Serial.begin(9600);
      }

void loop()
      {
      //Adding a delay in order to have the time to open the
      //Arduino serial monitor.
      delay(5000);

      //Starting at the first byte on the eeprom.
      long address=0;

      //Writing first long.
      EEPROMWritelong(address, number1);
      address+=4;
      //Writing second long.
      EEPROMWritelong(address, number2);
      address+=4;


      Serial.println("If numbers are equals, it's working !");
      Serial.print(number1);
      Serial.print(" and ");
      //Readind and sending first long.
      Serial.println(EEPROMReadlong(0));

      Serial.print(number2);
      Serial.print(" and ");
      //Readind and sending second long.
      Serial.println(EEPROMReadlong(4));
      }
 
Forrás: http://playground.arduino.cc/Code/EEPROMReadWriteLong
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Arduino kezdő

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

Lehetséges, hogy ezzel nagyon hamar haza vágja az AVR-ben levő EEPROM-ot?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino kezdő

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

Ez minta az írás-olvasásra.....
Nem ott kell hagyni folyamatos írásra :)
bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52

Re: Arduino kezdő

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

Nagyon köszönöm!
Rengeteg időt spóroltál meg nekem ezzel!
Bagi
bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52

Szövegek kezelése Arduino C-ben

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

Sziasztok!

Ismét elakadtam. A Ruzsinszky féle C/C++ Arduino platformon könyvet olvasgatom. Sajnos az objektumorientált programozásról írtakat csak részben értem, és talán ezért nem boldogulok. A feladatom az lenne, hogy egy számot karakter stringé alakítsak, és ennk a stringnek megállapítsam a hosszát és egyenként elővegyem belőle a számjegyeket karakteres formában.
A változó deklaráció még megy (példa):
sz=123;
String karakter String(sz);
Azonban a karakter string hosszának megállapítása már nem:
hossz=karakter.lenght();
Jelenleg az UnoArduSim programot használom fejlesztésre. Lehet, hogy az nem boldogul ezzel a sorral. Esetleg valamilyen más ötlete tapasztalata nincs valakinek, hogy hogyan tudnám megoldani a problémámat?

Köszönettel

Bagi
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino kezdő

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

És ha felbontod 10-es számrendszer szerint?
bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52

Re: Arduino kezdő

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

Sziasztok!
Meg van a megoldás! Kiderült, hogy a fiam C++-ben nem teljesen kezdő, és kapásból elmondta mi a baj. Egyrészt volt egy betű csere amit nem vettem, észre lenght >> length.
Ami ennél fontosabb, hogy a működést is kezdem megérteni. Azoknak akiknek szüksége lehet ilyesmire leírnám a tapasztalataimat. Ime egy futó kód:

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

String szam_string=String();
byte hossz=0;
char betu;

void setup() {
}

void loop()  {
	dblekerdez(millis());
}	

void dblekerdez(int szam)
{
	String string1=String(szam);
	szam_string=string1;
	hossz=string1.length();
	betu=string1.charAt(0);
}

A kód annyit csinál, hogy meghívja a dblekerdez függvényt, aminek a millis() értékét adja át. A függvényben létrejön a string1 nevű string típusú változó. Még a deklarációs részben definiáltam egy szam_string nevű, string típusú változót, mert a stringgé alakított számot globálisan szeretném használni a programban. Mivel szükségem van a string hosszára és egy egy pozicióban található betűre is, ezért deklaráltam a hossz és betu nevű változókat. Ezek értékét a dblekerdez függvényben adom meg (a betu változóba a 0. pozíció karakterét másolom, nyilván itt egy változó áll majd egy hasznos kódban), de lehetne a loop()-ban is, csak ekkor hossz=szam_string.length(); és betu=szam_stringcharAt(x); kódot kellene írni, hiszen itt már csak a szam_string változóm létezik. A kódot az UnoArduSim nevű szimulátorban futtatom, ahol látom a változók értékét, és a dolog működik. Nyilván ez a kód alapjában egy marhaság, csak demonstrációs szándékkal adtam át a millis() értékét. Arra viszont jó volt, hogy kiderüljön csak int számokat tud karakterré alakítani, azt is előjelesen, tehát amíg a millis() által visszadott long érték alsó két byte-ja ~32000 alatt van, addig kapunk egy pozitiv számot reprezentáló stringet, viszont ezen érték felett minusz előjellel kezdődő stringet kapunk. Ez egyébként még hasznos is lehet. Nekem azonban így is tökéletes a működés.
Ha jól értettem meg a dolog lényegét, akkor a dblekerdez függvényemben létrejön egy string1 nevű objektumom, majd a függvényből kilépve ez meg is szűnik. Nem tudom memóriában mi történik, de remélem teljesen felszabadul a string1 számára lefoglalt memória. Futtattam a kódot a szimulátorban pár percig, az több ezer függvényhívás, és nem fogyott el a memória. Kipróbálom hamarosan valós hardveren is.

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

Re: Arduino kezdő

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

Sajnos nekem valamiért nem tünik tökéletesnek ez a konvertálás rutin!
Meg hüjült 32762 után?
SorosMonitor:
32683
32690
32697
32704
32711
32718
32726
32733
32741
32748
32755
32762
4294934530 ????
4294934542
4294934554
4294934567
4294934580
4294934592
4294934604
4294934617
4294934629
4294934642
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Arduino kezdő

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

Talán igy már jó lessz:

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


String szam_string=String();
byte hossz=0;
char betu;

void setup() {
	 Serial.begin(9600);
}

void loop()  {
   dblekerdez(millis());
   Serial.println(szam_string);
}   

void dblekerdez(unsigned long szam)
{
   szam_string=String(szam);
   
   hossz=szam_string.length();
   betu=szam_string.charAt(0);
}

bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52

ATmega328 lábkiosztás és pin megfeleltetés

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

Sziasztok!
Éppen hardvert építek. Az Arduino UNO R3 kapcsolási rajzából ki tudom logikázni, hogy melyik programban hivatkozott kivezetés melyik lábnak felel meg a mikrovezérlőben. Pl. A0 bemenet a 28PDIP chip 23-as lába. A programban azonban 14-es pin-re hivatkozok. Létezik valamilyen dokumentáció arra, hogy melyik chip-ben melyik láb felel meg a hivatkozott ki/bemenetnek? Találok valahol ilyet?
Köszönettel
Bagi
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino kezdő

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

arduino.h állomány
Pighixxx oldalai/pdf/képei (látványos)
bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52

Re: Arduino kezdő

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

Köszönöm!
Nos ezek azok az apró infók, amik egy kezdőnek nagyon hiányoznak. Már legalább egy órát vacakoltam, hogy kitaláljam, mit hová kell kötözgetni!
Bagi
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino kezdő

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

Off: Ezért újul/bővül meg a 60+16 napos tanfolyam, a csomagok, a cikkek egy része.
Ezen visszajelzések azok, amik segítenek tudni, hogy miket kell berelakni.
Most amivel bővül:
- Wiring és az Arduino története
- Arduino oldalágak, Wiring-húgok,
- Fritzing-tervezés,
- Processing kapcsolat
- Arduino lábak, és pillantás a fekete dobozba (regiszterek, belső chipszerkezet, Arduino "boncolás"
- LCD trükkök, adatgyűjtés....

És persze a tanfolyam tervezett kétirányú folytatása is tartogat meglepetéseket :)
bagizoltan
Bitmanipulátor
Hozzászólások: 128
Csatlakozott: 2015. december 8. kedd, 19:52

Re: Arduino kezdő

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

Nagyon jó! Köszönjük!
Válasz küldése