Switch to full style
C, C++, Java, PHP, Ruby...

Pravila foruma

U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Odgovori

Re: Arduino/Croduino set za početnike

22 lis 2016, 12:52

pridružujem se veseloj družini.

nisam amater, atmel AVR32 porodica procesora mi je u 'opisu posla'. svejedno se tek sada prvi put srećem s arduino projektom , ne znam ni sam zašto , nekako sam ga smatrao neozbiljnim. prije mjesec dana sam kupio arduino uno ploču i spržio je od prve - na poslu imam kolegu koji radi s lemilicom, tako da nije ni čudo da sam odma zeznuo prvu ploču. dao mi bog dvije desne ruke, a ja sam lijevak.

sad imam novu ploču i uspio sam sklepati 'satni mehanizam' za pogon polarne osi teleskopa. uskoro se nadam da će biti i nešto za pokazati - nadam se lijepim fotografijama.

usput da pojasnim zašto sam spržio uno, motor shield koji prodaju za 70 kn ne vrijedi niti 70 lipa, evo ovdje preporuka za step motor interfejs , na ebay, kineska roba, cijena 8 dolara ( besplatna dostava )

http://www.ebay.com/itm/CNC-Router-Single-1-Axis-Controller-Stepper-Motor-Drivers-TB6560-3A-Driver-Board-/351708576955?hash=item51e376fcbb

Re: Arduino/Croduino set za početnike

18 stu 2016, 23:31

kratka zabilješka, ne tiče se toliko arduino ploče, koliko se tiče mog projekta - rotacije polarne osi. postaviti točno polarnu os je puno teže nego sam mislio. koliko god se trudio, zvijezde uporno ostavljaju repove već pri 'malim' vremenima, recimo 10 minuta. uh uh moram smislit neki plan, jer metoda pokušaja-pogreške ne daje rezultate

Re: Arduino/Croduino set za početnike

20 ožu 2017, 07:20

kolega compwar se puno više igra s arduino nego ja. sada je otkrio portal Thing-Speak na kojem možeš postaviti kućnu 'telemetriju' , arduino mjeri temperaturu vode u solarnom bojleru i preko wifi modula ESP8226 šalje podatke na server

evo link na njegov kanal na portalu ThingSpeak

treba reći i to - upotreba kanala na portalu je besplatna !

DODATAK:

sad sam se dosjetio posla, kad završim svoj PUSH server koji šalje notifikacije na android / ios uređaje možemo pokrenuti svoj portal za Internet-Stvari koji će imati i dojavu na mobitel ! ajde dobro, razlog više da napravim PUSH server

Re: Arduino/Croduino set za početnike

20 ožu 2017, 17:55

Pogledaj si i adafruitio:
https://io.adafruit.com/
https://www.youtube.com/watch?v=jTy2lBjhJds
https://youtu.be/J61IL_6QXZM?t=2m55s

Re: Arduino/Croduino set za početnike

21 pro 2017, 19:04

Samo sam htio podjeliti jedan moj uradak ovdje,
Ovaj komadić uzima bilo kakav tekst koji se unese kroz serijski port i odblica ga u morseovom kodu na ugrađenoj LEDici.
Ovo sam napisao da naučim razliku između stringa i chara, ali možda dobro dođe nekom kao primjer ili nešto, potrudio sam se dobro komenirat sve

Kod:
//Dužina kratkog blicaja u milisekundama
int srt = 200;
//Dužina dugog blicaja u mili sekundama(3 puta duže od kratkog)
int lng = srt * 3;

//Dužina pauze između slova u milisekundama
int ps = 300;


