Microsoft Visual C++ 6.0

Tesina

Stepper

Darlington

Visual C++

C Builder

Assembler

Alim. Switching

La Robotica

Come primo sviluppo del software di pilotaggio del robottino ho usato il compilatore di C++ visuale fornito dalla Microsoft

Interfaccia

Librerie

Listato

Suggerimenti

   
 

Libreria "NTPort Library"

Per interfacciare il programma con la porta paralla ho usato delle librerie che forniscono alcune funzioni per modificare lo stato della porta centronix, le funzioni sono:

Outport( indirizzo , valore );

Questa funzione scrive all' indirizzo x un valore (se non specificato il tipo, binario) e si conclude.

Inport( indirizzo );

Questa funzione invece legge lo stato della porta nel momento in cui viene chiamata.

 
 
Top
 

Suggerimenti

 
 
Top
 

Listato

#include "stdafx.h"
#include "PortTest.h"
#include "PortTestDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
int delay;
class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA

// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL

// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPortTestDlg dialog

CPortTestDlg::CPortTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPortTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPortTestDlg)
m_velo = 2;
m_intDurata = 2;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CPortTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPortTestDlg)
DDX_Control(pDX, IDC_LIST1, m_List1);
DDX_Slider(pDX, IDC_SLIDER1, m_velo);
DDX_Text(pDX, IDC_VELOCITA, m_velovi);
DDV_MinMaxInt(pDX, m_velovi, 0, 1000);
DDX_Text(pDX, IDC_DURATA, m_intDurata);
DDV_MinMaxInt(pDX, m_intDurata, 1, 1000);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPortTestDlg, CDialog)
//{{AFX_MSG_MAP(CPortTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_READ, OnAvanti)
ON_BN_CLICKED(IDC_WRITE, OnIndietro)
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, OnReleasedcaptureSlider1)
//ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
ON_BN_CLICKED(IDC_BUTTON2, Onzipp1)
ON_BN_CLICKED(IDC_BUTTON3, Onzop1)
ON_BN_CLICKED(IDC_BUTasx, OnBUTasx)
ON_BN_CLICKED(IDC_BUTa, OnBUTa)
ON_BN_CLICKED(IDC_BUTadx, OnBUTadx)
ON_BN_CLICKED(IDC_BUTsx, OnBUTsx)
ON_BN_CLICKED(IDC_BUTalt, OnBUTalt)
ON_BN_CLICKED(IDC_BUTdx, OnBUTdx)
ON_BN_CLICKED(IDC_BUTisx, OnBUTisx)
ON_BN_CLICKED(IDC_BUTi, OnBUTi)
ON_BN_CLICKED(IDC_BUTidx, OnBUTidx)
ON_BN_CLICKED(IDC_BUTstop, OnBUTstop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPortTestDlg message handlers

BOOL CPortTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here
Outport(0x37a,1);
// After register NTPort Library,
// place your registration information here.
LicenseInfo("ADG", 980229596);

m_intDurata = 15;
m_velo = 30;
m_velovi = 30;
UpdateData(FALSE);

GetDlgItem(IDC_RADIO1)->SendMessage(BM_SETCHECK, BST_CHECKED);

return TRUE; // return TRUE unless you set the focus to a control
}

void CPortTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}

// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.

void CPortTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}

// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CPortTestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}

void CPortTestDlg::OnAvanti() //*******************************************************
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

if(GetDlgItem(IDC_DRITTOBUT)->SendMessage(BM_GETCHECK))
{

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x5a);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa5);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);

Outport(0x378,0);
Outport(0x37a,0);
}
else if(GetDlgItem(IDC_SXBUT)->SendMessage(BM_GETCHECK))
{
do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x55);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xaa);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);

Outport(0x378,0);
}
else
{
do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xaa);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x55);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}

CString s;
s.Format("%x", velocita);
CString s2;
s2.Format("%x", dur);

m_List1.AddString("AVANTI " + m_intDurata);
m_List1.AddString(" Velocità " + s);

char sError[255];
GetLastState(sError);
m_List1.SetCurSel(m_List1.AddString(sError));
}

void CPortTestDlg::OnIndietro() //*******************************************************
{
// long velocita;
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
//sscanf(m_velo, "%x", &velocita);
velocita = m_velo;

if(GetDlgItem(IDC_DRITTOBUT)->SendMessage(BM_GETCHECK))
{
do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa5);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x5a);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);

Outport(0x378,0);

}
else if(GetDlgItem(IDC_SXBUT)->SendMessage(BM_GETCHECK))
{
do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x55);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xaa);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}
else
{
do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xaa);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x55);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);

Outport(0x378,0);
Outport(0x37a,0);
}

CString s;
s.Format("%lX", velocita);

//m_List1.AddString("INDIETRO" + m_sAddress + ", 0x" + velocita);

char sError[255];
GetLastState(sError);
m_List1.SetCurSel(m_List1.AddString(sError));

}


void CPortTestDlg::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult)
{
UpdateData(TRUE);

m_velovi = m_velo;

UpdateData(FALSE);

//*pResult = 0;
}

void CPortTestDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
}

void CPortTestDlg::Onzipp1() // ZIG ZAG
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x9);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x5);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x6);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa);/////////////
Sleep(velocita);

ie++;

}while(ie!=5);


int cont = 0;
do{
ie = 0;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x90);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa0);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x60);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x50);/////////////
Sleep(velocita);

ie++;

}while(ia!=velocita);
}
ie++;
}while(ie!=8);

ie = 0;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x9);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x5);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x6);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa);/////////////
Sleep(velocita);

ie++;

}while(ie!=8);

cont++;

}while(cont != dur);
}

void CPortTestDlg::Onzop1()
{
Outport(0x37a,0x0);
}

void CPortTestDlg::OnBUTasx()
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x90);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa0);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x60);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x50);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}

void CPortTestDlg::OnBUTa()
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa5);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x5a);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}

void CPortTestDlg::OnBUTadx()
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x9);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x5);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x6);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}

void CPortTestDlg::OnBUTsx()
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xaa);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x55);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}

void CPortTestDlg::OnBUTalt()
{
Outport(0x37a,1);
Outport(0x378,0x0);
Outport(0x37a,0);
}

void CPortTestDlg::OnBUTdx()
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x55);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xaa);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}

void CPortTestDlg::OnBUTisx()
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x9);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x6);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x5);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}

void CPortTestDlg::OnBUTi()
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x99);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x5a);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x66);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa5);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}

void CPortTestDlg::OnBUTidx()
{
int velocita,dur,ie=0,ia=0;

UpdateData(TRUE);

dur = m_intDurata;
velocita = m_velo;

do{
Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x90);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x50);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0x60);/////////////
Sleep(velocita);

Outport(0x37a,0);
Outport(0x37a,1);
Outport(0x378,0xa0);/////////////
Sleep(velocita);

ie++;

}while(ie!=dur);
}

void CPortTestDlg::OnBUTstop()
{
Outport(0x37a,0);
Outport(0x378,0x0);
Outport(0x37a,1);
}

 
 
Top

Alessandro del Gallo