#define LED1_OFF PORTF &= ~_BV(PF6)
#define LED1_ON PORTF|=_BV(PF6);
#define LED2_OFF PORTF &= ~_BV(PF7)
#define LED2_ON PORTF|=_BV(PF7);
#define LED3_OFF PORTA &= ~_BV(PA0)
#define LED3_ON PORTA|=_BV(PA0);
#define LED4_OFF PORTA &= ~_BV(PA1)
#define LED4_ON PORTA|=_BV(PA1);
#define LED5_OFF PORTC &= ~_BV(PC6)
#define LED5_ON PORTC|=_BV(PC6);
#define LED6_OFF PORTC &= ~_BV(PC5)
#define LED6_ON PORTC|=_BV(PC5);
#define LED7_OFF PORTC &= ~_BV(PC4)
#define LED7_ON PORTC|=_BV(PC4);
#define LED8_OFF PORTC &= ~_BV(PC3)
#define LED8_ON PORTC|=_BV(PC3);
#define LED9_OFF PORTC &= ~_BV(PC2)
#define LED9_ON PORTC|=_BV(PC2);
#define LED10_OFF PORTG &= ~_BV(PG3)
#define LED10_ON PORTG|=_BV(PG3);
#define LED11_OFF PORTB &= ~_BV(PB7)
#define LED11_ON PORTB|=_BV(PB7);
#define LED12_OFF PORTE &= ~_BV(PE1)
#define LED12_ON PORTE|=_BV(PE1);
#define LED13_OFF PORTE &= ~_BV(PE0)
#define LED13_ON PORTE|=_BV(PE0);
#define LED14_OFF PORTF &= ~_BV(PF0)
#define LED14_ON PORTF|=_BV(PF0);
#define LED15_OFF PORTF &= ~_BV(PF1)
#define LED15_ON PORTF|=_BV(PF1);
#define F_CPU 16000000L
#define S40P (!(PINE & _BV(4)))
#define S40LB (!(PINE & _BV(2)))
#define S40LP (!(PINE & _BV(3)))
#define S40T (!(PINE & _BV(6)))
#define S40PP (!(PINB & _BV(0)))
#define S40PB (!(PINB & _BV(4)))
#define CBLLP (PINE & _BV(7))
#define CBLPP (PINE & _BV(5))
#define startppp (!(PINF & _BV(2)))
#define plewy (!(PINF & _BV(3)))
#define pprawy (!(PINF & _BV(5)))
#define psrodkowy (!(PINF & _BV(4)))
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <inttypes.h>
void ustaw_porty()
{
DDRA = 0b00000111;
DDRB = 0b11101110;
DDRC = 0b01110011;
DDRD = 0b11110011;
DDRE = 0b00000000;
DDRF = 0b11000011;
DDRG = 0b00011011;
PORTA = 0b00110000;
PORTB = 0b00010001;
PORTC = 0b10000011;
PORTD = 0b11110000;
PORTE = 0b01011100;
PORTF = 0b00111100;
PORTG = 0b00000111;
}
void ustaw_ledy()
{
DDRA|=_BV(PA0) |_BV(PA1);
DDRF|=_BV(PF0)|_BV(PF1)|_BV(PF6) |_BV(PF7);
DDRC|=_BV(PC6) |_BV(PC5)|_BV(PC4)|_BV(PC3)|_BV(PC2);
DDRG|=_BV(PG3);
DDRB|=_BV(PB7);
DDRE|=_BV(PE1)|_BV(PE0);
}
void ustaw_int()
{
EIMSK = 0;
EICRB|=_BV(ISC70)|_BV(ISC71)|_BV(ISC51)|_BV(ISC50);
EIMSK|=_BV(INT7)|_BV(INT5);
}
/*
ISR (INT7_vect)
{
LED13_ON;
_delay_ms(100);
LED13_OFF;
LED14_ON;
_delay_ms(100);
LED14_OFF;
LED15_ON;
_delay_ms(100);
LED15_OFF;
EIFR|=_BV(INTF7);
}
ISR (INT5_vect)
{
LED10_ON;
_delay_ms(100);
LED10_OFF;
LED9_ON;
_delay_ms(100);
LED9_OFF;
LED8_ON;
_delay_ms(100);
LED8_OFF;
EIFR|=_BV(INTF5);
}*/
void przod(int a,int b)
{
OCR1A = a;
OCR1B = b;
PORTB&=~_BV(PB1);
PORTB|=_BV(PB2);
PORTB&=~_BV(PB3);
PORTA|=_BV(PA2);
}
void tyl(int a,int b)
{
OCR1A = a;
OCR1B = b;
PORTB|=_BV(PB1);
PORTB&=~_BV(PB2);
PORTB|=_BV(PB3);
PORTA&=~_BV(PA2);
}
void lewo(int a,int b)
{
OCR1A = a;
OCR1B = b;
PORTB|=_BV(PB1);
PORTB&=~_BV(PB2);
PORTB&=~_BV(PB3);
PORTA|=_BV(PA2);
}
void prawo(int a,int b)
{
OCR1A = a;
OCR1B = b;
PORTB&=~_BV(PB1);
PORTB|=_BV(PB2);
PORTB|=_BV(PB3);
PORTA&=~_BV(PA2);
}
void disp1()
{
PORTC|=_BV(PC1);
PORTC|=_BV(PC0);
PORTG|=_BV(PG1);
PORTG&=~_BV(PG0);
PORTD|=_BV(PD4);
PORTD|=_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);
}
void disp2()
{
PORTC&=~_BV(PC1);
PORTC|=_BV(PC0);
PORTG&=~_BV(PG1);
PORTG&=~_BV(PG0);
PORTD&=~_BV(PD4);
PORTD&=~_BV(PD5);
PORTD|=_BV(PD6);
PORTD|=_BV(PD7);
}
void disp3()
{
PORTC&=~_BV(PC1);
PORTC|=_BV(PC0);
PORTG&=~_BV(PG1);
PORTG&=~_BV(PG0);
PORTD|=_BV(PD4);
PORTD&=~_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);
}
void disp4()
{
PORTC&=~_BV(PC1);
PORTC&=~_BV(PC0);
PORTG|=_BV(PG1);
PORTG|=_BV(PG0);
PORTD|=_BV(PD4);
PORTD|=_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);
}
void disp5()
{
PORTC&=~_BV(PC1);
PORTC&=~_BV(PC0);
PORTG&=~_BV(PG1);
PORTG|=_BV(PG0);
PORTD|=_BV(PD4);
PORTD&=~_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);
}
void ustaw_pwm()
{
TCCR1A |= ((1 << COM1A1) | (1 << COM1B1)| (1 << WGM10));
TCCR1B |= ((1 << WGM12) | (1 << COM1B1) | (1 << CS12));
DDRB |= ((1<<PB5)|(1<<PB6)); // ustawienie portow wyjsciowych dla sygnalu pwm silnikow 1 i 2 (pb5 - oc1a , pb6 oc1b)
TCNT1=0;
}
int main(void)
{
//ustaw_int();
ustaw_pwm();
ustaw_porty();
//ustaw_ledy();
_delay_ms(100);
//sei();
int v_nor=40;
int v_skr=90;
int v_max=255;
int pp=0,ps=0,pl=0;
int time = 0;
int x=100,y=40,z=40;
while(1)
{
if (pprawy)
{pp++;
PORTA ^= _BV(PA0);
// PORTG|=_BV(PG4);
_delay_ms(300);
// PORTG&=~_BV(PG4);
if (pp==6){
PORTC&=~_BV(PC0);
PORTG&=~_BV(PG1);
PORTG|=_BV(PG0);
PORTD|=_BV(PD4);
PORTD&=~_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);}
}
if (plewy)
{pl++;
PORTC ^= _BV(PC6);
// PORTG|=_BV(PG4);
_delay_ms(300);
// PORTG&=~_BV(PG4);
if (pl==6){
PORTC&=~_BV(PC0);
PORTG&=~_BV(PG1);
PORTG|=_BV(PG0);
PORTD|=_BV(PD4);
PORTD&=~_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);}
}
if (psrodkowy)
{ps++;
v_nor=30;
PORTA ^= _BV(PA1);
//PORTG|=_BV(PG4);
_delay_ms(300);
// PORTG&=~_BV(PG4);
}
if (bit_is_set(PIND,PD3)){goto start2;}
LED1_OFF;
if(bit_is_clear(PINA,PA5))
{v_nor=30;}
if (startppp)
{LED1_ON;
goto start1;
}
}
start1:;
PORTC&=~_BV(PC1);
PORTC&=~_BV(PC0);
PORTG&=~_BV(PG1);
PORTG|=_BV(PG0);
PORTD|=_BV(PD4);
PORTD&=~_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);
_delay_ms(1000-time);
if (startppp)
{v_nor=30;
PORTA ^= _BV(PA1);}
PORTC&=~_BV(PC1);
PORTC&=~_BV(PC0);
PORTG|=_BV(PG1);
PORTG&=~_BV(PG0);
PORTD|=_BV(PD4);
PORTD|=_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);
_delay_ms(1000-time);
PORTC&=~_BV(PC1);
PORTC|=_BV(PC0);
PORTG&=~_BV(PG1);
PORTG&=~_BV(PG0);
PORTD|=_BV(PD4);
PORTD&=~_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);
_delay_ms(1000-time);
PORTC&=~_BV(PC1);
PORTC|=_BV(PC0);
PORTG&=~_BV(PG1);
PORTG&=~_BV(PG0);
PORTD&=~_BV(PD4);
PORTD&=~_BV(PD5);
PORTD|=_BV(PD6);
PORTD|=_BV(PD7);
_delay_ms(1000-time);
PORTC|=_BV(PC1);
PORTC|=_BV(PC0);
PORTG|=_BV(PG1);
PORTG&=~_BV(PG0);
PORTD|=_BV(PD4);
PORTD|=_BV(PD5);
PORTD&=~_BV(PD6);
PORTD|=_BV(PD7);
_delay_ms(1000-time);
PORTC|=_BV(PC1);
PORTC|=_BV(PC0);
PORTG|=_BV(PG1);
PORTG|=_BV(PG0);
PORTD|=_BV(PD4);
PORTD|=_BV(PD5);
PORTD|=_BV(PD6);
PORTD|=_BV(PD7);
// if(bit_is_clear(PINC,PC7))
// {_delay_ms(5000-time);}
// else
// {while(bit_is_clear(PINE,PE1)){}}
//mc33926
start2:;
if (pp==1)
{
przod(255,255);
_delay_ms(70);
}
if (pp==2)
{
prawo(255,255);
_delay_ms(200);
// przod(255,255);
// _delay_ms(60);
}
if (pp==3)
{
prawo(255,255);
_delay_ms(80);
przod(255,255);
_delay_ms(60);
}
if (pp==4)
{
prawo(255,255);
_delay_ms(130);
przod(255,255);
_delay_ms(70);
}
if (pp==5)
{
lewo(255,255);
_delay_ms(170);
przod(0,255);
_delay_ms(100);
}
if (pp==6)