コード例 #1
0
ファイル: main.c プロジェクト: brentnd/PyPlot
void PGcode()
{
  for(;;)
  {
    /* Get a character */
    while(UART_getchar_present() == 0);
    (*p_buffer) = UART_getchar();
    UART_putchar((*p_buffer));
    (*(p_buffer+sizeof(char))) = 0;
    
    if((*p_buffer) == BS)
      p_buffer -= sizeof(char);
    /* Check for end of command */
    if((*p_buffer) == CR)
    {
      GCODE_STATUS st;
      LINEFEED;
      st = ProcessCommand();
      if(st == GCODE_DONE)
        break;
      p_buffer = &buffer[0]-(sizeof(char));
    }
    
    /* Go for next char */
    if(p_buffer < buffer+BUF_SIZE*sizeof(char))
      p_buffer += sizeof(char);
    else
    {
      LINEFEED;
      PRINTLN("Buffer overflow");
      PRINTLN("Returning to terminal");
      break;
    }
  }
}
コード例 #2
0
ファイル: full.c プロジェクト: rimek/aquarium
int main(void)
{             
  char c;			// odebrany znak
  UART_init();			// inicjalizacja portu szeregowego
  LCD_init();			// inicjalizacja wy�wietlacza LCD
  LCD_PL_chars_init();		// polskie znaki na wy�wietlaczu LCD
  KBD_init();			// inicjalizacja klawiatury
  LED7SEG_init();		// inicjalizacja wy�wietlacza
  sei();                       	// w��cz obs�ug� przerwa�

  while(1)			// p�tla niesko�czona
  {
    PCF8583_get_time(&godz,&min,&sek,&ssek);

    LED7SEG_putU08(sek);	// wy�wietlaj warto�� 

    if (UART_rxlen()>0)	// je�li odebrano znak
    {
      c=UART_getchar();
    	// tu mo�na wstawi� reakcje na komendy steruj�ce np. typu ESC[
      LCD_putchar(c);		// wy�wietl go na LCD
    }
    if (KBD_read())		// je�li naci�ni�to klawisz
    {
      if ((KBD_ascii>='A')&&(KBD_ascii<='D'))
        UART_putstr_P(CURSOR);	// sterowanie kursorem
      UART_putchar(KBD_ascii);	// wy�lij go na port szeregowy
      KBD_wait();		// czekaj na zwolnienie klawisza
    }
  }
}
コード例 #3
0
ファイル: main.c プロジェクト: brentnd/PyPlot
/*
 * Terminal loop application.
 */
