Всем привет. Вот появился очередной вопрос. Я сделал робота у которого 1 фоторезистор. когда на фоторезистор попадает свет робот едет вперёд, когда света нет робот разворачивается. Вот довольно просто все. Теперь хочу немного одушевить его. Итак идея вот в чем. Значит к роботу крепится голова, в глазах стоят 3 светодиода, желтый, зеленый и красный. В программу надо добавить некую штуку, например "а" значение которой при включении равно 40. Если на фоторезистор попадает свет то каждые 300 миллисекунд к нашему "а" прибавляется 1. если свет не попадает то каждые 300 миллисекунд от "а" наоборот отнимается 1. В пределах значений от 1 до 30 должна гореть красная лампочка, от 31 до 60 должна гореть желтая лампочка, а в предела от 61 до 99 должна гореть зеленая лампочка. если значение "а" больше 99 то оно сбрасывается на 75 и так все время пока робот работает. Так у нас получается настроение робота, т.е. чем больше ты с ним играешь тем о него настроение лучше. Вроде все. надеюсь объяснил понятно.
Вот нынешняя программа робота.
/*****************************************************
Chip type : ATtiny2313
Clock frequency : 4,433619 MHz
Memory model : Tiny
External SRAM size : 0
Data Stack size : 32
*****************************************************/
#include <tiny2313.h>
#include <stdlib.h>
#include <delay.h>
#define a
void wait0 (void)
{
TCNT0=0;
while (TCNT0<22) {};
}
// Возможные режимы движения
enum {STOP, F, B};
//------------------------------ -------------------------------- ----------------
// Включение комбинации моторов для движения в заданном направлении
//------------------------------ -------------------------------- ----------------
void go(unsigned char direction){
switch (direction) {
case STOP:
PORTB.0=0;
PORTB.1=0;
break;
case F:
PORTB.0=1;
PORTB.1=0;
break;
case B:
PORTB.0=0;
PORTB.1=1;
break;
}
}
unsigned char walk(void){
while(PIND.0==0){
if(PIND.0==0) go(F);
wait0();
if(PIND.0==1) go(B);
wait0();
}
return(0);
}
void main(void)
{
// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=P State1=P State0=P
PORTA=0x07;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=Out
// State7=P State6=P State5=P State4=P State3=P State2=P State1=0 State0=0
PORTB=0xFC;
DDRB=0x03;
// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTD=0x7F;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 4,330 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x16;
OCR0A=0x00;
OCR0B=0x00;
while(1) walk();
}(Отредактировано автором: 01 Июня, 2010 - 14:00:47) |