Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <avr/pgmspace.h>
- #include <avr/eeprom.h>
- #include <stdlib.h>
- #include "global.h"
- #include "rf12.h"
- #include "uart.h"
- #include <stdio.h>
- #include <util/delay.h>
- void send(void);
- //void USARTInit(uint16_t ubrr_value);
- //char USARTReadChar(void);
- //void USARTWriteChar(char data);
- //void USARTWrite(char*);
- //Rx
- int main(void)
- {
- sei();
- UART_Init();
- rf12_init(); // ein paar Register setzen (z.B. CLK auf 10MHz)
- UART_Tx_Str("Init\n", 5);
- rf12_setfreq(RF12FREQ(433.92)); // Sende/Empfangsfrequenz auf 433,92MHz einstellen
- rf12_setbandwidth(4, 1, 4); // 200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
- rf12_setbaud(19200); // 19200 baud
- rf12_setpower(0, 6); // 1mW Ausgangangsleistung, 120kHz Frequenzshift
- DDRA = 0b00000001;
- DDRA &= ~(1 << PINA1);
- PORTA |= 1 << PINA1;
- int last_state = 0;
- unsigned char ack_str[]="10000\n"; //ADR D D D D
- for (;;)
- {
- unsigned char ret;
- unsigned char test[50];
- unsigned char received_str[50];
- int timeout;
- UART_Tx_Str(test, sprintf(test, "Start val: %u\n", rf12_rxstart()));
- rf12_rxstart();
- timeout = 2000;
- ret = 255; //not completed yet
- while((ret == 255)&&(timeout>0)) //try if transfer completed
- {
- timeout--;
- ret = rf12_rxfinish(received_str); //ret = anzahl der Bytes received_str enthält jz Empfangspuffer
- _delay_ms(1);
- }
- if(timeout>0)
- {
- UART_Tx_Str(test, sprintf(test, "ret: %u\n", ret));
- if(ret != 0 && ret != 254 && received_str[0] == '2') //no CRC error && no old str &&richtige adr
- {
- UART_Tx_Str(received_str,ret);
- //Empfangenes ausgeben
- if(received_str[1] == '1')
- {
- PORTA = ( 1 << 0 );
- ack_str[1] = (char)((PORTA & (1 << PA0))+48);
- }
- else if(received_str[1] == '0')
- {
- PORTA = ( 0 << 0 );
- ack_str[1] = (char)((PORTA & (1 << PA0))+48);
- }
- else{}
- rf12_allstop(); //alles zurück
- _delay_ms(10);
- rf12_txstart(ack_str, 6); //Antwort Senden
- int timeout2 = 2000;
- while((rf12_txfinished())&&(timeout2>0))
- {
- _delay_ms(1);
- timeout2--;
- }
- if(!(timeout2));
- //USARTWrite("Timeout2\n\n"); //Warten bis rausgegangen ---evtl. Timeout?
- }
- else
- {
- rf12_allstop();
- }
- }
- else
- {
- rf12_allstop();
- }
- received_str[0] = '0';
- if (bit_is_clear(PINA,1)) //Stati
- {
- if(last_state == 0)
- {
- last_state = 1;
- PORTA ^= ( 1 << 0 );
- ack_str[1] = (char)((PORTA & (1 << PA0))+48);
- }
- //USARTWrite("aus\n");
- }
- else
- {
- if(last_state == 1)
- {
- last_state = 0;
- PORTA ^= ( 1 << 0 );
- ack_str[1] = (char)((PORTA & (1 << PA0))+48);
- }
- //USARTWrite("an\n");
- }
- //USARTWrite("Ta\n\n");
- /*blocking sample */
- /* ret = rf12_rxdata(test);
- if(ret)
- UART_Tx_Str(test,ret);
- else
- UART_Tx_Str("CRC Err\n", 8);
- */ }
- }
- /*void USARTInit(uint16_t ubrr_value)
- {
- UBRRL = ubrr_value;
- UBRRH = (ubrr_value>>8);
- UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
- UCSRB=(1<<RXEN)|(1<<TXEN);
- }
- char USARTReadChar()
- {
- while(!(UCSRA & (1<<RXC)))
- {
- }
- return UDR;
- }
- void USARTWriteChar(char data)
- {
- while(!(UCSRA & (1<<UDRE)))
- {
- }
- UDR=data;
- }
- void USARTWrite(char* message)
- {
- int i;
- for(i = 0;i<strlen(message);i++)
- {
- USARTWriteChar(*(message+i));
- }
- }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement