RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBO 2 UCOM-IR2-X programmieren

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Banner

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

  • 7426 private projects
  • 385 public projects
  • 16180353 lines compiled
  • 58212 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1

THEMA: UCOM-IR2-X programmieren

UCOM-IR2-X programmieren 8 Jahre 4 Monate her #3440

  • mohe
  • mohes Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 9
Hallo!

Es gibt ja das Programm UComIrProg_1_1_0_7.exe für den UCOM-IR2-X. Das funktioniert auch ziemlich gut. Mich würde interessieren, wie man so eins selbst schreiben kann oder ändern kann, da ich mal versuchen will zwischen Computer und Nibo2 zu kommunizieren. Irgendjemand muss das ja programmiert haben, vielleicht kann der einem den Quellcode geben oder so.

Moritz
Der Administrator hat öffentliche Schreibrechte deaktiviert.

UCOM-IR2-X programmieren 8 Jahre 4 Monate her #3464

  • mohe
  • mohes Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 9
Ich hab es jetzt halbwegs hinbekommen:

SerialClass.h:
 
#ifndef SERIALCLASS_H_INCLUDED
#define SERIALCLASS_H_INCLUDED

#define ARDUINO_WAIT_TIME 2000

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

class Serial
{
private:
	//Serial comm handler
	HANDLE hSerial;
	//Connection status
	bool connected;
	//Get various information about the connection
	COMSTAT status;
	//Keep track of last error
	DWORD errors;
 
public:
	//Initialize Serial communication with the given COM port
	Serial(char *portName);
	//Close the connection
	~Serial();
	//Read data in a buffer, if nbChar is greater than the
	//maximum number of bytes available, it will return only the
	//bytes available. The function return -1 when nothing could
	//be read, the number of bytes actually read.
	int ReadData(char *buffer, unsigned int nbChar);
	//Writes data from a buffer through the Serial connection
	//return true on success.
	bool WriteData(char *buffer, unsigned int nbChar);
	//Check if we are actually connected
	bool IsConnected();
 
 
};
 
#endif // SERIALCLASS_H_INCLUDED

SerialClass.cpp
//
#include "SerialClass.h"

Serial::Serial(char *portName)
{
	//We're not yet connected
	this->connected = false;
 
	//Try to connect to the given port throuh CreateFile
	this->hSerial = CreateFile(portName,
		GENERIC_READ | GENERIC_WRITE,
		0,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
 
	//Check if the connection was successfull
	if (this->hSerial == INVALID_HANDLE_VALUE)
	{
		//If not success full display an Error
		if (GetLastError() == ERROR_FILE_NOT_FOUND) {
 
			//Print Error if neccessary
			printf("ERROR: Handle was not attached. Reason: %s not available.\n", portName);
 
		}
		else
		{
			printf("ERROR!!!");
		}
	}
	else
	{
		//If connected we try to set the comm parameters
		DCB dcbSerialParams = { 0 };
 
		//Try to get the current
		if (!GetCommState(this->hSerial, &dcbSerialParams))
		{
			//If impossible, show an error
			printf("failed to get current serial parameters!");
		}
		else
		{
			//Define serial connection parameters for the arduino board
			dcbSerialParams.BaudRate = CBR_9600;
			dcbSerialParams.ByteSize = 8;
			dcbSerialParams.StopBits = ONESTOPBIT;
			dcbSerialParams.Parity = ODDPARITY;
			//Setting the DTR to Control_Enable ensures that the Arduino is properly
			//reset upon establishing a connection
			dcbSerialParams.fDtrControl = DTR_CONTROL_ENABLE;
 
			//Set the parameters and check for their proper application
			if (!SetCommState(hSerial, &dcbSerialParams))
			{
				printf("ALERT: Could not set Serial Port parameters");
			}
			else
			{
				//If everything went fine we're connected
				this->connected = true;
				//Flush any remaining characters in the buffers 
				PurgeComm(this->hSerial, PURGE_RXCLEAR | PURGE_TXCLEAR);
				//We wait 2s as the arduino board will be reseting
				Sleep(ARDUINO_WAIT_TIME);
			}
		}
	}
 
}
 
Serial::~Serial()
{
	//Check if we are connected before trying to disconnect
	if (this->connected)
	{
		//We're no longer connected
		this->connected = false;
		//Close the serial handler
		CloseHandle(this->hSerial);
	}
}
 
int Serial::ReadData(char *buffer, unsigned int nbChar)
{
	//Number of bytes we'll have read
	DWORD bytesRead;
	//Number of bytes we'll really ask to read
	unsigned int toRead;
 
	//Use the ClearCommError function to get status info on the Serial port
	ClearCommError(this->hSerial, &this->errors, &this->status);
 
	//Check if there is something to read
	if (this->status.cbInQue>0)
	{
		//If there is we check if there is enough data to read the required number
		//of characters, if not we'll read only the available characters to prevent
		//locking of the application.
		if (this->status.cbInQue>nbChar)
		{
			toRead = nbChar;
		}
		else
		{
			toRead = this->status.cbInQue;
		}
 
		//Try to read the require number of chars, and return the number of read bytes on success
		if (ReadFile(this->hSerial, buffer, toRead, &bytesRead, NULL))
		{
			return bytesRead;
		}
 
	}
 
	//If nothing has been read, or that an error was detected return 0
	return 0;
 
}
 
 
bool Serial::WriteData(char *buffer, unsigned int nbChar)
{
	DWORD bytesSend;
 
	//Try to write the buffer on the Serial port
	if (!WriteFile(this->hSerial, (void *)buffer, nbChar, &bytesSend, 0))
	{
		//In case it don't work get comm error and return false
		ClearCommError(this->hSerial, &this->errors, &this->status);
 
		return false;
	}
	else
		return true;
}
 
bool Serial::IsConnected()
{
	//Simply return the connection status
	return this->connected;
}

Main:
#include <stdio.h>
#include <tchar.h>
#include "SerialClass.h"	// Library described above
#include <string>
#include <iostream>
#include <bitset>
#include <algorithm>

// cl main.cpp Serial.cpp /EHsc
// main.exe
 
int main()
{
	Serial* SP = new Serial("COM1");
	if (SP->IsConnected())
		printf("Connected!\n");
 
	while (SP->IsConnected())
	{
		SP->WriteData("*BbDbBbBbBbBbBbBbBbBbBdD~*\n", sizeof("*BbDbBbBbBbBbBbBbBbBbBdD~*\n"));
		readResult = SP->ReadData(incomingData, dataLength);
		incomingData[readResult] = 0;
		std::cout << incomingData;
	}
	return 0;
}

Hab ich aus den Internet, weiß die Quelle leider nicht mehr.

Hat soweit glaube ich funktioniert (Code etwas verändert). Jetzt würde ich gerne wissen, wie man z.B. *BbDbBbBbBbBbBbBbBbBbBdD~* in das Gerät und den Befehl (und umgekehrt) umwandelt. Z.B. Befehl: Standby(12); Gerät: CD-Player(20) = *BbBbBbDdDbBbBbBdBdDbB~*
Gibt es da eine Funktion?

Moritz
Der Administrator hat öffentliche Schreibrechte deaktiviert.

UCOM-IR2-X programmieren 8 Jahre 4 Monate her #3503

  • workwind
  • workwinds Avatar
  • OFFLINE
  • Administrator
  • Beiträge: 573
Ich werde mal nach der Dekodierroutine suchen...
Der Administrator hat öffentliche Schreibrechte deaktiviert.

UCOM-IR2-X programmieren 8 Jahre 3 Monate her #3558

  • mohe
  • mohes Avatar
  • OFFLINE
  • Junior Boarder
  • Beiträge: 9
Es wäre cool, wenn du sie finden würdest, da meine nicht funktioniert hat.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

UCOM-IR2-X programmieren 8 Jahre 3 Monate her #3559

Der Administrator hat öffentliche Schreibrechte deaktiviert.
  • Seite:
  • 1
Ladezeit der Seite: 0.151 Sekunden

Werbung