void blic(int one, int two, int three, int four){
//blic je funkcija koji odlučuje dužinu blicaja za svako slovo;
//broj "0" znači da nema blicaja
//broj "1" znači kratak blicaj
//broj "2" znači dugi blicaj
//Na primjer u morseovom kodu slovo "A" je jedan kratki i jedan dugi signal/blicaj (.-)
//Prema ovoj logici slovo "A" izgleda ovako;
// "blic(1, 2 ,0 ,0);"
//

  Serial.print("(");
  if (one == 1){
    Serial.print(".");
    digitalWrite(13 , 1);
    delay(srt);
    digitalWrite(13 , 0);
    delay(ps);
  }
  else{digitalWrite(13 , 0);}

  if(one == 2){
    Serial.print("-");
    digitalWrite(13 , 1);
    delay(lng);
    digitalWrite(13 , 0);
    delay(ps);
  }
  else{digitalWrite(13 , 0);}

  if (two == 1){
    Serial.print(".");
    digitalWrite(13 , 1);
    delay(srt);
    digitalWrite(13 , 0);
    delay(ps);   
  }
  else{digitalWrite(13 , 0);}

  if(two == 2){
    Serial.print("-");
    digitalWrite(13 , 1);
    delay(lng);
    digitalWrite(13 , 0);
    delay(ps);
  }
  else{digitalWrite(13 , 0);}

  if (three == 1){
    Serial.print(".");
    digitalWrite(13 , 1);
    delay(srt);
    digitalWrite(13 , 0);
    delay(ps);
  }
  else{digitalWrite(13 , 0);}

  if(three == 2){
    Serial.print("-");
    digitalWrite(13 , 1);
    delay(lng);
    digitalWrite(13 , 0);
    delay(ps);
  }
  else{digitalWrite(13 , 0);}

  if (four == 1){
    Serial.print(".");
    digitalWrite(13 , 1);
    delay(srt);
    digitalWrite(13 , 0);
    delay(ps); 
  }
  else{digitalWrite(13 , 0);}

  if(four == 2){
    Serial.print("-");
    digitalWrite(13 , 1);
    delay(lng);
    digitalWrite(13 , 0);
    delay(ps);
  }
  else{digitalWrite(13 , 0);}
  Serial.print(")");
  Serial.print(" ");
}



void morse(char letter) {

  //Definiramo slova u morseovom kodu za korištenje sa "blic" funkcijom od gore
  //
  Serial.print(letter);
  if (letter == 'A' || letter == 'a'){blic( 1, 2 ,0 ,0 );} else {}
  if (letter == 'B' || letter == 'b'){blic( 2, 1 ,1 ,1 );} else {}
  if (letter == 'C' || letter == 'c'){blic( 1, 2 ,1 ,2 );} else {}
  if (letter == 'D' || letter == 'd'){blic( 2, 1 ,1 ,0 );} else {}
  if (letter == 'E' || letter == 'e'){blic( 1, 0 ,0 ,0 );} else {}
  if (letter == 'F' || letter == 'f'){blic( 1, 1 ,2 ,1 );} else {}
  if (letter == 'G' || letter == 'g'){blic( 2, 2 ,1 ,0 );} else {}
  if (letter == 'H' || letter == 'h'){blic( 1, 1 ,1 ,1 );} else {}
  if (letter == 'I' || letter == 'i'){blic( 1, 1 ,0 ,0 );} else {}
  if (letter == 'J' || letter == 'j'){blic( 1, 2 ,2 ,2 );} else {}
  if (letter == 'K' || letter == 'k'){blic( 2, 1 ,2 ,0 );} else {}
  if (letter == 'L' || letter == 'l'){blic( 1, 2 ,1 ,1 );} else {}
  if (letter == 'M' || letter == 'm'){blic( 2, 2 ,0 ,0 );} else {}
  if (letter == 'N' || letter == 'n'){blic( 2, 1 ,0 ,0 );} else {}
  if (letter == 'O' || letter == 'o'){blic( 2, 2 ,2 ,0 );} else {}
  if (letter == 'P' || letter == 'p'){blic( 1, 2 ,2 ,1 );} else {}
  if (letter == 'R' || letter == 'r'){blic( 1, 2 ,1 ,0 );} else {}
  if (letter == 'S' || letter == 's'){blic( 1, 1 ,1 ,0 );} else {}
  if (letter == 'T' || letter == 't'){blic( 2, 0 ,0 ,0 );} else {}
  if (letter == 'U' || letter == 'u'){blic( 1, 1 ,2 ,0 );} else {}
  if (letter == 'V' || letter == 'v'){blic( 1, 1 ,1 ,2 );} else {}
  if (letter == 'W' || letter == 'w'){blic( 1, 2 ,2 ,0 );} else {}
  if (letter == 'X' || letter == 'x'){blic( 2, 1 ,1 ,2 );} else {}
  if (letter == 'Y' || letter == 'y'){blic( 2, 1 ,2 ,2 );} else {}
  if (letter == 'Z' || letter == 'z'){blic( 2, 2 ,1 ,1 );} else {}
  //Ovo je razmak pa samo pauziramo
  if (letter == ' ' || letter == ' '){delay(srt * 7); Serial.print(" ");} else {}

}
void setup() {

  //Startamo serijski port i pišemo poruku
  Serial.begin(9600);
  Serial.println("---------------------------------");
  Serial.println("| Welcome to morse code sender  |");
  Serial.println("| Please insert your message    |");
  Serial.println("----------------------------------------------------------------");
}

