Komunikácia medzi Imagine Logo a Arduinom: Rozdiel medzi revíziami
dBez shrnutí editace |
dBez shrnutí editace |
||
(Jedna medziľahlá úprava od rovnakého používateľa nie je zobrazená.) | |||
Riadok 34: | Riadok 34: | ||
A napokon napíšeme program pre Imagine Logo, ktorý otvorí sériový port a komunikuje s Arduinom (použijeme anglickú verziu Imagine): | A napokon napíšeme program pre Imagine Logo, ktorý otvorí sériový port a komunikuje s Arduinom (použijeme anglickú verziu Imagine): | ||
< | to otestujArduino :port | ||
<span style="color:#208F20">; vytvorime objekt triedy CommPort (nakonfigurujeme zadany port)</span> | |||
new "CommPort se [name arduino port] :port | new "CommPort se [name arduino asyncInput true port] :port | ||
<span style="color:#208F20">; otvorime port</span> | |||
arduino'setConnected "true | arduino'setConnected "true | ||
if not arduino'connected [ | <span style="color:#208F20">; ak sa port nepodarilo otvorit, vypiseme spravu a nepokracujeme</span> | ||
arduino'setEvent "onReceive [ | if not arduino'connected [print [Neda sa pripojit na Arduino] stop] | ||
wait | <span style="color:#208F20">; nastavime udalost, ktora sa zavola pri kazdom prijati novych dat zo serioveho portu</span> | ||
arduino'setEvent "onReceive [print se [Arduino:] (arduino'receive arduino'waitingChars)] | |||
<span style="color:#208F20">; pockame, kym sa arduino nastartuje (otvorenie portu sposobi reset arduina)</span> | |||
wait 3000 | |||
<span style="color:#208F20">; posleme jednotku (odpovie pozdravom)</span> | |||
arduino'send "1 | arduino'send "1 | ||
wait | wait 300 | ||
<span style="color:#208F20">; posleme dvojku (odpovie 6)</span> | |||
arduino'send "2 | arduino'send "2 | ||
wait | wait 300 | ||
<span style="color:#208F20">; posleme trojku (odpovie 9)</span> | |||
arduino'send "3 | arduino'send "3 | ||
wait | wait 300 | ||
<span style="color:#208F20">; zatvorime seriovy port</span> | |||
arduino'setConnected "false | arduino'setConnected "false | ||
<span style="color:#208F20">; zrusime objekt na komunikaciu cez seriovy port</span> | |||
eraseObject "arduino | eraseObject "arduino | ||
end | end | ||
a potom z príkazového riadku Imagine môžeme zadať napríklad: | a potom z príkazového riadku Imagine môžeme zadať napríklad: | ||
? otestujArduino "COM4 | ? otestujArduino "COM4 | ||
Arduino: Ahoj Imagine! | |||
Arduino: 6 | |||
Arduino: 9 |
Aktuálna revízia z 23:40, 11. november 2019
Imagine Logo je silný nástroj a dokáže robiť všetko možné... napríklad aj otvárať a komunikovať cez sériový port - a tam sa práve pripája Arduino.
Podrobné informácie o práci so sériovým portom sú na stránkach o Imagine Logu.
Tu si vyskúšame jednoduchý príklad. Napíšeme program pre Arduino, ktorý čaká na nejaké jednociferné číslo na sériovom porte, ak je to 1, tak pošle naspäť jeden riadok, v ktorom je pozdrav, inak číslo vynásobí tromi a výsledok pošle naspäť do PC:
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
if (Serial.available())
{
char c = Serial.read();
if (c == '1')
Serial.println("Ahoj Imagine!");
else if ((c >= '0') && (c <= '9'))
Serial.println((c - '0') * 3);
}
delay(10);
digitalWrite(13, 1 - digitalRead(13));
}
Po nahratí programu do Arduina si túto funkcionalitu môžeme vyskúšať cez terminálové okno Putty:
A napokon napíšeme program pre Imagine Logo, ktorý otvorí sériový port a komunikuje s Arduinom (použijeme anglickú verziu Imagine):
to otestujArduino :port ; vytvorime objekt triedy CommPort (nakonfigurujeme zadany port) new "CommPort se [name arduino asyncInput true port] :port ; otvorime port arduino'setConnected "true ; ak sa port nepodarilo otvorit, vypiseme spravu a nepokracujeme if not arduino'connected [print [Neda sa pripojit na Arduino] stop] ; nastavime udalost, ktora sa zavola pri kazdom prijati novych dat zo serioveho portu arduino'setEvent "onReceive [print se [Arduino:] (arduino'receive arduino'waitingChars)] ; pockame, kym sa arduino nastartuje (otvorenie portu sposobi reset arduina) wait 3000 ; posleme jednotku (odpovie pozdravom) arduino'send "1 wait 300 ; posleme dvojku (odpovie 6) arduino'send "2 wait 300 ; posleme trojku (odpovie 9) arduino'send "3 wait 300 ; zatvorime seriovy port arduino'setConnected "false ; zrusime objekt na komunikaciu cez seriovy port eraseObject "arduino end
a potom z príkazového riadku Imagine môžeme zadať napríklad:
? otestujArduino "COM4 Arduino: Ahoj Imagine! Arduino: 6 Arduino: 9