http://www.youtube.com/watch?v=RcZI6fK948w
A videóból "begépeltem" a kódot(hibákat tartalmazhat):
Kód: Egész kijelölése
include <avr/pgmspace.h>
include <avr/interrupt.h>
include <util/delay.h>
include "lcd_drv.h"
include "uart.h"
volatile uint8_t counter_ms;
int main(void)
{
char i,x,error;
char c,count,timeout;
uint8_t: code[] * {0,0,0, 6,2,9,2,1, 9,0};
uint8_t scanned[20] ;
lcd__inlx ();
init_uart(0);
lcd_clear();
lcd_pos(0,0) ;
TCCROB = (1<<CS01) | (1<<CS00); //clk/64
OCROA = 125-1; //lms
TIMSK m (1<<OCIEOA); //Compa overflov Interrupt
sei ();
while(1){
lcd_clear(); lcd_pos(0,0);
lcd_text_p(PSTR("Ready"));
error = 0;
i=0;
c = uart_getc();
// Peset Counter
cli();
count er_ms =0;
sei();
count =0;
timeout = 0;
if(c == 189 && timeout == 0){ //Start-Byte?
x = count;
count += uart_getc(); //No of Bytss
while(x < count){
c = uart_getc();
c -= 29;
if(c> 0 && c <= 10){
if(c == 10) //10 => 0
scanned[xJ=O;
else
scanned[x] = c;
x++;
count++;
}
if(c == 11) //"Stop Byte” break;
}
c = uart_getc(); //Read ETX
timeout = 1;
while(counter_ms < 100){
if(uart_char_received()) {
c = uart_getc();
timeout = 0;
}
}
for(i = 0; i < 10; i++){
if(scanned[i] != code[i]){
error = 1;
break;
}
)
lcd_clear();
lcd_pos(0,0);
if(error — 0){
lcd_text_p (PSTR ("Granted"));
lcd_pos(1, 0);
for(i = 3; i < 10; i++) //print vithout leading "0" lcd_puthex(scanned[i]);
}
else{
lcd_text_p(PSTR("Denied"));
lcd__pos (1,0);
for(i = 3; i < 10; i++)
lcd_puthex(scanned[i]);
}
_delay_ms(2000);
}
}
ISR(TIMERO_COMPA_vect){
counter__ms++;
}
Egyenlőre odáig jutottam el, hogy soros porton kiírja a beolvasott kódsort:
Kód: Egész kijelölése
189
5
39
39
39
34
38
3
189
6
30
39
30
34
35
40
3
A kártya száma a következő: 0005910156
39 = 0
39 = 0
39 = 0
34 = 5
38 = 9
30 = 1
39 = 0
30 = 1
34 = 5
35 = 6
Ezt az átalakítást szeretném elvégezni, hogy soros portra, csak a kártyaszámot írja ki, a következő módon: 0005910156
A programom jelenleg így áll:
Kód: Egész kijelölése
uint8_t val ;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if ( Serial.available() > 0){
val = Serial.read();
Serial.println(val);
}
}