Zopár chybových hlásení a ako ich opraviť

Najčastejšie chyby s ktorými sa môžte stretnúť pri prechode zo starších verzií Arduino Softwaru na najnovšiu “Arduino 1.0″. (Postupne budem dopĺňať)

call of overloaded ‘write(int) is ambigous

Serial.print(00, BYTE);

nahradíme za:

Serial.write((byte)0x0);

WConstants.h: No such file or directory

#include <WProgram.h>

nahradíme za:

#include <Arduino.h>

Arduino a 1-Wire protokol

1-wireNa dnes som si pripravil trochu teórie, predtým ako budú pribúdať zapojenia s použitím 1-Wire protokolu (one-wire). Vyvinula ho spoločnosť Dallas, ktorú vlastní firma Maxim. Protokol sa nazýva 1-wire, pretože na komunikáciu mu stačí iba jeden vodič. Typicky pracuje s napätím 2.8V až 6V a využíva CMOS/TTL logiku. Maximálne 0.8V pre logickú “nulu” a minimálne 2.2V pre logickú “jednotku”. Po 1-wire zbernici dokážeme komunikovať len v halfduplex móde, to znamená len vysielať, alebo príjmať v ten istý čas. Pri komunikácii musí byť aspoň jedno zariadenie Master (veliteľ). Každé 1-wire zariadenie má jedinečnú 64-bitovú adresu, ktorú využíva pri identifikácii na 1-wire zbernici. Skladá sa z 8-bitov identifikujúcich typ zariadenia, 48-bitového sériového čísla a nakoniec 8-bitové CRC. Štandardne sa využíva CAT5 kábel (sieťový) na zapájanie 1-wire senzorových sietí. Možnosť zapojenia využíva zvyčajne 3 piny – zem, napájanie a dáta. Ďalšia možnosť je použiť tzv. parazitné zapojenie, pri ktorom sa použijú len dva vodiče – zem a dátový vodič (vstup pre napájanie sa pripojí k zemi). Táto druhá možnosť má však mnoho nevýhod (napr. nižšia spoľahlivosť prenosu dát).

Najznámejšie 1-wire zariadenia:

  • DS18B20 / DS18S20 / DS1822 – Vysoko precízny teplomer schopný merať rozsah teplôt od -55°C do +125°C pri ±0.5°C
    ds18b20
  • iButton – Sú to aj u nás známe dotykové “kľúče”, ktoré používame na vstup do vchodov panelákov a budov. Momentálne je ich v obehu po celom svete až 175 miliónov.
    ibutton 1-wire
  • DS2405 / DS2406 – vstupno výstupné zariadenie ovládané cez 1-wire. Príklad aplikácie môže byť spínacie relé (zapínanie/vypínanie svetla), alebo detekcia zopnutého kontaktu (či je okno otvorené alebo zatvorené).

Nasleduje popis komunikácie na 1-wire zbernici, ktorý sa skladá z troch fáz. Komunikácia vždy začína RESET príkazom a trvá 480 mikrosekúnd.

  1. RESET signál / Synchronizácia [RESET SEQUENCE]
  2. Príkaz pre výber cieľového zariadenia [ROM CMD SEQUENCE]
  3. Špecifický príkaz pre cieľové zariadenie [FUNCTION SEQUENCE]

1-wire signalizácia

V ďalšej časti si už pripojíme dáke to one-wire zariadenie.

Vlastný font na displeji s kontrolerom HD44780

V dnešnej dobe grafických a plne farebných displejov sa pokúsime oživiť klasiku – dvojriadkový displej schopný zobraziť úžasných 16 znakov na riadok :-)

Vlastny font na HD44780

