Operácie

Ovladanie krokoveho motora joystickom + uvod displej: Rozdiel medzi revíziami

Z SensorWiki

(Algoritmus a program)
(Algoritmus a program)
Riadok 142: Riadok 142:
 
 
 
}
 
}
 
 
 
</source></tab>
 
<tab name="filename.h"><source lang="c++">
 
#include <avr/io.h>
 
void adc_init(void);
 
unsigned int adc_read(char a_pin);
 
</source></tab>
 
</tabs>
 
  
 
== Analýza a opis riešenia ==
 
== Analýza a opis riešenia ==

Verzia zo dňa a času 19:55, 18. máj 2024

Záverečný projekt predmetu MIPS / LS2023 - Matej Ledecky

Zadanie

  • 1. Prestudovanie datasheetov k danym komponentom (joystick,Lcd/i2c, stepmotor+driver)
  • 2. Navrh zapojenia a funkcnosti komponentov
  • 3. Zapojenie
  • 4. Navrh programoveho riesenia
  a, Citanie hodnot s joysticku a vhodna interpretacia pre dalsie pouzitie
  b, 1. Pohyb krokoveho motora v oboch smeroch
  b, 2. Rychlost krokoveho motora
  c, Prepojenie joystick - Motor (ovladanie joystickom smer/rychlost otocenia)
  d, 1. Uvodna obrazovka (vypis privitania a co robi dany projekt na LCD)
  d, 2. Vypis smeru otacania na LCD
  • 5. Odskusanie funkcnosti (videodokumentacia)
Vývojová doska ACROB.

Literatúra:

reakciu on-line]

Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...

Algoritmus a program

Algoritmus programu je....

<tabs> <tab name="AVR C-code"><source lang="c++">

  1. include "main.h" // vlozenie potrebnych includeov prepojeni
  1. define X_PIN 0 //definovanie pinov joysticku
  2. define Y_PIN 1

void delay(int delay) // klasicky delay { for (int i=1; i<=delay; i++) _delay_ms(1); }

void delayus(int delay) //us delay pre pozitie v rotacii ako regulacia rychlosti { for (int i=1; i<=delay; i++) _delay_us(1); }

void left(char Pole[],int Speed){ //tocenie doprava for (int L=0;L<10;L++) for(int i = 0; i < 4; i++){ PORTD = Pole[i]; delayus(4250 - Speed*20); } PORTD = 0b00000000;

}

void right(char Pole[], int Speed){ // tocenie dolava for (int L=0;L<10;L++) for(int i = 3; i >= 0; i--){ PORTD = Pole[i]; delayus(4000 - Speed*20); } PORTD = 0b00000000;

}


int main(void) {

MCUCR &= ~(1<<PUD);

DDRD |= 0b00111100; //paramatre pre otacanie char Pole[] = {0b00100000, 0b00010000, 0b00001000, 0b00000100};

int Speed = 0;

unsigned int Valuex; // premenne pre nacitanie s AD prevodnika unsigned int Valuey; unsigned int Value;

int x = 0b00001110; // premenna pre mod LCD cursor on/OFF int y = 0b00001100;


char *num;

TWI_Init(); //inicializacie TWI LCD ADC + uvodne texty delay(500);

LCD_Init(y); delay(500); LCD_clear(); delay(500); LCD_sendString("Vitajte"); delay(2000); LCD_clear(); delay(500);

LCD_sendString("Riadenie Motora "); LCD_setPosition(0,1); LCD_sendString("Joystickom"); delay(2000); LCD_clear(); delay(500);

LCD_sendString("Smer otacania"); LCD_setPosition(0,1); delay(500);

adc_init(); delay(500);

while(1){

Valuex = adc_read(X_PIN)/4; //Citanie s AD do valuex if(Valuex > 125){ //pobyb packy po osi x dolava Speed=Valuex-123; //vypocet konstatny rychlosti left(Pole,Speed); // rotacia dolava LCD_setPosition(0,1); // pozicia kurzora LCD LCD_sendString("<--"); // vypis na LCD

} else if(Valuex < 124){ //to iste len do druhej strany s mensimi upravami kvoli rozdielnym hodnotam s AD Speed=127-Valuex; right(Pole, Speed); LCD_setPosition(0,1); LCD_sendString("-->"); } else{ LCD_setPosition(0,1); // KED nic LCD_sendString("<->"); } /* num = (char *)malloc(snprintf(NULL, 0, "%d", o) + 1); LCD_sendString(num); free(num); */


} return(0);

}

Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami... LedRGB.jpg Nezabudnite doplniť schému zapojenia!

Schéma zapojenia LCD displeja.

Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...