void loop() {

  //Čekamo da se unese poruka kroz serijski port;
  while (Serial.available() > 0){

    //Čitamo string(poruku);
    String inpt = Serial.readStringUntil('\n');
   
    //Printamo poruku
    Serial.print("Recived: ");
    Serial.println(inpt);
    Serial.print("Morse: ");

   
    //Definiramo spremnik za string;
    char procinpt[50];
   
    //Pretvaramo string u char kako bi mogli izvući svako slovo posebno
    inpt.toCharArray(procinpt, 50 );
   
    //Računam duljinu stringa
    int lnght = strlen(procinpt);

    //Provuci svako slovo is chara posebno kroz morse code
    for ( int i = 0 ; i < lnght; i++ ){

      //Printamo trenutno slovo
      //Daj slovo morse funkciji koja će to slovo prosljedit blic funkciji
      morse(procinpt[i]);

    }
    Serial.println();
    Serial.println("----------------------------------------------------------------");

  }


  delay(100);
}



slika

Re: Arduino/Croduino set za početnike

23 pro 2017, 08:35

Tomislav001 je napisao/la:Samo sam htio podjeliti jedan moj uradak ovdje,
Ovaj komadić uzima bilo kakav tekst koji se unese kroz serijski port i odblica ga u morseovom kodu na ugrađenoj LEDici.


Ja nisam programer ali osobno mi je izuzetno drago da na forumu postoji nekoliko ljudi koji vole programiranje a ti si rijetka ptica koja nešto konkretno posta. Međutim, gledajući taj kod, sjetio sam se kako je netko ovdje rekao da ne treba puno gubiti vrijeme proučavajući sam programski jezik (tada Python) već odmah preći na "ozbiljno" programiranje u Django frameworku. I onda u takvom slučaju dobiješ rezultat poput ovog koda.

Odlučio sam zato, u nadi da će ti to pomoći, staviti par zabilješki sa strane dok čitam tvoj program po redu kako je napisan, da prikažem samo ono što mi odmah upada u oko:

- varijable srt, lng i ps ne moraju biti globalne nego skrivene unutar funkcije blic()
- brojeve koji označavaju PAUZU, DUGO i KRATKO definiraj kao konstante a ne skrivati značenje brojki u komentarima poput:
//broj "0" znači da nema blicaja
//broj "1" znači kratak blicaj