void terminal()
{
  char c = 48;
  for(;;)
  {
    LINEFEED;
    UART_putchar('>');
    while(UART_getchar_present() == 0);
    c = UART_getchar();
    
    switch(c)
    {
    case 'w':
      PRINTLN("Moving UP");
      MoveY(-MOVE_DIST);
      break;
    case 's':
      PRINTLN("Moving DOWN");
      MoveY(MOVE_DIST);
      break;
    case 'a':
      PRINTLN("Moving LEFT");
      MoveX(-MOVE_DIST);
      break;
    case 'd':
      PRINTLN("Moving RIGHT");
      MoveX(MOVE_DIST);
      break;
    case 'h':
      PRINTLN("Going Home...");
      MoveHome();
      break;
    case 'z':
      PRINTLN("Zeroed at current position.");
      MoveSetZero();
      break;
    case 'g':
      PRINTLN("Entering Pseudo G-Code mode.");
      PGcode();
      break;
    case 'o':
      PRINTLN("Draw a circle?");
      DrawCircle(50);
      break;
    case ' ':
      PRINTLN("Pen action");
      penp = 100 - penp;
      PWM_setPosition(penp);
      break;
    }
  }
  
}
コード例 #4
0
ファイル: getstr.c プロジェクト: Fakiros/PR0021
void UART_getstr (char *s)
{
  uint8_t i=0;
  uint8_t ch=0;
  do
  {
    WDR();			// restart licznika Watchdoga
    ch=UART_getchar();		// pobieraj znak
    s[i]=ch;			// wstaw go do ³añcucha i inkrementuj
    i++;			// inkrementuj iloœæ znaków odebranych
  }
  while ((ch != 10) && (ch != 13) && (i <= UART_MAX_GETSTR));
// dopóki nie napotka znaków koñca linii lub nie przekroczy d³ugoœci MAX_GETSTR
  s[i-1]=0;			// wstaw 0 na koniec ³añcucha
}
コード例 #5
0
ファイル: my_MNEA.c プロジェクト: Tokifuko/all-my-projects
char MNP_get_message(void)
{
    if (UART_rx_buffer_overflow)  // было переаолнение буфера
    {               // все сбрасываем, и возвращаем ошибку
        MNP_message_reset();
        UART_rx_overflow_reset();
        return ERR_RX_OVERFLOW;
    }
    char data;
    if (UART_rx_buffer_empty ) return 0;//буфер пустой
    
    data=UART_getchar();
    switch (MNP_message_mode)
    {
        case MNP_WAIT_START:// ждем начала сообщения
            // получено начало сообщения,
            if (data=='$')
            {
                MNP_message_mode=MNP_GET_DATA;  // начинаем принимать данные
               // debug_counter++;
                MNP_CRC=0;// все сбрасываем
                MNP_message_length=0;
                MNP_message_counter=0;
            }
            else return ERR_MNP_START_EXPECTED;
            break;
        case MNP_GET_DATA: // тут получаем полезные данные
            // проверяем на отсутствие служебных символов
            if (data=='$') // символ начала нового сообщения
            {
                MNP_message_reset ();
                return ERR_MNP_START_UNEXPECTED;
            }
            if (data==0x0A) // символ перевода строки
            {
                MNP_message_reset ();
                return ERR_MNP_LF_UNEXPECTED;  
            }
            if (data==0x0D)  // символ возврата каретки
            {
                MNP_message_reset ();
                return ERR_MNP_CR_UNEXPECTED;
            }
            
            if (data=='*') // конец принимаемым данным
            {
                MNP_message_mode=MNP_GET_CRC_H; // переключаемся на прием CRC
                return 0;
            }
            
            if (MNP_message_counter>MNP_MESSAGE_BUFFER_SIZE) // если буфер заполнен
            {
                MNP_message_reset ();
                return ERR_MNP_MESSAGE_OVERFLOW; // если буфер сообщения переполнился
            }

            MNP_message_buffer[MNP_message_counter++]=data; //байт в буфер
            MNP_CRC^=data; // считаем CRC
            break;

        case MNP_GET_CRC_H: // здесь приимает старший символ CRC
            // и переводим символ в число
            if ((data >= '0') && (data <= '9')) rx_CRC=(data-'0')<<4;
            else if ((data >= 'A') && (data <= 'F')) rx_CRC=(data-'A'+10)<<4;
                else 
                    {
                        MNP_message_reset ();
                        return ERR_MNP_UNEXPECTED_CRC_CHAR;
                    }
            MNP_message_mode=MNP_GET_CRC_L;
            break;

        case MNP_GET_CRC_L: // здесь приимает младший символ CRC
            if ((data >= '0') && (data <= '9')) rx_CRC+=(data-'0');
            else if ((data >= 'A') && (data <= 'F')) rx_CRC+=(data-'A'+10);
                else
                    {
                        MNP_message_reset ();
                        return ERR_MNP_UNEXPECTED_CRC_CHAR;
                    }
            MNP_CRC^=rx_CRC;// считаем CRC
            if (!(MNP_CRC==0) ) //если не сошелся то ошибку возвращаем
            {
                MNP_message_reset ();
                return ERR_MNP_CRC_ERROR;
            }
            MNP_message_mode=MNP_GET_CR;

            break;

        case MNP_GET_CR: //должен быть символ возврата каретки
            if (data==0x0A) MNP_message_mode=MNP_GET_LF;// символ возврата кареткии
            else return ERR_MNP_CR_EXPECTED;

            break; 
        case MNP_GET_LF: // и в конце должен быть символ перевода строки
            if (data==0x0D) MNP_message_mode=MNP_WAIT_START;// символ перевода строки
            else return ERR_MNP_LF_EXPECTED;
            return MNP_message_parser();
            break;
    }
    return 0;
}