Skocz do zawartości

UinqeN

Użytkownicy
  • Zawartość

    7
  • Rejestracja

  • Ostatnio

Posty napisane przez UinqeN

  1. Witam serdecznie wszystkich użytkowników 🙂 Mam problem z zadaniem 5.2 , mianowicie nie wiem w którym miejscu kodu powinienem odczytywać kilka znaków a nie jeden. Wydaje mi się ,że powinienem coś zmienić tutaj :

     

     while(1)
        {
    
      	  if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)) // ten fragment kodu
      	  {                                           // sprawdza czy w buforze
      		  char c = USART_ReceiveData(USART2);    // jest cokolwiek, analogiczna sytuacaj do tej gdzie
      		  switch(c)                              // funckcja nie dopuszcza doprzepelnienia rejestru
      		  {

    reszta kodu wygląda identycznie jak w kursie ,ale i tak go wstawię 🙂

    #include "stm32f10x.h"
    
    void send_char(char c)
    {
    	while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
    	USART_SendData(USART2, c);
    }
    
    void send_string(const char* s)
    {
    	while (*s)
    		send_char(*s++);
    }
    
    int main(void)
    {
    	GPIO_InitTypeDef gpio;
    	USART_InitTypeDef uart;
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
    
    	GPIO_StructInit(&gpio);
    	gpio.GPIO_Pin = GPIO_Pin_2;
    	gpio.GPIO_Mode = GPIO_Mode_AF_PP;
    	GPIO_Init(GPIOA, &gpio);
    
    	gpio.GPIO_Pin = GPIO_Pin_3;
    	gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    	GPIO_Init(GPIOA, &gpio);
    
    	USART_StructInit(&uart);
    	uart.USART_BaudRate = 115200;
    	USART_Init(USART2, &uart);
    
    	USART_Cmd(USART2, ENABLE);
    
    	while (1) {
    		if (USART_GetFlagStatus(USART2, USART_FLAG_RXNE)) {
    		    char c = USART_ReceiveData(USART2);
    		    switch (c)
    		    {
    		        case 'a':
    		            send_string("Odebrano komunikat A!\r\n");
    		            break;
    		        case 'b':
    		            send_string("Odebrano komunikat B!\r\n");
    		            break;
    		        default:
    		            send_string("Nieznany komunikat:(\r\n");
    		            break;
    		    }
    		}
    
    	}
    }

    Jeśli ktoś ma jakiś pomysł będę wdzięczny za pomoc

  2. Witam,jestem zaledwie po kursie podstawowym arduino z waszej strony i jako dodatkowa prace domowa postawielm sobie zadanie. Zalozeniem mojego programy jest aby dioda zapalala sie zarowno po podaniu 5v na pin 2 i 4, jesli na ktoryms z nich nie byloby napiecie to dioda nie powinna swiecic. Napisalem taki program

    void setup() {
    pinMode (2,INPUT);
    pinMode (3, OUTPUT);
    pinMode (4,INPUT);
    }
    
    void loop() {
    if (digitalRead(2)==HIGH); //jesli na pin 2 podany zostanie stan wysoki
    
     while(digitalRead(4)==HIGH) { //odczytaj stan pinu 4 jesli wysoki zasil diode na pinie 3
     analogWrite(3,HIGH);  // dioda swieci sie
    
    
    }
    }
    

    No ale zalozenia realizowane sa w 50% bo zapalaenie sie diody zalezy tylko i wylacznie od stanu wysokiego na pinie 4 a 2 jest zupelnie poza obiegiem. Wzbudzam te piny podajac im napecie 5v (wyprowadzenie na Arduino Uno). Staralem sie uzywac konfiguracji :if,while ale to nie skutkowalo,a uzycie funkcji switch case mnie przeroslo i nie dalem rady "przerobic jej " pod ten przypadek. Za pomoc z gory dziekuje ^^

  3. Czyli przy połączeniu przez płytkę stykową program działa i wyświetla wszystko jak należy? Podłączałeś programator z podłączonym wyświetlaczem do płytki stykowej?

    Niestety z praktyki wiem że wyświetlacze HD44780 czasami bywają kapryśne, w tym sensie że niektóre działają tak jak powinny a niektóre nie będą działać prawidłowo bez zwiększonych opóźnień.

    Próbowałeś korzystać z tego wyświetlacza nie używając gotowych bibliotek? Mi najczęściej trafiały się problemy jeśli korzystałem z gotowych bibliotek 😉

    Po przeczytaniu tego postu wpisalem program z poza glownej biblioteki. Niestety nic sie nie zmienilo. Moze wyswietlacz jest uszkodzony? 🙁 ,dziwi mnie jednak fakt ze jest on jak wspomnialem wczesniej zupelnie martwy(poza podswietleniem) nie chce sie skubany dac wysterowac. Wpisalem taki kod

    #include <LiquidCrystal.h>
    double odczyt;
    LiquidCrystal lcd(8,9,4,5,6,7);// informacje do jakich pinow zostal podlaczony nowy wyswietlacz
    void setup() {
    lcd.begin(16,2); //deklaracja typu
    lcd.clear();
    lcd.setCursor(0,0); //ustawaienie kursora 
    lcd.print("PROBA 2"); //tkest w wierszu 1
    lcd.setCursor(0,1); //ustawienie kursora
    lcd.print("LCD NIE DZIALA");
    
    }
    void loop () {
    }
    

    [ Dodano: 04-02-2017, 15:30 ]

    To ja już nic nie rozumiem.

    Co to jest "Caly programator arduino uno"? To programator (np. USBasp) czy płytka Arduino UNO?

    "W przypadku podaleczenia samego wyswietlacza lcd przez plytke stykowa wszystko dziala tak jak powinno"

    Czy podłączałeś inny wyświetlacz czy ten sam na shieldzie, ale drutami i do czego? Do płytki stykowej? Co na niej było?

    "Zmeinilem opcje programatora wedlug podpowiedzi, niestety nie roziwazuje to mojego problemu"

    Którego problemu? Z wgrywaniem kodu do pamięci FLASH procesora czy z jego niedziałaniem? Odróżniasz jedno od drugiego? Spróbuj wyrażać się jaśniej. Nie chodzi że jesteś początkującym, tylko czytaj swoje posty przed wysłaniem jak ktoś kto nic nie wie o tym co robisz i próbuj je zrozumieć.

    Czy możesz wskazać miejsce gdzie kupiłeś ten shield i/lub jego typ/schemat? Przy bezpośrednim nałożeniu jednego na drugie właściwie jedynym źródłem błędu jest definicja pinów w konstruktorze LiquidCrystal lcd(). Piszesz, że coś tam zmieniałeś - wg czego? Możesz zapadać link do tego poradnika? Kolejność wydaje się dobra (RS, E, D4-7) i chyba pasuje do typowego shielda LCD, ale może Twój jest jakiś inny? I skoro coś działało na płytce stykowej, to pokaż jak to połączyłeś i wrzuć kod który tam działał - to chyba najlepszy punkt wyjścia do poszukiwań błędu.

    Juz sie poprawiam, cale arduino czyli podlaczenie arduino uno przez usb do komputera.(samo arduino uno)

    Nie, podlaczylem inny wyswietlacz wedlug tego poradnika :

    Nie roziwazuje to mojego problemu z oblsuga lcd shielda, wszystko inne jest cacy 🙂

    Zakupilem shielda ze strony :http://allegro.pl/modul-shield-lcd-arduino-wyswietlacz-klawiatura-i5818224548.html?snapshot=MjAxNy0wMS0yOFQxNjozMjoyN1o7YnV5ZXI7YTRiZjIyN2I0N2I3NTk3OTE5NjRhZjRkYjU2MTllMjI2NGE2YTkxM2ViYWQ4ZWY5ZWRiMTA2NzM5ODZjZTdhYw== a co do poradinka to skorzystalem z tego :https://www.youtube.com/watch?v=gAkc5LShEXY&t=214s mistrz z filmiku zaczyna tlumaczyc zmiane od 2:21 ,a co do programi jaki dzialal przez plytke stykowa to ten :

    #include <LiquidCrystal.h>
    double odczyt;
    LiquidCrystal lcd(8,9,4,5,6,7);// informacje do jakich pinow zostal podlaczony nowy wyswietlacz
    void setup() {
    lcd.begin(16,2); //deklaracja typu
    lcd.clear();
    lcd.setCursor(0,0); //ustawaienie kursora 
    lcd.print("Nap. Odczytane"); //tkest w wierszu 1
    lcd.setCursor(0,1); //ustawienie kursora
    lcd.print("0.000V");
    
    }
    
    void loop() {
    odczyt = analogRead(A0)*5.0/1023.0; 
    lcd.setCursor(0,1);
    lcd.print(odczyt);
    delay(200);
    }
    

    Mam nadzieje ze teraz sie dogadamy 🙂

    Arduino_LCD.thumb.png.fea6965d27df76314212075d1efb67c1.png

  4. Zaraz, to nie możesz wgrać kodu czy wgrany do Arduino program nie działa?

    A coś innego umiesz wgrać? Mruganie diodą (słynny blink który masz w przykładach) działa?

    Naprawdę masz programator USBasp? Bo do płytki UNO podłączonej kablem USB ustawiasz:

    Narzędzia: Płytka: Arduino/Genuino Uno

    Programator: AVRISP mkII

    i port COM jaki tam Ci się pojawił nowy.

    Blad poczatkujacego , juz uzupelniam opis. Caly programator arduino uno dziala bez zarzutow, problem pojawia sie w momencie podalczenie lcd shielda. Jak wspomnialem wczesniej wyswietlacz ten jest jakby martwy , reaguje tylko na zasilanie (jest tylko i wilacznie pdswietlany). W przypadku podaleczenia samego wyswietlacza lcd przez plytke stykowa wszystko dziala tak jak powinno. Ten program jest przykladowy , poprostu nie moge wzbudzic wyswietalacza ani wyswietlac na nim czego kolwiek

    Ps. Zmeinilem opcje programatora wedlug podpowiedzi, niestety nie roziwazuje to mojego problemu 🙁 A podpiac na odwort lcd shielda poprostu sie nie da 😃 wyciecia miedzy pinami

    wykluczaja taki blad

    IMG_20170203_180703.thumb.jpg.8de5748c5a744759241adcc482da507a.jpg

  5. Witam forumowiczow, mam problem jak wspomnialem w temacie z lcd sheild . Wprowadzam taki kod

    /*
     LiquidCrystal Library - Autoscroll
    
    Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
    library works with all LCD displays that are compatible with the
    Hitachi HD44780 driver. There are many of them out there, and you
    can usually tell them by the 16-pin interface.
    
    This sketch demonstrates the use of the autoscroll()
    and noAutoscroll() functions to make new text scroll or not.
    
    The circuit:
    * LCD RS pin to digital pin 12
    * LCD Enable pin to digital pin 11
    * LCD D4 pin to digital pin 5
    * LCD D5 pin to digital pin 4
    * LCD D6 pin to digital pin 3
    * LCD D7 pin to digital pin 2
    * LCD R/W pin to ground
    * 10K resistor:
    * ends to +5V and ground
    * wiper to LCD VO pin (pin 3)
    
    Library originally added 18 Apr 2008
    by David A. Mellis
    library modified 5 Jul 2009
    by Limor Fried (http://www.ladyada.net)
    example added 9 Jul 2009
    by Tom Igoe
    modified 22 Nov 2010
    by Tom Igoe
    
    This example code is in the public domain.
    
    http://arduino.cc/en/Tutorial/LiquidCrystalAutoscroll
    
    */
    
    // include the library code:
    #include <LiquidCrystal.h>
    
    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(8,9,4,5,6,7);
    
    void setup() {
     // set up the LCD's number of columns and rows:
     lcd.begin(16, 2);
    }
    
    void loop() {
     // set the cursor to (0,0):
     lcd.setCursor(0, 0);
     // print from 0 to 9:
     for (int thisChar = 0; thisChar < 10; thisChar++) {
       lcd.print(thisChar);
       delay(500);
     }
    
     // set the cursor to (16,1):
     lcd.setCursor(16, 1);
     // set the display to automatically scroll:
     lcd.autoscroll();
     // print from 0 to 9:
     for (int thisChar = 0; thisChar < 10; thisChar++) {
       lcd.print(thisChar);
       delay(500);
     }
     // turn off automatic scrolling
     lcd.noAutoscroll();
    
     // clear screen for the next loop:
     lcd.clear();
    }
    

    Piny w LiquidCrystal lcd(8,9,4,5,6,7); zmienilem przez wzglad na internetowy poradnik. Sam w swobie wyswietlacz nie pokazuje mi niczego, nawet rzedu prostokatow ktore powinieniem byl wyregulowac potencjometrem znajdujacym sie na plycie. Moj wyswietlacz jest niebieski i taki z niego pozytek. Podlaczenie fizyczne zle nie jest bo nie da sie podpiac tej wkladki(mam na mysli lcd shield) na odwrot. W narzedziach plytka jak i com sa zgodne,za to mam ustawiony programator na USBasp na pozostalych ustawianiecha takze probowalem wgrac ten kod ale efekt byl ten sam. Jesli ktos ma chwile to poprosze o wsparcie 🙂

  6. Wszystko bajka zarowno ta jak i poprzednie lekcje(do reszty jeszcze mi daleko 😃) Jesli chodzi o PWM to nie moglem zlokalizowac w tej czesci kusry informacji jak zmieniac czestotliwosc, z tego co wyczytalem w internecie funkcja analogWrite() ustala wartosc czestotliwosci na 490Hz a istnieje moze inna funkncja badz przelicznik dzieki ktoremy bedzie mozna ja wprowadzic?(pytam bo troche przerobilem powyzszy program i zrobilem pwma tegulowanego potencjometrem) Jeli ktos ma czas to prosze o wsparcie 🙂

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.