Globalne konstante možeš definirati sa #define ili enum, a lokalne skrivene unutar funkcije (i globalne) sa const.
Osnovna stvar kod Arduinovog AVR-a, PIC-a, 8051 i sl. procesora je "Svega mi fali". Recimo 8051 ima 128 bajtova RAM-a, AVR 328p ima 2kB. Na tako malom procesoru gdje je memorija vrijedna ko zlato, ne treba se razbacivati sa "int" gdje je dovoljan "char" (byte).
unsigned const char nema=0, kratak=1, dugi=2;

Gdje god vidiš da se ponavljaju iste stvari, tu nešto ne štima.
Ta četiri skoro ista argumenta za blic() pokazuju da je nešto krivo. Razumno bi bilo poslati blic(ascii_znak) i onda to razraditi u funkciji. Morseove kodove bi najprirodnije bilo držati u matrici.
Što sve vodi do još nepotrebnog ponavljanja:
if (one == 1){...
...
} else...

A kod funkcije morse() prvo upada u oči nepotrebni else{}. Moglo se isto napisati i kao case ali nije toliki bed. Recimo, kod bi bio malo manji da se u tim testovima samo postavi matrica i na kraju pozove blic() umjesto pozivanja u svakoj liniji. Ali tvoje izgleda jednostavno i čitljivo (bez else{} ).

Dalje, dobro bi bilo odnositi se prema String objektu kao prema čovjeku s gripom i nadutošću. Što dalje od mene to bolje i nekako se snaći bez njega.
U ovom slučaju, iako serijski ulaz hvataš u String objekt, koji automatski pripremi dovoljno memorije za buffer svake linije, stvar je da nikako ne kontroliraš duljinu ulaza. To je uvijek loša stvar. U ovom slučaju zato što AVR procesor u Arduinu ima jako malo RAM memorije za alokaciju.
Još gore je par linija niže, kad sadržaj postojećeg String objekta nepotrebno pretočiš u fiksni buffer od 50 znakova. Joj! Sve što je preko te duljine i gubiš sve iza 49-tog znaka i znak nove linije. Samo zahvaljujući sreći (i bug izvještajima) toCharArray() metoda na kraj buffera stavlja NUL čak i kada je string prevelik da stane u buffer. Da nema toga strlen() bi otišao nebu pod oblake jer koristi znak NUL za određivanje duljine stringa.

Sretno!

Re: Arduino/Croduino set za početnike

23 pro 2017, 08:44

Kako na linuxu nema baš dobrog i besplatnog GUI Arduino simulatora, nije loša ideja okrenuti se webu.
Već neko vrijeme postoji stranica koja se sada nalazi u sklopu Tinkercada s jednostavnim i dobrim simulatorom Arduino sklopovlja i programa. Nije prva liga za debugiranje ali trenutno bolje od ičega na linuxu.

Znači, moguće je na ekranu sklopiti dijelove, Arduino, LCD, terminal, diode, prekidače i sl., napisati kod i provjeriti odmah kako radi, bez učitavanja u pravi Arduino.

Registracija je jednostavna i besplatna, firma koja stoji iza toga je veliki AutoDesk (AutoCAD).

https://www.tinkercad.com/circuits

Re: Arduino/Croduino set za početnike

23 pro 2017, 09:27

Hvala na analizi,
99% mojeg programiranja je u bashu, njemu je tako svejedno šta se nalazi u varijabli

iskeno svi ovi int , float, string, char, su mi malo zbunjujući, mislim, znam od prilike koji je šta
ali ono.

Ovo sam počeo pisati cisto iz znatiželje i dosade, jednostavno neka stimulacija da ne poludim sam u stanu.

u početku sam napravio onu blic() funkciju kako sam znao, znao sam da mi treba 3 stanja i 4 znaka

onda sam definirao slovo A i pokušao to napraviti da funkcionira, onaj else sam stavio jel mi nije bilo jasno zašto se cudno ponaša, zapravo mi e samo bio ; između if() i {}, pa nije htjelo blicat, jednom.kad sam to kopirao za ostala slova bilo mi je ljeno to brisati iza svakog slova. bilo je vaznijih stvari koje nisu radile.

