Difference between revisions of "U23 2007/MateCrew"

From C4 Wiki
Jump to: navigation, search
(LED-Dimmer)
Line 1: Line 1:
 +
==avr-portremote==
 +
 +
test:
 +
#include <string.h>
 +
 +
#include "../uip/uip.h"
 +
#include "../debug.h"
 +
#include "fnord.h"
 +
 +
struct fnord_command{
 +
 +
uint8_t ctype;
 +
uint8_t ioport;
 +
uint8_t data;
 +
 +
} incoming_command;
 +
 +
void init_fnord(void){
 +
 +
uip_listen(HTONS(FNORD_PORT));
 +
 +
}
 +
 +
 +
void net_add_port(){
 +
 +
cfg.options.io_ddr[(incoming_command.ioport)] |= incoming_command.data;
 +
cfg.options.io[(incoming_command.ioport)] |= incoming_command.data;
 +
 +
}
 +
 +
void net_sub_port(){
 +
 +
cfg.options.io[(incoming_command.ioport)] &= ~(incoming_command.data);
 +
 +
}
 +
 +
void net_get_port(){
 +
 +
((uint8_t *)uip_appdata)[0]=NET_GET_PORT;
 +
((uint8_t *)uip_appdata)[1]=incoming_command.ioport;
 +
((uint8_t *)uip_appdata)[2]=cfg.options.io[(incoming_command.ioport)];
 +
((uint8_t *)uip_appdata)[3]='\0';
 +
 +
uip_send(uip_appdata,4);
 +
 +
}
 +
 +
void net_set_port(){
 +
cfg.options.io[(incoming_command.ioport)] = incoming_command.data;
 +
}
 +
 +
void handle_fnord(void) {
 +
 +
uint8_t logged_in=0;
 +
 +
if(uip_connected())
 +
debug_print("New client connected\n");
 +
 +
if(uip_newdata()) {
 +
((uint8_t *)uip_appdata)[uip_datalen()] = 0;
 +
 +
 +
uint8_t offset=0;
 +
char password[uip_len];
 +
 +
for(offset;((uint8_t *)uip_appdata)[offset]!=' ' && offset<uip_len;offset++){
 +
password[offset]=((uint8_t *)uip_appdata)[offset];
 +
}
 +
 +
password[offset]='\0';
 +
 +
debug_printf("Password is: '%s', user entered: '%s' \n",FNORD_PASS,password);
 +
 +
if(!(strcmp(password,FNORD_PASS)))
 +
logged_in=1;
 +
else
 +
logged_in=0;
 +
 +
if(logged_in){
 +
debug_print("Password correct, logged in!\n\n");
 +
 +
incoming_command.ctype=((uint8_t *)uip_appdata)[++offset];
 +
incoming_command.ioport=((uint8_t *)uip_appdata)[++offset];
 +
incoming_command.data=((uint8_t *)uip_appdata)[++offset];
 +
 +
debug_print("New data recieved:\n");
 +
debug_printf("ctype: %i\n",incoming_command.ctype);
 +
debug_printf("ioport: %i\n",incoming_command.ioport);
 +
debug_printf("data: %i\n\n\n",incoming_command.data);
 +
 +
switch(incoming_command.ctype){
 +
case NET_ADD_PORT: net_add_port();
 +
  break;
 +
case NET_SUB_PORT: net_sub_port();
 +
  break;
 +
case NET_GET_PORT: net_get_port();
 +
  break;
 +
case NET_SET_PORT: net_set_port();
 +
  break;
 +
}
 +
}
 +
else
 +
debug_print("Incorrect password!\n\n\n");
 +
}
 +
 +
}
 +
 +
 +
 
==LED-Dimmer==
 
==LED-Dimmer==
 
Für unseren Dimmer für LEDs benutzen wir insgesamt 3 Funktionen:  
 
Für unseren Dimmer für LEDs benutzen wir insgesamt 3 Funktionen:  

Revision as of 21:30, 4 June 2007

avr-portremote

test:

#include <string.h>

#include "../uip/uip.h"
#include "../debug.h"
#include "fnord.h"

struct fnord_command{

	uint8_t ctype;
	uint8_t ioport;
	uint8_t data;

} incoming_command;

void init_fnord(void){

	uip_listen(HTONS(FNORD_PORT));

}


void net_add_port(){
	
	cfg.options.io_ddr[(incoming_command.ioport)] |= incoming_command.data; 
	cfg.options.io[(incoming_command.ioport)] |= incoming_command.data; 

}

