Skocz do zawartości

coolwilk

Użytkownicy
  • Zawartość

    28
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O coolwilk

  • Ranga
    3/10

Informacje

  • Płeć
    Mężczyzna
  1. @Treker przemapowałem dokładnie tak samo jak w poradniku, w sensie dokładnie z tych pinów na te, które zostały wskazane w artykule.
  2. 1. W pełnej ścieżce nie było ani spacji ani wolnych znaków. Była ona poprawna. 2. Nie bez problemów ale wszystkie rozwiązałem, używam zalecanego sprzętu do tego kursu 3. Tak jest, wszystko jest ustawione tak samo ALE nie robiłem remappingu pinów. 4. Tak Problem rozwiązałem (nie ten dotyczący buildowania się projektu z artykułu). Otóż wszystko działa po zrobieniu remappingu. Dziwi mnie to bardzo. Czy sugeruje to, że te podstawowe piny wyjściowe dla UART są wadliwe (program jest taki sam, jedyna różnica to remapping)?
  3. Witam, nie mogę zmusić do działania odbierania danych przez UART, co więcej gdy wgrywam kod z tutoriala nie chce sie on zbuildować. Wyskakuje taki błąd: No rule to make target '.../04_UART_Receive_Multiple_Bytes/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c', needed by 'Drivers/CMSIS/system_stm32f4xx.o'. Stop. Nie wiem co jest tego przyczyną. Gdy szukałem tego pliku nie mogłem go w ogóle znaleźć ale w innych projektach też go nie mam a mogę je zbuildować. Co więcej taki błąd zazwyczaj mi wyskakiwał gdy miałem w nazwie plików jakiś polski znam/spację ale wszystko usunąłem a błąd pozostał.
  4. @Treker wszystko podpięte jest tak jak należy. Używałem tego samego modułu, podłączyłem go do tych samych pinów, nie pomyliłem wyprowadzeń (5v do 3v, gnd do gnd, vrx do pa1, vry do pa2, sw do pa3). Dodatkowo sprawdziłem to na innym stm32f411e i działa tak samo (użyłem także dwóch różnych Joystickow - wynik bez zmian)
  5. Witam, mam problem z DMA. W Joystick[0] mam wartość z ADC na osi x joysticka, a w Joystick[1] powinna być wartość z y. Jednak, no właśnie, w Joystick[1] jest wartość z Joystick[0] tylko w przedziale 25-75% Joystick[0], np. jeżeli w Joystick[0] mam wartość 4095 to w Joystick[1] mam ok. 3600, a jeżeli w Joystick[0] jest 0 to w Joystick[1] ok. 500. Elementy tabeli nei reagują w ogóle na zmiany po y na joysticku. Co ciekawe gdy odłączyłem przewód od pinu PA2 to nic sie nie zmieniło! A żeby było jeszcze ciekawiej - pobrałem projekt z kursu i działa na nim tak samo!
  6. Drugi raz chciałem zrobić sobie kurs. Wcześniej nie miałem tego problemu jednak teraz nie wiem jak go rozwiązać. Otóż gdy już zbuilduje swój projekt i chce go wgrać przez Utility na STM32F4 nie mam takiej możliwości gdyż nie mogę nigdzie znaleźć pliku .bin. Nie wiem co jest przyczyną tego, że on nie powstaje. Ma ktoś może jakiś pomysł? UPDATE: Wgrałem plik .hex, który się znajdował w pliku Debug i wszystko śmiga. Pozdrawiam
  7. Udało mi się pokonać przeciwności i moduł działa. Okazało się, że błąd był w pętlach zajmującymi się odbiorem danych: for (j = 0; j<5; j++){ for (i = 0; i<5; i++){ while(!HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin)); DWT->CYCCNT = 0; while(HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin)); temp=(DWT -> CYCCNT)/100; if (temp<30){ Wartosc[j]=Wartosc[j]<<1; } else { Wartosc[j]=Wartosc[j]<<1; Wartosc[j]=Wartosc[j]+1; } } Z racji, że odbieramy 5x8 bitów to już widać błąd: i<5 - powinno być i<8 xd
  8. Przerobiłem minimalnie ten przykład z wyżej tak, żeby pasował i nei wiem co jest grane. Wartości, które są wyrzucane na samym końcu są do niczego /** ****************************************************************************** * File Name : main.c * Description : Main program body ****************************************************************************** ** This notice applies to any and all portions of this file * that are not between comment pairs USER CODE BEGIN and * USER CODE END. Other portions of this file, whether * inserted by the user or by software development tools * are owned by their respective copyright owners. * * COPYRIGHT(c) 2018 STMicroelectronics * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of STMicroelectronics nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "stm32f4xx_hal.h" /* USER CODE BEGIN Includes */ #include "dwt_stm32_delay.h" /* USER CODE END Includes */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ uint16_t Rh,RhDec,Temp,TempDec,ChkSum; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); /* USER CODE BEGIN PFP */ /* Private function prototypes -----------------------------------------------*/ GPIO_InitTypeDef GPIO_InitStruct; void TermometrPinOut(void) { __HAL_RCC_GPIOE_CLK_ENABLE(); GPIO_InitStruct.Pin = DHT11_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(DHT11_GPIO_Port, &GPIO_InitStruct); } void TermometrPinIn(void) { __HAL_RCC_GPIOE_CLK_ENABLE(); GPIO_InitStruct.Pin = DHT11_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(DHT11_GPIO_Port, &GPIO_InitStruct); } void DHT11Read (uint16_t *Rh, uint16_t *RhDec, uint16_t *Temp, uint16_t *TempDec, uint16_t *ChkSum) { uint16_t temp; uint8_t i,j; uint16_t Wartosc[5]={0x00, 0x00, 0x00, 0x00, 0x00}; TermometrPinOut(); HAL_GPIO_WritePin(DHT11_GPIO_Port,DHT11_Pin,GPIO_PIN_RESET); DWT_Delay_us(18000); HAL_GPIO_WritePin(DHT11_GPIO_Port,DHT11_Pin,GPIO_PIN_SET); DWT_Delay_us(40); TermometrPinIn(); while(!HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin)); while(HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin)); for (j = 0; j<5; j++){ for (i = 0; i<5; i++){ while(!HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin)); DWT->CYCCNT = 0; while(HAL_GPIO_ReadPin(DHT11_GPIO_Port, DHT11_Pin)); temp=(DWT -> CYCCNT)/100; if (temp<30){ Wartosc[j]=Wartosc[j]<<1; } else { Wartosc[j]=Wartosc[j]<<1; Wartosc[j]=Wartosc[j]+1; } } } *Rh = Wartosc[0]; *RhDec = Wartosc[1]; *Temp=Wartosc[2]; *TempDec=Wartosc[3]; *ChkSum=Wartosc[4]; } /* USER CODE END PFP */ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); /* USER CODE BEGIN 2 */ DWT_Delay_Init(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { DHT11Read(&Rh,&RhDec,&Temp,&TempDec,&ChkSum); HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } Ma ktos moze jakis pomysł?
  9. Witam, chciałbym zbierać informacje z modułu DHT11 podpiętego do STM. MODE pin z dht podpinam pod USART w trybie Single Wire (Half-Duplex) z racji tego, że pin usart musi zarowno odbierac jak i wysylac informacje. I teraz rodzi się moje pytanie odnośnie kodu gdyż jestem dość zielony w tym temacie. Czy powinno to wyglądać podobnie do tego? Czyli ustawienie komunikacji w taki sposób? void DHT11Read(u8 *Rh,u8 *RhDec,u8 *Temp,u8 *TempDec, u8 *ChkSum){ u8 temp; u8 j; u8 i; u8 Value[5]={0x00,0x00,0x00,0x00,0x00}; DHT11initGPIOasOutput(); GPIO_ResetBits(GPIOD,GPIO_Pin_1); DHT11_delay_us(18000); GPIO_SetBits(GPIOD,GPIO_Pin_1); DHT11_delay_us(40); DHT11initGPIOasInput(); //80us lik presence // while(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_1)){} //52us 0 level //dht11 response and start to send signal 0-1 while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_1)){} //80us 1 level // for (j = 0; j < 5; ++j) { for (i = 0; i < 8; ++i) { while(!GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_1)){} TIM_SetCounter(TIM2,0);//Sayıcıyı Sıfırla while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_1)){} temp=TIM_GetCounter(TIM2); if (temp<30) { Value[j]=Value[j]<<1; } else { Value[j]=Value[j]<<1; Value[j] =Value[j]+1; } } } *Rh=Value[0]; *RhDec=Value[1]; *Temp=Value[2]; *TempDec=Value[3]; *ChkSum=Value[4]; } Czyli nie korzystam z gotowego modelu komunikacji tylko sam go tworzę? Tak wygląda model komunikacji na DHT11: Czy jednak jest sposób komunikacji, z którego mógłbym skorzystać? Szukałem informacji na ten temat i nie mogłem znaleźć Używam biblioteki HAL.
  10. Witam, mam uklad, w ktorym testuje odbieranie sygnału z pilota na arduino. Chce napisac taki program, dzieki ktoremu bede mogl odliczac czas miedzy poszczegolnymi nacisnieciami. Ponizej jest moj kod, ktory do tej pory napisalem, jednak wartosc zmiennej 'wynik' jest zawsze rowna 0 i nie potrafie rozgryzc dlaczego. #include <IRremote.h> #define irPin 11 #include <time.h> IRrecv irrecv(irPin); decode_results results; clock_t koniec, start; int flaga = 1; double wynik; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { if ((results.value == 0xF700FF)&&(flaga==1)){ time (&start); Serial.println("faza1"); flaga++; } else if ((results.value == 0xF700FF)&&(flaga==2)){ time (&koniec); Serial.println("faza2"); flaga++; } else if ((results.value == 0xF700FF)&&(flaga==3)){ wynik = difftime(koniec,start); Serial.println(wynik); flaga=1; } irrecv.resume(); } } [ Dodano: 06-11-2017, 11:37 ] rozwiązanie było prostsze niż myślałem, temat do zamknięcia #include <IRremote.h> #define irPin 11 #include <time.h> IRrecv irrecv(irPin); decode_results results; unsigned long start, koniec, wynik; int flaga = 1; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { if ((results.value == 0xF700FF)&&(flaga==1)){ start=millis(); Serial.println(start); Serial.println("faza1"); flaga++; } else if ((results.value == 0xF700FF)&&(flaga==2)){ koniec = millis(); Serial.println(koniec); Serial.println("faza2"); flaga++; } else if ((results.value == 0xF700FF)&&(flaga==3)){ wynik = koniec-start; Serial.println(wynik); flaga=1; } irrecv.resume(); } }
  11. Tak, jest to tasma z trzema wyprowadzeniami RGBi czwartym 12V
  12. Witam, robie uklad, w ktorego sklad wchodza: tasma led RGB, arduino pro mini 5v, TSOP2236 (odbiornik podczerwieni). Jako, ze na elektronice nie znam sie praktycznie w ogole pojawia sie moje pytanie jak zasilic ten uklad? Tasma potrzebuje 12V, mam zasilacz do niej wiec tutaj nie ma problemu jednak chcialbym zasilic od razu takze arduino.
  13. Witam. Chcę stworzyć program, który pozwoli mi na odbieranie wartości z zewnątrz tak aby tą wartość przedstawiała zmienna globalna. Jednak zupełnie nie wiem jak to zrobić. Program, który wstawiłem poniżej, w pętli nieskończonej wypisuje mi a=0.00. Czy macie pomysł jak to zmienić? Jak ustawić wartość zmiennej w funkcji setup() tak aby miała tą samą wartość w loop()? #include <Timers.h> #include "Timers.h" String readString, dana1, dana2; double a,n1,n2; Timers timer1(2); void setup() { // put your setup code here, to run once: digitalWrite(4,0); Serial.begin(9600); while(Serial.available()==0){} //tutaj zaczynam odbierac wartosci while (Serial.available()) { delay(10); if (Serial.available() >0) { char c = Serial.read(); //gets one byte from serial buffer readString += c; //makes the string readString } } if (readString.length() >0) { Serial.println(readString); //see what was received dana1 = readString.substring(0, 4); //get the first four characters dana2 = readString.substring(4, 8); //get the next four characters int n1; //declare as number int n2; char carray1[6]; //konwert stringa w liczbe servo1.toCharArray(carray1, sizeof(carray1)); n1 = atoi(carray1); char carray2[6]; servo2.toCharArray(carray2, sizeof(carray2)); n2 = atoi(carray2); Serial.println(n1);//mamy te liczby ktore chcielismy przeslac Serial.println(n2); readString=""; } delay(100); double a=1000000/n1; //okres w ms timer1.attach(0, a, led1on); // stworzenie zdarzeń przypisanych do funkcji timer1 i określenie ich parametrów (0 - numer porządkowy zdarzenia, a - częstotliwość występowania zdarzenia, led1on - funkcja wywoływana przez zdarzenie) timer1.attach(1, 1.5*a, led1off); } void led1on() { digitalWrite(4,1); } void led1off() { digitalWrite(4,0); timer1.setInterval(1,a); } void loop() { Serial.println(a);//tutaj a = 0.00 timer1.process(); }
  14. Dostałem ją. Nie wiem co na niej było wcześniej wgrywane. Ogólnie posprawdzam ją jeszcze ale jest to całkiem możliwe, że jest zepsuta EDIT: Jest zepsuta. Temat do zamknięcia
  15. Tak. Na zdjęciu jest COM9 ( przepraszam że napisałem COM6) ale na Arduino IDE też jest COM9 tutaj nie ma pomyłki z mojej strony. Do arduino mam podpięte 3 sterowniki MAX7219. Co więcej gdy wszystko odepnę i gdy próbuję wgrać najprostszy przykład (BLINK) problem jest ten sam
×
×
  • Utwórz nowe...