p1

PGSdisplay.cpp

Committer:
markoc
Date:
2020-02-24
Revision:
6:19e7658575fe
Parent:
5:ecaf089d1c8a
Child:
7:be56cf51685d

File content as of revision 6:19e7658575fe:


//#include "mbed.h"
//#include "platform/mbed_thread.h"

#include "mbed.h"

#include "PGSdisplay.h"

#define DISP_ADR   40

DigitalOut tast(PTB19,0);
////RawSerial rs485(PTC17,PTC16);
RawSerial rs485(PTD3,PTD2);


void ev(int)
{
    tast=0;
}

uint8_t rs[100];
void init_disp( void)
{
    rs485.format(8,RawSerial::Even,1);  
    while(rs485.readable())
    {
        rs485.read(rs,1,NULL);
    }
    putOnDisp("elcom", 3);
    int i =0;
    //while(rs485.readable()==0);
    wait(0.5);
    if(rs485.readable())
    {
        
        rs485.read(rs+i,1,NULL);
        i++;
    }
    printf("ODGOVOR: %X - %d\n\r",rs[0],i);
    //int i=0;
//    
//    printf("%d\n\r",rs485.readable());
//    if(rs485.readable())
//    {
//        printf("\n\rRECEIVE: ");   
//        while(rs485.readable())
//        {
//            rs[i++] = rs485.getc();
//        }
//        printf("%X:  RECEIVED %d: \n\r",rs[0], i);   
//    }
}

unsigned char buf_tel[100] = {0x71,0x00,0x0D,0x71,0x43,DISP_ADR,0x1B,0x4A,0x01,0x01,  /*0x1b,0x45,0x1,*/  0x1B,0x43,1,0x33,0xD5,0x16};
#define NO_BEFORE_DATA 13
#define NO_WITH_DATA (NO_BEFORE_DATA + strlen(s))

void putOnDisp( char *s, char boja)
{
    int ubb = NO_BEFORE_DATA+strlen(s)+1+1-4-2; // ubb = ukupan broj bajtova
    buf_tel[NO_BEFORE_DATA-1]=boja;
    memcpy(buf_tel+NO_BEFORE_DATA, s, strlen(s)+2);

    char suma=0;
    for(int i = 4; i < NO_WITH_DATA; i++) {
        suma +=buf_tel[i];
    }

    buf_tel[NO_WITH_DATA] = suma;
    buf_tel[NO_WITH_DATA+1] = 22;
    buf_tel[1]=ubb>>8;
    buf_tel[2]=ubb;


    tast=1;
    rs485.write(buf_tel, NO_WITH_DATA+2+2,ev);
    
}

void putOnDispNo(int broj, char boja)
{
    char s[10];
    sprintf( s, "%d", broj);
    putOnDisp( s, boja);
}


void slanjefun()
{

    int j=0;


    while (true) {
//       printf("disp thred %d\n\r",j);
        if(j >10 && j<15 ) putOnDisp((char*)"des",1);
        else putOnDispNo(j,1);
        j++;
        thread_sleep_for(1000);
    }
}


char * extract_string( char delimiter, char *ulazni_str, int n_str )
{
    int br_str=0;
    char *ret_str=ulazni_str;
    char* ptr = ulazni_str;

    while(*ptr) {
        if(*ptr == delimiter) {
            *ptr = 0;
            if( br_str == n_str )   return ret_str;
            else {
                br_str++;
                ret_str = ptr + 1;
            }
        }
        ptr++;
    }
    if( br_str == n_str )   return ret_str;
    return NULL;
}