Kontroler displeja HD44780 obsahuje ASCII tabuľku znakov, ktoré možme použiť. Navyše je tam miesto pre osem vlastných znakov. V našom prípade si vytvoríme font pre čísla od 1 do 7 a znak stupňa. Povedzme, že sme si zostrojili teplomer zobrazujúci vnutornú a vonkajšiu teplotu, ktorú chceme opticky oddeliť od textových informácií zobrazovaných na displeji. Bohužial miesto je len pre 8 vlastných znakov, takže napríklad pre teploty väčšie ako 27 stupňov možme dať podmienku, že sa použije štandardný font.

Zapojenie LCD displeja

Zdrojový kód čísla šesť bude vyzerať asi takto:

byte six[8] = {
B00000,
B00000,
B11111,
B10000,
B11111,
B10001,
B11111,
B00000
};

ASCII tabuľka znakov, ktoré máme štandardne k dispozícii.

A nakoniec samotný zdrojový kód:

// Zdroj - http://www.arduino.cc/en/Tutorial/LiquidCrystal

#include <LiquidCrystal.h>

// Inicializujeme piny na ktorych je pripojene lcd.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

byte degree[8] = {
	B00000,
	B00000,
	B11100,
	B10100,
	B11100,
	B00000,
	B00000,
	B00000
};
byte one[8] = {
	B00000,
	B00000,
	B00001,
	B00001,
	B00001,
	B00001,
	B00001,
	B00000
};
byte two[8] = {
	B00000,
	B00000,
	B11111,
	B00001,
	B11111,
	B10000,
	B11111,
	B00000
};
byte three[8] = {
	B00000,
	B00000,
	B11111,
	B00001,
	B11111,
	B00001,
	B11111,
	B00000
};
byte four[8] = {
	B00000,
	B00000,
	B10010,
	B10010,
	B11111,
	B00010,
	B00010,
	B00000
};
byte five[8] = {
	B00000,
	B00000,
	B11111,
	B10000,
	B11111,
	B00001,
	B11111,
	B00000
};
byte six[8] = {
	B00000,
	B00000,
	B11111,
	B10000,
	B11111,
	B10001,
	B11111,
	B00000
};
byte seven[8] = {
	B00000,
	B00000,
	B11111,
	B00001,
	B00001,
	B00001,
	B00001,
	B00000
};
byte eight[8] = {
	B00000,
	B00000,
	B11111,
	B10001,
	B11111,
	B10001,
	B11111,
	B00000
};
byte smile[8] = {
	B00000,
	B00000,
	B01010,
	B01010,
	B00000,
	B10001,
	B01110,
	B00000
};
byte nine[8] = {
	B00000,
	B00000,
	B11111,
	B10001,
	B11111,
	B00001,
	B11111,
	B00000
};
void setup() {
  // Vytvorime znaky.
  lcd.createChar(0, degree);
  lcd.createChar(1, one);
  lcd.createChar(2, two);
  lcd.createChar(3, three);
  lcd.createChar(4, four);
  lcd.createChar(5, five);
  lcd.createChar(6, six);
  lcd.createChar(7, seven);  

  // Nastavime rozmer lcd - 16 znakov, 2 riadky.
  lcd.begin(16, 2);

  // Zobrazenie znakov, zacneme na pozicii znak 0, riadok 0.
  lcd.setCursor(0,0);
  lcd.write("arduino.sk");

  lcd.setCursor(0,1);
  lcd.write((byte)1);
  lcd.write((byte)2);
  lcd.write((byte)3);
  lcd.write((byte)4);
  lcd.write((byte)5);
  lcd.write((byte)6);
  lcd.write((byte)7);
  lcd.write("12345");

  lcd.setCursor(13,0);
  lcd.write((byte)2);
  lcd.write((byte)7);
  lcd.write((byte)0);

  lcd.setCursor(13,1);
  lcd.write((byte)1);
  lcd.write((byte)2);
  lcd.write((byte)0);
}

void loop() {
}

Vlastný znak môže byť čokoľvek od srdiečok až po indikátor stavu vybitia batérie. Nakoniec prikladám zopár inšpirácií – pozrite si tu, tiež tu a tu.