Komunikácia medzi Imagine Logo a Arduinom: Rozdiel medzi revíziami

Zo stránky Robotický krúžok
Skočit na navigaci Skočit na vyhledávání
dBez shrnutí editace
dBez shrnutí editace
 
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):


<syntaxhighlight lang="logo">
to otestujArduino :port
to otestujArduino :port
   <span style="color:#208F20">; vytvorime objekt triedy CommPort (nakonfigurujeme zadany port)</span>
   ; vytvorime object triedy CommPort (nakonfigurujeme zadany port)
   new "CommPort se [name arduino asyncInput true port] :port
   new "CommPort se [name arduino asyncInput true port] :port
   ; otvorime port
   <span style="color:#208F20">; otvorime port</span>
   arduino'setConnected "true
   arduino'setConnected "true
   ; ak sa port nepodarilo otvorit, vypiseme spravu a nepokracujeme
   <span style="color:#208F20">; ak sa port nepodarilo otvorit, vypiseme spravu a nepokracujeme</span>
   if not arduino'connected [print [Neda sa pripojit na Arduino] stop]
   if not arduino'connected [print [Neda sa pripojit na Arduino] stop]
   ; nastavime udalost, ktora sa zavola pri kazdom prijati novych dat zo serioveho portu
   <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)]
   arduino'setEvent "onReceive [print se [Arduino:] (arduino'receive arduino'waitingChars)]
   ; pockame, kym sa arduino nastartuje (otvorenie portu sposobi reset arduina)
   <span style="color:#208F20">; pockame, kym sa arduino nastartuje (otvorenie portu sposobi reset arduina)</span>
   wait 3000
   wait 3000
   ; posleme jednotku (odpovie pozdravom)
   <span style="color:#208F20">; posleme jednotku (odpovie pozdravom)</span>
   arduino'send "1
   arduino'send "1
   wait 300
   wait 300
   ; posleme dvojku (odpovie 6)
   <span style="color:#208F20">; posleme dvojku (odpovie 6)</span>
   arduino'send "2
   arduino'send "2
   wait 300
   wait 300
   ; posleme trojku (odpovie 9)
   <span style="color:#208F20">; posleme trojku (odpovie 9)</span>
   arduino'send "3
   arduino'send "3
   wait 300
   wait 300
   ; zatvorime seriovy port
   <span style="color:#208F20">; zatvorime seriovy port</span>
   arduino'setConnected "false
   arduino'setConnected "false
   ; zrusime objekt na komunikaciu cez seriovy port
   <span style="color:#208F20">; zrusime objekt na komunikaciu cez seriovy port</span>
   eraseObject "arduino
   eraseObject "arduino
end
end
</syntaxhighlight>


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:

Putty arduino test.png

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