Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
et:examples:vision [2011/11/28 07:45] raivo.sellet:examples:vision [2020/07/20 09:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +<pagebreak>
 ====== Masinnägemine ====== ====== Masinnägemine ======
 <note important>Koostamisel</note> <note important>Koostamisel</note>
Line 107: Line 108:
   * {{:et:examples:vision:cmu_terminal_v1.0.rar| Terminal v1.0}}   * {{:et:examples:vision:cmu_terminal_v1.0.rar| Terminal v1.0}}
  
 +<code c>
 +//*****************************************************************************
 +// CMU CAM 3 juhtimisega seotud funktsioonid
 +// 2011
 +// Autor: Heiko Pikner   
 +//*****************************************************************************
  
 +#include "CMUCAM.h"
 +
 +
 +//
 +// Globaalsed muutujad
 +//
 +volatile char str_x[5];
 +volatile char str_y[5];
 +volatile int8_t packet_received = 0;
 +int8_t packet_t_typ=0;
 +int8_t pitcounter =0;
 +
 +//
 +// Funktsiooni päised
 +//
 +void USART_Transmit(unsigned char);
 +
 +//*****************************************************************************
 +//
 +// Pakettide tõlgendamine ja andmete töötlemine
 +//
 +//*****************************************************************************
 +void CMUPacketHandler(unsigned char c)
 +{
 +
 +
 + // Paketi tähise järgi T paketi tuvastamine
 + if(c==0x54)
 + {
 + packet_t_typ=1;
 +
 + }
 +
 + // Paketist Mx ja My eraldamine. Kumbki võib olla 1-3 kohaline 
 + // number. Numbrid on eraldatud tühikutega. Mx talletatakse str_x massiivi
 + // ja My str_y massivi. Iga massiivi element on üks number.
 + if(packet_t_typ ==1)
 + {
 + pitcounter++;
 +
 +
 + if(pitcounter==3)
 + {
 +
 + str_x[0]=c;
 + }
 +
 + if(pitcounter==4)
 + {
 + if(c == 0x20)
 + {
 + pitcounter=6;
 + }
 + else
 + {
 +
 + str_x[1]=c;
 + }
 + }
 +
 +
 + if(pitcounter == 5)
 + {
 +
 + if(c == 0x20)
 + {
 + pitcounter=6;
 + }
 + else
 + {
 + str_x[2]=c;
 + }
 +
 + }
 +
 +
 + if(pitcounter==7)
 + {
 + str_y[0]=c;
 +
 + }
 + if((pitcounter==8)&& (c != 0x0D))
 + {
 + if(c == 0x20)
 + {
 + pitcounter=6;
 + }
 + else
 + {
 + str_y[1]=c;
 + }
 +
 + }
 + if((pitcounter==9)&& (c != 0x0D))
 + {
 + if(c == 0x20)
 + {
 + pitcounter=6;
 + }
 + else
 + {
 +
 + str_y[2]=c;
 + }
 +
 + }
 +
 +
 + if(c == 0x0D)
 + {
 + packet_t_typ=0;
 + pitcounter=0;
 + packet_received = 1;
 +
 + }
 +
 + }
 +
 +}
 +
 +//*****************************************************************************
 +//
 +//Funktsioon küsib kaamerast tarkvara numbri. Saada 'GV'
 +//
 +//*****************************************************************************
 +void GetVersion(void)
 +
 + USART_Transmit('g'); 
 + USART_Transmit('v');
 + USART_Transmit('\n');
 + USART_Transmit('\r');  
 +}
 +
 +//*****************************************************************************
 +//
 +//Funktsioon kaamera resettimiseks. Saada 'RS'
 +//
 +//*****************************************************************************
 +void ResetCam(void)
 +{
 + USART_Transmit('R'); 
 + USART_Transmit('S');
 + USART_Transmit('\n');
 + USART_Transmit('\r');
 +}
 +
 +//*****************************************************************************
 +//
 +// Alusta valitud värvi trakkimist. Saada mask 'OM 0 3' ja seejärel 
 +// 'TC 184 234 4 54 0 41'
 +//
 +//*****************************************************************************
 +void StartTracking(void)
 +{   
 + // Sea mask, et kaamera saadaks ainult Mx ja My koordinaadid
 + USART_Transmit('O'); 
 + USART_Transmit('M');
 + USART_Transmit(' ');
 + USART_Transmit('0');
 + USART_Transmit(' ');
 + USART_Transmit('3');
 +
 + USART_Transmit('\n');
 + USART_Transmit('\r'); 
 +
 +    
 +
 + //Värvi valimiseks on formaat minRed maxRed minGreen maxGreen minBlue maxBlue 
 + USART_Transmit('T');
 + USART_Transmit('C');
 +
 + USART_Transmit(' ');
 + USART_Transmit('1');
 + USART_Transmit('8');
 + USART_Transmit('4');
 +
 + USART_Transmit(' ');
 + USART_Transmit('2');
 + USART_Transmit('3');
 + USART_Transmit('4');
 +
 + USART_Transmit(' ');
 + USART_Transmit('4');
 +
 + USART_Transmit(' ');
 + USART_Transmit('5');
 + USART_Transmit('4');
 +
 + USART_Transmit(' ');
 + USART_Transmit('0');
 +
 + USART_Transmit(' ');
 + USART_Transmit('4');
 + USART_Transmit('1');
 +
 +
 +
 + USART_Transmit('\n');
 + USART_Transmit('\r');  
 +
 +
 +</code>
 +
 +
 +<code c>
 +#include <avr/io.h>
 +#include <avr/interrupt.h>
 +#include <string.h>
 +#include <stdlib.h>
 +#include <homelab/delay.h>
 +#include <homelab/pin.h>
 +#include <homelab/module/lcd_gfx.h>
 +
 +#include "main.h"
 +
 +//
 +//Muutujad, mis on defineeritud mujal
 +//
 +
 +extern volatile int8_t packet_received;
 +
 +extern volatile char str_x[5];
 +extern volatile char str_y[5];
 +
 +
 +//
 +//Nuppude viikude valik
 +//
 +pin button1 = PIN(C, 0);
 +pin button2 = PIN(C, 1);
 +pin button3 = PIN(C, 2);
 +
 +
 +//
 +// Seadista süsteem
 +//
 +static inline void init()
 +{
 + // Seab nupud töökorda
 + pin_setup_input_with_pullup(button1);
 + pin_setup_input_with_pullup(button2);
 + pin_setup_input_with_pullup(button3);
 +
 + // LCD ekraani algseadistamine
 + lcd_gfx_init();
 + 
 + // Ekraani puhastamine
 + lcd_gfx_clear();
 + 
 + // Taustavalgustuse tööle lülitamine
 + lcd_gfx_backlight(true);
 + 
 + // Programmi nime kuvamine
 + lcd_gfx_goto_char_xy(3, 1);
 + lcd_gfx_write_string("CMU-CAM");
 +
 + // Kuva Mx
 + lcd_gfx_goto_char_xy(0, 4);
 + lcd_gfx_write_string("Mx");
 +
 + // Kuva My
 + lcd_gfx_goto_char_xy(0, 5);
 + lcd_gfx_write_string("My");
 +
 +
 + DDRE = (1<<PE1);
 +
 + // Seriali seadistamine
 + UsartInit();
 +
 + // Katkestuste lubamine
 + sei();
 +}
 +
 +//*****************************************************************************
 +//
 +//MAIN
 +//
 +//*****************************************************************************
 +int main(void)
 +{
 + unsigned char new_value1, old_value1 = 0, new_value2, 
 + old_value2 = 0, new_value3, old_value3 = 0;
 +
 +
 + // Seadista süsteem
 + init();
 +
 +
 + while (1)
 + {  
 +
 + // Loeb nuppude väärtused
 + new_value1 = pin_get_debounced_value(button1);
 + new_value2 = pin_get_debounced_value(button2);
 + new_value3 = pin_get_debounced_value(button3);
 + 
 + // Nupp S1 alla vajutatud
 + if((!new_value1) && (old_value1))
 + {
 +
 + // Tee midagi
 + }
 + 
 + // Nupp S2 alla vajutatud
 + if((!new_value2) && (old_value2))
 + {
 + // Alusta värvi otsimist
 + StartTracking();
 +
 + }
 + 
 + // Nupp S3 alla vajutatud
 + if((!new_value3) && (old_value3))
 + {
 + // Tee midagi
 +
 + }
 + 
 + // Jätab eelmised nupuväärtused meelde
 + old_value1 = new_value1;
 + old_value2 = new_value2;
 + old_value3 = new_value3;
 +
 +
 +
 +
 + // Kui pakett on saabunud, kuvab selle sisu ekraanile
 + if(packet_received == 1)
 + {
 + // Vii kursor algusesse
 + lcd_gfx_goto_char_xy(6, 4);
 +
 + // Kuva klobaalsest muutujast pakett ja kuva see
 + lcd_gfx_write_string((char*) &str_x);
 +
 + // Vii kursor algusesse
 + lcd_gfx_goto_char_xy(6, 5);
 +
 + // Kuva klobaalsest muutujast pakett ja kuva see
 + lcd_gfx_write_string((char*) &str_y);
 +
 +
 +
 + // Kustuta vana pakett, ehk täida see tühikutega
 + memset((char*) &str_x, 0x20, 4);
 + memset((char*) &str_y, 0x20, 4);
 +
 + // Nulli paketi saabumist märkiv lipp
 + packet_received = 0;
 + }
 +
 + }
 +}
 +</code>
  
  
et/examples/vision.1322466336.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0