nakon toga sam proučavao kako kroz. serijski port poslati neku poruku, jedino sto sto sam našao je da serijski port uzima samo string, a to je značilo da mogu slati samo jedno po jedno slovo
, ja sam htio blicati čitave rečenice

onda sam isao istraziti kako da uzimam jedno po jedno slovo iz stringa, nisam našao riješenje ali sam naišao na char, i kad sam ga dublje proučio vidio sam da je to ono sto mi treba, char nekichar[nekibroj]

ali pošto kroz serijski port nemogu direktno procitati char morao sam onaj string pretvoriti u char
koliko sam skuzio kada se [] na charu on sam odlučuje koliko memorije mu treba, ali kod konverzije iz stringa sam morao imati definiranu veličinu buffera pa sam samo stavio na 50 (oops?)

strlenght sam stavio samo zbog for loopa koji vrti slovo po slovo, inače mi provuče svih 50 znakova bez obzira koliko slova bilo, tako da sam ga morao nekako ogrančiti da stane ako nema ničeg

znam da mi je logika možda malo primitivna ali trudim se. puno hvala na prijedlozima, jos neznam što se sve može i na koje načine se to može napraviti pa radim onako kako znam i kako mi je logično.

onaj emulator arduina je fora stvar, ali bas sam naručio 20 komada arduino nano, bili su negdje $1.40 i još sam dobio popust na kolicinu pa me ispalo negdje dolar/komad

Re: Arduino/Croduino set za početnike

23 pro 2017, 12:36

@Tomislav001:
A dobro onda! Ako nisi nikad prije imao dodira s C jezikom, iznenađujuće dobro se snalaziš s time. Tvoj način rada je odličan - "Napravi malu sitnicu pa testiraj i tek onda kreni dalje". Problem je, pošto si naručio 20 arduina i provest ćeš vremena u programiranju istih, što nemaš općeniti uvid u jezik koji koristiš i trebao bi preletjeti neki uvod u C (nemoj C++ da te ne zbuni za početak, možda Processing).

Također neki jednostavni uvod u arhitekturu procesora, najbolje mikrokontrolera (iako m-kontroleri nisu samo procesor, to su čitava mala računala s ugrađenim periferalijama). Tako da shvatiš kako sve te varijable i kodovi koje upisuješ nisu samo slova na ekranu već stvarni dijelovi stvarnog stroja koji ima svoju određenu konstrukciju.

Nekad davno je programerima početnicima bilo lakše pohvatati osnove jer su procesori bili tako veliki da se doslovno moglo hodati između varijabli u registrima i pratiti pogledom kako se mijenjaju. Danas je sve to skriveno, mikroskopske veličine, zaliveno u plastiku, iako i dalje radi na isti način. I svi programski jezici pokušavaju sakriti tu mašinu od pogleda, neki više (bash, python) - neki manje (asembler, C). Tu dolaze opisi poput int, char i sl.

Re: Arduino/Croduino set za početnike

23 pro 2017, 14:03

pa zadnji put sam programirao arduino prije negdje godinu dana, ali to nije bilo više od jedan if i digitalwrite i tako da nisam imao doticaja sa varijablama osim int
ja sam uvjek bio više za elektroniku nego za programiranje

ovo sam sad uhvatio nakon jako dugo vremena. inače imam doticaja sa PHP om na poslu, samo čitam kod dok npr cistim stranicu od zaraze, ali dosta je pomoglo da shvatim kako to funkcionira odprilike

Mislim, za ovaj kod gore mi je trebalo 2-3 sata, uz čitanje arduino reference kad mi nešto nije bilo jasno ili kad sam tražio kako da nešto napravim

definitivno planiram učiti više ali tesko je naći ideju sta da programiram, a u prazno brz nekog cilja baš i neide
Odgovori