- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 26

Thema: [ASURO] Eure Programme

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.03.2005
    Beiträge
    36

    Mein erstes Programm

    Hi Leutz,

    bin 1. neu hier, 2. eine elektronische NULL und 3. funzt mein ASURO nicht so ganz (dazu in einem anderen Thread mehr).

    Habe zum Testen (nachdem mir das mitgelieferte Testprg. nicht gefallen hat) ein eigenes Prog. geschrieben.

    Zuerst das Steuerprogramm für den PC (Console unter Windows):
    Code:
    //*****************************************************************************
    //*
    //*
    //*		ComDemo.cpp
    //*
    //*
    //*****************************************************************************
    //	
    //	Mit deisem Programm kann man eine Konsolenverbindung über die serielle 
    //	Schnittstelle mit einem Null-Modem-Kabel herstellen.
    //
    #include <conio.h>
    #include <stdio.h>
    #include <windows.h>
    #include "ComTools.h"
    
    
    #define 	COM1		0
    #define 	COM2		1
    #define 	COM3		2
    #define 	COM4		3
    
    #define 	ESC			27
    
    
    //*****************************************************************************
    //*
    //*		main
    //*
    //*****************************************************************************
    int main(int argc, char* argv[])
    {
    	int		iLen,iKey,iWait;	
    	char	inBuffer[65];
    	char	outBuffer[65];
    	
    	ComInit();
    
    	if(!ComOpen(COM1,2400,P_NONE,S_1BIT,D_8BIT))
    	{
    		printf("\nKann die Schnittstelle nicht oeffnen !\n\n");
    		return -1;
    	}	
    
    	while(1)
    	{
    		if(kbhit())							// Wurde eine Taste gedrückt
    		{
    			iKey = getch();
    
    			if(iKey == ESC)
    				break;
    			
    			if(iKey != 'f' && iKey != 'r' && iKey != 'l' && iKey != 'x' && iKey != 'o'
    				  && iKey != 'k' && iKey != '+' && iKey != '-') // kein 1-Zeichen-Befehl
    			{
    				while(_kbhit());
    				outBuffer[0] = iKey;
    				outBuffer[1] = getch();								
    			}
    			else
    			{
    				outBuffer[0] = iKey;
    				outBuffer[1] = ' ';
    			}
    			printf("%c%c\n",outBuffer[0],outBuffer[1]);
    			ComWrite(COM1,outBuffer,2);			
    		}
    		memset(inBuffer,0,65);
    		iLen = ComRead(COM1,inBuffer,64);	// Zeichen einlesen
    		if(iLen > 0)
    		{
    			inBuffer[iLen] = '\0';
    			if(inBuffer[2] == 'f') // vordere Fototransistoren
    			{
    				int val_Links = (inBuffer[3] << 8) | inBuffer[4];
    				int val_Rechts = (inBuffer[5] << 8) | inBuffer[6];
    				printf("\nFoto L: %d  R: %d\n",val_Links, val_Rechts);
    			}
    			else if(inBuffer[2] == 'o') // Odometrie
    			{
    				int val_Links = (inBuffer[3] << 8) | inBuffer[4];
    				int val_Rechts = (inBuffer[5] << 8) | inBuffer[6];
    				printf("\nOdo L: %d  R: %d\n",val_Links, val_Rechts);
    			}
    			else if(inBuffer[2] == 'p') // Schalter
    			{
    				int value = inBuffer[3];
    				char ausgabe[7] = { '-','-','-','-','-','-','\0' };
    				if(value & 1)
    					ausgabe[5] = 'X';
    				if(value & 2)
    					ausgabe[4] = 'X';
    				if(value & 4)
    					ausgabe[3] = 'X';
    				if(value & 8)
    					ausgabe[2] = 'X';
    				if(value & 16)
    					ausgabe[1] = 'X';
    				if(value & 32)
    					ausgabe[0] = 'X';
    				printf("Schalter: %s\n",ausgabe);
    			}
    			else
    				printf("%s\n",&inBuffer[2]);
    		}
    		else
    		{
    			Sleep(50);						// Wenn keine Zeichen im Buffer sind dann warten
    		}
    	}		
    	
    	ComClose(COM1);
    	ComExit();
    
    return 0;
    }
    ..und das ASURO-Progrämmsche:
    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();	
    	StatusLED(GREEN);
    	unsigned char data[65];
    	unsigned char frontLED = 0;
    	unsigned int lD[2];
    	unsigned char send[12];
    	unsigned char speed = 200;
    	unsigned char Motors[2];
    	
    	while(1)
    	{
    		SerRead(data,2,0); // auf 2 Zeichen warten
    		switch(data[0])
    		{
    			case 's':	// StatusLED				
    				if(data[1] == 'g')
    				{
    					StatusLED(GREEN);
    					SerWrite("Set StatusLED to Green\0",23);
    				}
    				if(data[1] == 'r')
    				{
    					StatusLED(RED);
    					SerWrite("Set StatusLED to Red\0",21);
    				}
    				if(data[1] == 'y')
    				{
    					StatusLED(YELLOW);
    					SerWrite("Set StatusLED to Yellow\0",24);
    				}
    				if(data[1] == 'o')
    				{
    					StatusLED(OFF);
    					SerWrite("Set StatusLED Off\0",18);
    				}
    				break;
    			case 'l':	// Front-LED
    				if(frontLED == 0)
    				{
    					SerWrite("Set FrontLED On\0",16);
    					FrontLED(ON);
    				}
    				else
    				{
    					SerWrite("Set FrontLED Off\0",17);
    					FrontLED(OFF);
    				}
    				frontLED = !frontLED;
    				break;
    			case 'f':	// vorwärts
    				SerWrite("Set Motordirection FORWARD\0",27);				
    				MotorDir(FWD, FWD);
    				break;
    			case 'r':	// rückwärts
    				SerWrite("Set Motordirection REVERSE\0",27);				
    				MotorDir(RWD, RWD);
    				break;
    			case 'g':
    				speed = data[1];
    				break;
    			case '+':
    				if(speed < 255)
    					speed += 10;
    				if(Motors[0])
    					MotorSpeed(speed,0);
    				if(Motors[1])
    					MotorSpeed(0,speed);
    				break;
    			case '-':
    				if(speed > 0)
    					speed -= 10;
    				if(Motors[0])
    					MotorSpeed(speed,0);
    				if(Motors[1])
    					MotorSpeed(0,speed);
    				break;
    			case 'm':	// Motoren
    				if(data[1] == 'l')
    				{
    					SerWrite("Set left Motor\0",15);				
    					MotorSpeed(speed,0);
    					Motors[0] = 1;
    					Motors[1] = 0;
    				}
    				if(data[1] == 'r')
    				{
    					SerWrite("Set right Motor\0",16);				
    					MotorSpeed(0,speed);
    					Motors[0] = 0;
    					Motors[1] = 1;
    				}
    				if(data[1] == 'o')
    				{
    					SerWrite("Set Motors OFF\0",15);				
    					MotorSpeed(0,0);
    					Motors[0] = 0;
    					Motors[1] = 0;
    				}				
    				break;
    			case 'b':	// Rück-LED's
    				if(data[1] == 'l')
    				{
    					SerWrite("Set left BackLED ON\0",20);				
    					BackLED(ON,OFF);
    				}
    				if(data[1] == 'r')
    				{
    					SerWrite("Set right BackLED ON\0",21);				
    					BackLED(OFF,ON);
    				}
    				if(data[1] == 'o')
    				{
    					SerWrite("Set BackLEDs OFF\0",17);				
    					BackLED(OFF,OFF);
    				}
    				break;							
    			case 'k':
    				send[0] = 'p';
    				send[1] = PollSwitch();
    				send[5] = '\0';
    				SerWrite(send,3);
    				break;
    			case 'x':
    				// Zustände senden
    				LineData(lD); // Zustände der vorderen Fototransistoren holen
    				send[0] = 'f';
    				send[1] = lD[0] >> 8;		// HighByte
    				send[2] = lD[0] & 0xFF;	// LowByte
    				send[3] = lD[1] >> 8;		// HighByte
    				send[4] = lD[1] & 0xFF;	// LowByte
    				send[5] = '\0';
    				SerWrite(send,5);
    				break;
    			case 'o': // Odometriedaten
    				// Zustände senden
    				OdometrieData(lD); // Zustände der vorderen Fototransistoren holen
    				send[0] = 'o';
    				send[1] = lD[0] >> 8;		// HighByte
    				send[2] = lD[0] & 0xFF;	// LowByte
    				send[3] = lD[1] >> 8;		// HighByte
    				send[4] = lD[1] & 0xFF;	// LowByte
    				send[5] = '\0';
    				SerWrite(send,5);
    				break;
    		}		
    	}
    	StatusLED(RED);
    	while(1);
    	return 0;
    }
    Es werden auch noch die ComTools von http://members.inode.at/anton.zechner/az/Seriell.htm Anton Zechner benötigt (sind angehängt).

    Die Console reagiert auf folgende Tasten(kombinationen):
    f = MotorDir(FWD,FWD)
    l = FrontLED(ON/OFF) 'als Switch
    r = MotorDir(RWD,RWD)
    + = MotorSpeed(+10,+10)
    - = MotorSpeed(-10,-10)
    o = OdometrieData()
    x = LineData()
    k = PollSwitch()
    mo = MotorSpeed(0,0)
    ml = MotorSpeed(n,0)
    mr = MotorSpeed(0,n)
    bo = BackLED(OFF,OFF)
    bl = BackLED(ON,OFF)
    br = BackLED(OFF,ON)
    so = StatusLED(OFF)
    sr = StatusLED(RED)
    sy = StatusLED(YELLOW)
    sg = StatusLED(GREEN)

    Daher auch eine Frage: Wie regelt ihr eine abgestimmte Kommunikation zwischen Robbie & PC???

    Viel Spass damit (auch wenn's recht popelig ist)

    Banzai
    Angehängte Dateien Angehängte Dateien

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test