Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2015, 00:55   #1
istarik.ru
Новичок
Джуниор
 
Аватар для istarik.ru
 
Регистрация: 13.08.2015
Сообщений: 2
По умолчанию Чтение из Ардуины на СИ

Здравствуйте.
Я не торопливо изучаю язык СИ, и вот написал программу, которая открывает /dev/tty* и читает данные из Ардуины.
Собственно хочется чтоб уважаемое сообщество обратило свой взор на нижеследующий код и как следует покритиковало его.

PHP код:
#include <string.h>
#include <sys/types.h>  
#include <sys/stat.h>  
#include <fcntl.h>  
#include <termios.h>  
#include <stdio.h>  
#include <signal.h>  
#include <unistd.h>  
#include <stdlib.h>
#include <time.h>
#define BUFSIZE 128

char bRead[BUFSIZE] = {0,}; 
char er_log_str[50]={0,};
char device[14]={0,};
char papka[30]={0,};
char str_iz_file[100] = {0,};

void error_log() 
{  
    
time_t t;
    
time(&t);
    
FILE *f;
    
fopen("Error.log""a"); 
    
fprintf(f"%s. "er_log_str);
    
fprintf(f"%s"ctime( &t));  
    
printf("Write to Error.log\n");
    
fclose(f);
    exit(
0);
}

void error_to_filebd() 
 {
         
FILE *f;
         
fopen(papka"w"); 
         
fprintf(f"%s""8888");
         
fclose(f);
         
printf("Zapisal Oshibky\n");
         
snprintf(str_iz_file100"%s","Error");
 }

int  open_port(void)  
{  
   
int fd;  
   
fd open(deviceO_RDWR O_NOCTTY |O_NONBLOCK);  
   if(
fd == -1
     {
       
snprintf(er_log_str50"%s","Error - NOT open port");
       
error_log();
     }

   else  
    {  
     
struct termios options;  
     
tcgetattr(fd, &options);  
     
cfsetispeed(&optionsB57600);  
     
cfsetospeed(&optionsB57600);  
     
options.c_cflag |= (CLOCAL CREAD); 
     
options.c_cflag &= ~PARENB;  
     
options.c_cflag &= ~CSTOPB;  
     
options.c_cflag &= ~CSIZE;  
     
options.c_cflag |= CS8;  
     
options.c_cc[VMIN] = 1;  
     
options.c_cc[VTIME] = 1;  
     
options.c_lflag ICANON;  
     
options.c_oflag 0;  
     
options.c_oflag &= ~OPOST
     
tcflush(fdTCIFLUSH);
     
tcsetattr(fdTCSANOW, &options);  
    }  
   return 
fd;  
}

void main(int argcchar *argv[])  
{  
   if(
argc!=3
    {
      
printf("Primer zapyska - ./port /dev/ttyACM1 /var/www/tim/filebd\n");
      
snprintf(er_log_str50"%s","Not use device (/dev/tty*)");
      
error_log();
    }
  
   
snprintf(device14"%s"argv[1]);
   
snprintf(papka30"%s"argv[2]);
  
   
int d2d3d4d5d6d7d8d9d10d11d12d13thumhumpir1knop1knop2ar_summ;
   
int err_count1 0
   
int err_count2 0;
   
unsigned int i
   
int fd open_port(); 
   
sleep(2);
   if (
fd 0)  return; 
   
tcflush(fdTCIFLUSH);

while(!
VINTR
  {  
     
usleep(490000); 
     
read(fdbReadBUFSIZE); 

     for(
0i<=strlen(bRead); i++)
      {
        if(
bRead[i] == '\r' || bRead[i] == '\n')
         {
            
bRead[i] = '\0';
            
tcflush(fdTCIFLUSH); 
            break;
         }
      } 
////// Проверка A-Z ///////
     
char first_sim '0';  
     if(
bRead[0] == 'A' && bRead[strlen(bRead)-1] == 'Z')     
      {
        
sscanf(bRead,"%c %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", &first_sim, &ar_summ, &d2, &d3, &d4, &d5, &d6, &d7, &d8, &d9, &d10, &d11, &d12, &d13, &thum, &hum, &pir1, &knop1, &knop2);
        
err_count1 0;
      }

     else
      {
        
tcflush(fdTCIFLUSH); 
        
memset(bRead0sizeof(bRead)); 
        
err_count1++;
        if(
err_count1 10
          {
            
err_count1 0;
            
snprintf(er_log_str50"%s","Error 6 - err_count1_8");
            
error_to_filebd();
          }
        continue;
      } 
///////// Проверка суммы ////////
     
int summa d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 thum hum pir1 knop1 knop2;  
     if(
summa != ar_summ
      {
        
tcflush(fdTCIFLUSH); 
        
memset(bRead0sizeof(bRead)); 
        
summa=0;
        
ar_summ=999d2=0d3=0d4=0d5=0d6=0d7=0d8=0d9=0d10=0d11=0d12=0d13=0thum=0hum=0pir1=0knop1=0knop2=0;
        
err_count2++;
        if(
err_count2 10
          {
            
err_count2 0;
            
snprintf(er_log_str50"%s","Error 7 - err_count2_8");
            
error_to_filebd();
          }
        continue;
      } 
     
     else 
      {
        
err_count2 0;
      }
////// Сравнение строк //////
     
if(strcmp(bReadstr_iz_file)==0)
       {
         
memset(bRead0sizeof(bRead));
         
summa=0;
         
ar_summ=999d2=0d3=0d4=0d5=0d6=0d7=0d8=0d9=0d10=0d11=0d12=0d13=0thum=0hum=0pir1=0knop1=0knop2=0;
         continue;
       }

     else
       { 
         
FILE *f;
         
fopen(papka"w"); 
         
fprintf(f"%s"bRead);
         
fclose(f);
         
memcpy(str_iz_filebReadsizeof(str_iz_file));  
         
memset(bRead0sizeof(bRead)); 
         
summa=0;
         
ar_summ=999d2=0d3=0d4=0d5=0d6=0d7=0d8=0d9=0d10=0d11=0d12=0d13=0;
       }
    
    } 

Зараннее благодарю.
istarik.ru

Последний раз редактировалось istarik.ru; 14.08.2015 в 01:03.
istarik.ru вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла ASPanton Общие вопросы C/C++ 2 09.10.2013 13:16
Чтение из файла Sektr63 Общие вопросы C/C++ 3 28.02.2012 23:16
Чтение из файла. Си. MAKEDON Помощь студентам 1 17.08.2009 16:42
Чтение, чтение и еще раз чтение Alex Cones Общие вопросы Delphi 3 07.06.2009 15:28
Чтение subsonic Общие вопросы Delphi 1 30.05.2008 08:06