void net_sub_port(){
	
	cfg.options.io[(incoming_command.ioport)] &= ~(incoming_command.data); 

}

void net_get_port(){
	
	((uint8_t *)uip_appdata)[0]=NET_GET_PORT;
	((uint8_t *)uip_appdata)[1]=incoming_command.ioport;
	((uint8_t *)uip_appdata)[2]=cfg.options.io[(incoming_command.ioport)];
	((uint8_t *)uip_appdata)[3]='\0';
	
	uip_send(uip_appdata,4);

}

void net_set_port(){
	cfg.options.io[(incoming_command.ioport)] = incoming_command.data;
}

void handle_fnord(void) {

	uint8_t logged_in=0;
	
	if(uip_connected())
		debug_print("New client connected\n");
		
	if(uip_newdata()) {
		((uint8_t *)uip_appdata)[uip_datalen()] = 0;
		
		
		uint8_t offset=0;
		char password[uip_len];
		
		for(offset;((uint8_t *)uip_appdata)[offset]!=' ' && offset<uip_len;offset++){
				password[offset]=((uint8_t *)uip_appdata)[offset];	
		}
		
		password[offset]='\0';
		
		debug_printf("Password is: '%s', user entered: '%s' \n",FNORD_PASS,password);
		
		if(!(strcmp(password,FNORD_PASS)))
			logged_in=1;
		else
			logged_in=0;
			
		if(logged_in){
			debug_print("Password correct, logged in!\n\n");
			
			incoming_command.ctype=((uint8_t *)uip_appdata)[++offset];
			incoming_command.ioport=((uint8_t *)uip_appdata)[++offset];
			incoming_command.data=((uint8_t *)uip_appdata)[++offset];
			
			debug_print("New data recieved:\n");
			debug_printf("ctype: %i\n",incoming_command.ctype);
			debug_printf("ioport: %i\n",incoming_command.ioport);
			debug_printf("data: %i\n\n\n",incoming_command.data);
			
			switch(incoming_command.ctype){
				case NET_ADD_PORT: net_add_port();
					  break;
				case NET_SUB_PORT: net_sub_port();
					  break;
				case NET_GET_PORT: net_get_port(); 	
					  break;
				case NET_SET_PORT: net_set_port();
					  break;
			}
		}
		else
			debug_print("Incorrect password!\n\n\n");
	}

}


LED-Dimmer

Für unseren Dimmer für LEDs benutzen wir insgesamt 3 Funktionen:

  • Die Main mit einer Endlosschleife für ewiges hell und dunkel Dimmen durch Aufruf von den andern Beiden Funktionen
  • Die Funktion my_wait(uint32_t time), welche einfach wartet
  • Die Funktion dim(uint8_t ratio), welche für den schnellen Ein-/Ausschaltvorgang der LEDs zuständig ist

Die Main:

 #include <avr/io.h>
 #include <util/delay.h>
 #define F_CPU 2000000000L

 void my_wait(uint32_t);
 void dim(uint8_t); 
 int main(){	
   DDRA=0xff;
 
   // LED ausschalten
   PORTA=0;
   uint16_t i=0;    
   PORTA|=0x02;
 
   //Die Endlosschleife
   for(;;){
     for(i=0;i<0xfff;i++){
 
       // ein bisschen warten
       my_wait(1);
 
       // ein- und ausschalten
       // je größer i wird desto größer wird auch der Quotient der an bla übergeben wird
       // dadurch verändert sich auch der zeitliche Abstand zwischen dem Ein- und Ausschalten
       // wodurch die LED wiederum heller oder dunkler erscheint
       dim(i/0xf);		
     }
   }
   PORTA|=0x03;	
   return 0;
 }

Die Wait:

 void my_wait(uint32_t time)
 {	
   uint32_t i=0;
   for(i;i<(time);i++)
 
   //vordefinierte Funktion welche einen Leerlauf in Dauer von n Milisekunden auslöst
   _delay_ms(1);
 }

Die bla:

 void dim(uint8_t ratio){
   uint32_t i=0;	
 
   // LED anschalten
   PORTA|=0x01;
   for(i;i<ratio;i++){}
 
   // LED ausschalten
   PORTA&=~0x01;
   for(i=ratio;i<255;i++){}
 }

Project

Team

  • Scout
  • F3lix
  • Toby