Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define BAUD 9600
- #define FOSC 16000000
- #define MYUBRR FOSC/16/BAUD -1
- #define T1_PB1 1
- #define T1_PB2 2
- #define T0_PD1 5
- #define T0_PD2 6
- #define T2_PD3 3
- #define num_of_leds 5
- float leds[num_of_leds];
- int out_p[num_of_leds] = {1, 2, 5, 6, 3};
- volatile unsigned char data_in[22];
- volatile unsigned char *command_in;
- volatile unsigned char data_count;
- volatile unsigned char ready;
- void set_pwm(int i, int pwm) {
- switch(i) {
- case 1:
- OCR1A = pwm;
- break;
- case 2:
- OCR1B = pwm;
- break;
- case 5:
- OCR0A = pwm;
- break;
- case 6:
- OCR0B = pwm;
- break;
- case 3:
- OCR2B = pwm;
- break;
- default:
- break;
- }
- }
- void uart_init(void) {
- UBRR0H = (MYUBRR >> 8);
- UBRR0L = MYUBRR;
- UCSR0B |= (1 << RXEN0) | (1 << TXEN0);
- UCSR0B |= (1 << RXCIE0);
- UCSR0C |= (1 << UCSZ01) | (1 << UCSZ00);
- }
- // главная функция
- void process() {
- // разбивает строку на числа
- char* pch = strtok(command_in, ";");
- int i = 0;
- while (pch != NULL) {
- leds[i] = char_to_float(pch);
- pch = strtok(NULL, ";");
- i++;
- }
- // присваивает значения шима регистрам
- int pwm;
- for(int i = 0; i < num_of_leds; i++) {
- pwm = (led[i]*255)/2;
- set_pwm(out_p[i], pwm);
- }
- }
- int main(void) {
- pin_init();
- timer_init();
- uart_init();
- sei();
- while(1) {
- if (ready == TRUE) {
- command();
- ready = FALSE;
- }
- }
- }
- ISR (USART_RX_vect) {
- data_in[data_count] = UDR0;
- if (data_in[data_count] == 'n') {
- ready = TRUE;
- data_count = 0;
- } else {
- data_count++;
- }
- }
- for(int i = 0; i < num_of_motors; i++) {
- pwm = (leds[i]*255)/period;
- print(pwm); // вывод: b'127n'
- set_pwm(out_p[i], pwm);
- }
Add Comment
Please, Sign In to add comment