Browse Month: January 2013

Upoznavanje sa IOIO

Ako niste sigurni o kakvom IOIO-u se radi, pogledajte ovde 😉

ioio-logo

Stigao je. IOIO koji sam toliko čekao – stigao je! Zapravo stigao je on još davno, samo od svih obaveza nisam uspeo da mu posvetim dovoljno pažnje i da se poigram sa njim. Nego, da ne bih prevodio uputstvo koje možete naći ovde, u ovom blogu ću opisati problematične situacije u kojima sam se ja našao kada sam hteo po prvi put da pokrenem aplikaciju HeloIOIO i kako sam ih rešio.

Konektori

Prva stvar koju sam primetio kada sam otvorio paket, jeste da na pločici nisu zalemljene lestvice za povezivanje uređaja sa žicama, već su ostavljeni samo kontakti na koje se nešto može zalemiti. “Shit, sada još moram tražiti te lestvice po gradu!”. A tada još nisam ni znao kako se to zove, pa sam prodavcima na razne načine objašnjavao šta mi treba, pokazivao im slike na telefonu, poredio sa protoboard-om, dok konačno u Sprintu nisam našao to što mi treba. Tamo su mi objasnili da se to zove ženska lestvica (vi zakjučite zašto baš ženska :P).

Zaštita od pogrešnog povezivanja napajanja

Kada su lestvice konačno bile zalemljene na pločicu, bilo je vreme da testiram uređaj. Pročitao sam zvanično uputstvo, a zatim pločicu nakačio na stari adapter od fiksnog telefona (9V, 1000mA). Ideja je bila da stavim i jednu diodu, kako bi pločicu zaštitio od pogrešnog povezivanja napajanja, ali u tom trenutku nije bilo vremena za nešto to, što se kasnije ispostavilo kao velika greška. Elem, evo kako diodom da zaštitite IOIO (ili neki drugi neki uređaj) od pogrešnog povezivanja napajanja:

Zaštita od pogrešnog povezivanja napajanja
Zaštita pomoću diode

Takođe možete koristiti i grecov ispravljač:

Zaštita od pogrešnog povezivanja napajanja
Zaštita pomoću grecovog ispravljača

U provm slučaju uređaj neće raditi ako naopačke povežete napajanje (na B priključak dovedete minus), dok u drugom slučaju sa grecovim ispravljačom, uređaj će raditi za bilo koju polarizaciju plusa i minusa na priključcima A i B. Ove zaštite je poželjno skinuti kada uređaj kačite na bateriju, jer svaka dioda stvara pad napona od 0,7V.

Projekat HelloIOIO

Da bi IOIO nešto radio, potrebno je da isprogramirate aplikaciju za Android telefon koja će da mu kaže šta da radi. Zbog toga je potrebno da na računaru imate podešeno Eclipse okruženje sa Android SDK. Kako to uraditi ako do sada niste, potražite ovde.

Kada preuzmete najnovije biblioteke za rad sa IOIOom, sa njima će te dobiti i primer HelloIOIO. U mom slučaju, pokretanje tog primera nije išlo tako glatko kako je opisano na IOIO wikiju. Evo šta sam ja sve morao da uradim da bi mi svi primeri proradili:

1) Update Eclipse okruženja. Help Check for Updates, pa dalje sve prihvatiti…

2) Android SDK Manager  Update Android Tools

Nakon ubacivanja projekata u Eclipse okruženje koje je opisano na IOIO wikiju, za svaki projekat uraditi sledeće:

1) Desni klik na projekat  u Package Explorer prozoru  Properties (otvoriće se novi prozor)

2) Odabrati stavku Android u desnom meniju, a zatim u panelu levo obeležiti verziju Androida za koji želite da kompajlirate vaš projekat (verzija Androida koji je na telefonu sa kojim povezujete IOIO)

3) U meniju sa desne strane sada odabrati Java Compiler stavku. Levo obeležiti stavku Enable project specific settings, a zatim pod JDK Compliance tamo gde piše Compiler compliance level odabrati verziju 1.6. Kockica Use default compliance level treba da bude obeležena.

4) Zatvorite prozor Properties for …

5) Desni klik na projekat u Package Explorer prozoru Android tools Fix project properties

Nakon ovoga, kod mene se svaki ubačeni projekat ponaša normalno. Crveni iksići koji su se ranije pojavljivali pored projekata u Package Explorer prozoru su nestali.

Prvi pokušaj

Nakon spuštanja aplikacije HelloIOIO na telefon i povezivanja telefona sa IOIOom, aplikacija je radila baš to što je u njenom opisu: menja stanje statusne diode na uključeno/isključeno u zavisnosti od stanja ToggleButton-a koji se nalazi na displeju telefona.

helloioio

U nekom od narednih blogova slede malo ozbiljniji primeri 😉

Pripreme za E2

Kao i svake godine, smer E2 upiše dosta gimnazijalaca. Osim što se susreću sa šalama pojedinih profesora na račun toga što su završili gimnaziju, susreću se i sa dosta ozbiljnijim zadacima, kakve možda nisu sreli u gimnaziji. Matematika i fizika im naravno nisu problem, ali kada je reč o programiranju ili osnovama elektrotehnike, tu se stvari već malo menjaju.

U gimnazijama se obično radi Pascal, dok se na smeru uči C/C++. Iako se na predmetu Programski jezici i strukture podataka programski jezik C uči od početka, predmet je lakše savladati ako već imate neko predznanje. Zato onima koji žele da upišu E2, a i onima koji su jednostavno radoznali i žele da se upoznaju sa programiranjem, preporučujem da posete sledeći link:

Škola Rajak

Programerska radionica

Radi se online kursu škole Rajak, koji se bavi temom algoritama i osnovama strukturiranog programiranja, a kurs vodi moj kolega sa smera.

Ako vas interesuje kako izgleda jedan ovakav kurs, pogledajte ovde.

Ćao! Moj novi broj telefona je…

Ovih dana  planiram da promenim broj telefona, pa bih o tome trebao da obavestim prijatelje i poznanike. Ali koga obavestiti, a koga ne? Ako se neko nalazi u mom imeniku, to ne znači da mu treba moj novi broj, dok sa druge strane, verovatno postoji i neko ko ima moj stari broj, a ja ga nemam upisanog u imeniku. Možda da neko vreme koristim dva telefona, pa da budem dostupan na oba broja? Ili ako bi postojala mogućnost automatskog slanja obaveštenja o promeni broja, ukoliko neko pokuša da me kontaktira na stari broj telefona?

Ovo poslenje pomenuto mi zapravo najviše odgovara, pa sam odlučio i da ga realizujem. Ponono sam iskombinovao staru Nokiu i Python 😉

import messaging
import inbox
import telephone
import time

messageText = "(Automatska poruka): Cao! Vise ne koristim ovaj broj. Kontaktiraj me na 06x/xxx-xxx. Hvala :)"
informedAlready = []

def sendSMS(notifyNumber):
  global informedAlready
  global messageText;

  if informedAlready.count(notifyNumber) == 0:
    print "Sending message to " + notifyNumber
    messaging.sms_send(notifyNumber, messageText)
    informedAlready.append(notifyNumber)

def callCallback(state):
  if (state[0]==telephone.EStatusRinging):
    #print "Voice call received"
    sendSMS(state[1])

def SMScallback(id):
  time.sleep(1)
  try:
    i = inbox.Inbox()
    smsID = i.sms_messages()[0]
    if id == smsID: # preventing error that occurs when delivery report is recieved
      #print "SMS received"
      sendSMS(i.address(smsID))
  except:
    print "Some error occured in SMScallback function!"

# Pokretanje pracenja primljenih poruka
box = inbox.Inbox()
box.bind(SMScallback)
# Pokretanje pracenja primljenih poziva
telephone.call_state(callCallback)

print "Service started!"

Dovoljno je da kod kopirate u datoteku sa ekstenzijom ‘.py’, zatim da je kopirate na telefon i pokrenete u Python interpreteru. Više o tome, pogledajte ovde.