Commit 17cc306f895abc9c04724e1a86a30ef2f654fef8
1 parent
d2a71b92
Rev 1.0
Can send and recieve data properly
Showing
1 changed file
with
58 additions
and
24 deletions
Show diff stats
1 | #include <avr/io.h> | 1 | #include <avr/io.h> |
2 | #include <util/delay.h> | 2 | #include <util/delay.h> |
3 | 3 | ||
4 | -#define CPU_FREQ 16000000L | ||
5 | - | ||
6 | -unsigned int joystick_lr; | ||
7 | -unsigned int joystick_ud; | 4 | +#define CPU_FREQ 16000000L |
5 | +#define VAL25 895 | ||
6 | +#define VAL105 246 | ||
8 | 7 | ||
9 | void init_serial(int speed) | 8 | void init_serial(int speed) |
10 | { | 9 | { |
@@ -30,36 +29,64 @@ void port_initio(void) | @@ -30,36 +29,64 @@ void port_initio(void) | ||
30 | { | 29 | { |
31 | DDRD &= 0xFC; | 30 | DDRD &= 0xFC; |
32 | DDRD |= 0x3C; | 31 | DDRD |= 0x3C; |
32 | + DDRC = 0x00; | ||
33 | DDRB &= 0xFE; | 33 | DDRB &= 0xFE; |
34 | PORTD |= 0x3C; | 34 | PORTD |= 0x3C; |
35 | } | 35 | } |
36 | 36 | ||
37 | +int analogRead(uint8_t pin) | ||
38 | +{ | ||
39 | + uint8_t low, high; | ||
40 | + | ||
41 | + if (pin >= 14) | ||
42 | + pin -= 14; // allow for channel or pin numbers | ||
43 | + ADMUX = (0x01 << 6) | (pin & 0x07); | ||
44 | + ADCSRA|=(1<<ADSC); | ||
45 | + while (bit_is_set(ADCSRA, ADSC)); | ||
46 | + low = ADCL; | ||
47 | + high = ADCH; | ||
48 | + | ||
49 | + return (high << 8) | low; | ||
50 | +} | ||
51 | + | ||
52 | +void ad_init(unsigned char channel) | ||
53 | +{ | ||
54 | + ADCSRA|=(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); | ||
55 | + ADMUX|=(1<<REFS0)|(1<<ADLAR); | ||
56 | + ADMUX=(ADMUX&0xf0)|channel; | ||
57 | + ADCSRA|=(1<<ADEN); | ||
58 | +} | ||
59 | + | ||
37 | int main(void) | 60 | int main(void) |
38 | { | 61 | { |
39 | init_serial(19200); | 62 | init_serial(19200); |
40 | port_initio(); | 63 | port_initio(); |
41 | - unsigned char ser; | 64 | + ad_init(PINC&0x00); |
42 | uint8_t opto0 = 0; | 65 | uint8_t opto0 = 0; |
43 | uint8_t opto1 = 0; | 66 | uint8_t opto1 = 0; |
44 | - uint8_t once = 1; | ||
45 | - | 67 | + unsigned char ser; |
68 | + unsigned int temp; | ||
69 | + unsigned char ftemp; | ||
70 | + | ||
46 | while (1) | 71 | while (1) |
47 | { | 72 | { |
48 | - if((opto0 == 1) && ((PIND & 0x40) == 0x40)) | 73 | + temp = analogRead(0); |
74 | + if(temp > VAL25) | ||
75 | + ftemp = 0; | ||
76 | + else if(temp < VAL105) | ||
49 | { | 77 | { |
50 | - if(once) | ||
51 | - { | ||
52 | - PORTD &= 0xE7; | ||
53 | - //_delay_ms(00000); | ||
54 | - //PORTD |= 0x18; | ||
55 | - //once = 0; | ||
56 | - } | 78 | + ftemp = 255; |
79 | + opto1 = 0; | ||
57 | } | 80 | } |
58 | else | 81 | else |
59 | { | 82 | { |
60 | - once = 1; | ||
61 | - PORTD |= 0x18; | 83 | + temp = (VAL25 - temp) * 255; |
84 | + ftemp = temp / (VAL25 - VAL105); | ||
62 | } | 85 | } |
86 | + if((opto0 == 1) && ((PIND & 0x40) == 0x40)) | ||
87 | + PORTD &= 0xE7; | ||
88 | + else | ||
89 | + PORTD |= 0x18; | ||
63 | if((opto1 == 1) && ((PIND & 0x80) == 0x80)) | 90 | if((opto1 == 1) && ((PIND & 0x80) == 0x80)) |
64 | PORTD &= 0xDB; | 91 | PORTD &= 0xDB; |
65 | else | 92 | else |
@@ -70,14 +97,21 @@ int main(void) | @@ -70,14 +97,21 @@ int main(void) | ||
70 | opto0 = 1; | 97 | opto0 = 1; |
71 | else if(ser == 'D') | 98 | else if(ser == 'D') |
72 | opto0 = 0; | 99 | opto0 = 0; |
73 | - send_serial(ser); | ||
74 | -/* | ||
75 | - if((PINB & 0x01) == 0x01) | ||
76 | - send_serial('1'); | 100 | + else if(ser == 'E') |
101 | + opto1 = 1; | ||
102 | + else if(ser == 'G') | ||
103 | + opto1 = 0; | ||
104 | + else if(ser == 'H') | ||
105 | + send_serial(ftemp); | ||
106 | + else if(ser == 'F') | ||
107 | + { | ||
108 | + if((PINB & 0x01) == 0x01) | ||
109 | + send_serial('I'); | ||
110 | + else | ||
111 | + send_serial('K'); | ||
112 | + } | ||
77 | else | 113 | else |
78 | - send_serial('0'); | ||
79 | - send_serial('\n'); | ||
80 | -*/ | 114 | + send_serial('J'); |
81 | } | 115 | } |
82 | 116 | ||
83 | return 0; | 117 | return 0; |