Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'atmega328'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino, ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 3 wyniki

  1. Hej, zbudowałem sobie takie samodzielne Arduino w oparciu o ATmega328p, jako mój programator służy arduino, z jego pomocą wgrałem bootloader na wyżej wymienioną atmege. I pojawił się problem gdy wgrywam za pomocą programatora(arduino as isp) program(miganie diodą) i podpinam zewnętrzne zasilanie, odpinam programator wszystko działa okej, ale gdy wgrałem sobie drugi program(sterowanie serwomechanizmem z pomocą modułu bluetooth HC-05) to jeśli jestem na zasilaniu z programatora(arduino) to program działa, natomiast jeśli odepnę i podłącze zewnętrzne zasilanie 5V to wtedy nie działa, (chyba) układ jest zasilony bo zapala się dioda z funkcji setup(), ale to co dzieje się w loop() tak jakby już nie działało bo nie ma mrugnięcia diodą a więc tym samym i sam serwomechanizm nie działa. Będę wdzięczny za wszystkie pomysły które mogą pomóc rozwiązać problem. Poniżej fragment kodu gdyby był potrzebny. Dodałem również schemat rozważałem rozdzielenie zasilania atmegi 5V i serwomechanizmy odzielnie na 6V(docelowo 4 serwomechanizmy), ale jeszcze nie wiem jak to się do końca łączy czy masy zasilania razem czy osobno czy w jakiś inny sposób(fajnie jakby ktoś się również tą wiedzą podzielił) ale na ten moment jest na jednym zasilaniu 5V całość atmega jak i 1 serwomechanizm. Na rx/tx dałem konwerter poziomów logicznych 5V/3.3V i jest też stabilizator żeby zrobić 3.3V. JP2 na schemacie to goldpiny na podpięcie serwa. #include <Servo.h> #include <SoftwareSerial.h> Servo s1; int bluetoothTx = 11; int bluetoothRx = 10; SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); unsigned int servopos = 0; unsigned int servopos1 = 0; unsigned int servopos2 = 0; unsigned int realservo = 0; void setup() { s1.attach(9); bluetooth.begin(9600); pinMode(8, OUTPUT); digitalWrite(8, HIGH); } void loop() { if(bluetooth.available() >= 2) { digitalWrite(8, LOW); delay(700); digitalWrite(8, HIGH); servopos1 = bluetooth.read(); servopos2 = bluetooth.read(); realservo = servopos1 + (servopos2*256); Serial.print("Realservo - odczyt: "); Serial.println(realservo); if(realservo >=0 && realservo <=180) { digitalWrite(8, LOW); delay(300); digitalWrite(8, HIGH); digitalWrite(8, LOW); delay(300); digitalWrite(8, HIGH); s1.write(realservo); Serial.print("Pozycja serwo s1 "); Serial.println(realservo); delay(200); } }
  2. Witam zbudowałem sześcian z diod LED i chciałbym sterować świeceniem diod pilotem. Program napisałem wykorzystując bibliotekę Rc5 i jest kilka problemów. Nie potrafię napisać kodu, który po wciśnięciu przycisku np.1 na pilocie zapamięta wciśniecie przycisku jako logiczne 1 i wywoła funkcję, która będzie świeciła diodami(tryb 1) Po wciśnięciu innego przycisku np. 2 chciałbym aby diody przestały świecić w "trybie 1 i" zaczęły inaczej świecić (trybie 2). Mówiąc krótko wciskam przycisk 1 diody świecą w trybie 1 wciskam kolejny przycisk i diody zaczynają inaczej świecić(tryb 2). Dotychczas udało mi się zrobić tak, że wcisnę np. przycisk 1 i program zapamiętuje wciśniecie przycisku i diody ciągle świecą (wcześniej musiałem ciągle trzymać przycisk, żeby diody ciągle świeciły). Ale jest problem taki, że program zapamiętuje wciśniecie tego przycisku i dalej nic nie da się zrobić ani zmienić tryb świecenia ani wyłączyć diody(muszę zrobić reset aby diody się wyłączyły). Mógłby mi ktoś to na chłopski rozum wytłumaczyć jak to zrobić? Moje tryby napisałem jako funkcje, gdzie pierwsza funkcja to zwykłe miganie diodami, a druga to rozjaśnianie i gaszenie diod z pinu PWM. Tak wygląda mój kod: #define warstwa1 3 #define warstwa11 5 //podlaczenie diod do pinow PWM #define warstwa2 6 #define warstwa22 9 #define warstwa3 10 #define warstwa33 11 #define TSOP_PIN 7 //odbiornik podczerwieni #include <RC5.h> //biblioteka standard RC5 RC5 rc5(TSOP_PIN); //Informacja o podłączeniu odbiornika TSOP int wypelnienie=0; //zmienna dla PWM (dla funkcji dioda1) //Zmienne dla RC5 byte address; byte command; byte toggle; int button; void setup() { pinMode(TSOP_PIN ,INPUT); //odbiornik podczerwieni pinMode(warstwa1, OUTPUT); //diody jako wyjscie i wylacz wszystkie na starcie digitalWrite(warstwa1, 0); pinMode(warstwa11, OUTPUT); digitalWrite(warstwa11, 0); pinMode(warstwa2, OUTPUT); digitalWrite(warstwa2, 0); pinMode(warstwa22, OUTPUT); digitalWrite(warstwa22, 0); pinMode(warstwa3, OUTPUT); digitalWrite(warstwa3, 0); pinMode(warstwa33, OUTPUT); digitalWrite(warstwa33, 0); Serial.begin(9600); } void loop() { //Jeśli odebrano komendę if (rc5.read(&toggle, &address, &command)) { if(command == 2) { button=2; } // jesli odebrano zmienną command o wartosci 2 to zmienna button ma wartosc 2 else if (command == 1) { button=1;} } switch(button){ //wybierz zmienna button case 2: funkcja2(255,5,50); // Serial.println(button); break; case 1: funkcja1(250); //wlacz funkcje migania Serial.println(button); break; } } void funkcja1(int czas) { //funkcja1 digitalWrite(warstwa33, HIGH); delay(czas); digitalWrite(warstwa33, LOW); delay(czas); } void funkcja2( int ilewypelnienie, int zmiana, int czas){ //funkcja2 if(wypelnienie<ilewypelnienie){ analogWrite(warstwa1, wypelnienie); analogWrite(warstwa11, wypelnienie); analogWrite(warstwa2, wypelnienie); analogWrite(warstwa22, wypelnienie); analogWrite(warstwa3, wypelnienie); analogWrite(warstwa33, wypelnienie); wypelnienie+= zmiana; } if(wypelnienie==ilewypelnienie){ while(wypelnienie!=0){ analogWrite(warstwa1, wypelnienie); analogWrite(warstwa11, wypelnienie); analogWrite(warstwa2, wypelnienie); analogWrite(warstwa22, wypelnienie); analogWrite(warstwa3, wypelnienie); analogWrite(warstwa33, wypelnienie); wypelnienie=wypelnienie-zmiana; delay(czas); } } delay(czas); } I teraz po wciśnięciu przycisku 2 (tryb 2)do zmiennej button będzie ciągle przypisywał wartość 2 i nie mogę wtedy włączyć trybu 1. Tak to wygląda w monitorze portu szeregowego(screen w załączniku). I teraz jak zrobić, żeby dało się przełączać tryby lub wciśniecie tego samego przycisku powodowało by wyłączenie danego trybu? Napisałem prosty program, który po wciśnięciu switcha zapala diode i dioda gaśnie dopiero po ponownym wciśnięciu switcha. Tak wygląda ten kod: boolean buttonState1 = false; #define buttonPin1 7 //pin do odczytu stanu przycisku #define led1 11 void setup() { pinMode(led1, OUTPUT); //Dioda jako wyjście pinMode(buttonPin1, INPUT_PULLUP); //Przycisk jako wejście digitalWrite(led1, LOW); //Wyłączenie diody Serial.begin(9600); } void loop() { if (digitalRead(buttonPin1) == LOW) { delay(20); //20ms na obsługę drgań styków buttonState1 = !buttonState1; //zmiana na odwrotny stan if (buttonState1 == true){ digitalWrite(led1, HIGH); Serial.println(buttonState1); } else { digitalWrite(led1, LOW); Serial.println(buttonState1); } while (digitalRead(buttonPin1) == LOW); //czekamy tak długo, jak długo wciśnięty jest przycisk delay(20); //20ms na obsługę drgań styków } } Przerobiłem kod tak aby po wciśnieciu przycisku wywołał funkcje 2 lecz program nie działa tak jak chciałem tzn. rozjaśnienie i przygaszenie diody. boolean buttonState1 = false; // aktualny stan zaświecenia diody #define buttonPin1 7 //pin do odczytu stanu przycisku #define led1 11 //pin do obsługi diody int wypelnienie = 0; void setup() { pinMode(led1, OUTPUT); //Dioda jako wyjście pinMode(buttonPin1, INPUT_PULLUP); //Przycisk jako wejście digitalWrite(led1, LOW); //Wyłączenie diody Serial.begin(9600); } void loop() { if (digitalRead(buttonPin1) == LOW) { delay(20); //20ms na obsługę drgań styków buttonState1 = !buttonState1; //jest stan true i zamienia go na false if (buttonState1 == true){ funkcja2(255,5,50); Serial.println(buttonState1); Serial.println(wypelnienie); } else { digitalWrite(led1, LOW); // dioda sie Serial.println(buttonState1); Serial.println(wypelnienie); } while (digitalRead(buttonPin1) == LOW); //czekamy tak długo, jak długo wciśnięty jest przycisk delay(20); //20ms na obsługę drgań styków } } void funkcja2( int ilewypelnienie, int zmiana, int czas){ //ta sama funkcja co dioda tylko, ze na instrukcji warunkowej if if(wypelnienie<ilewypelnienie){ analogWrite(led1, wypelnienie); wypelnienie+= zmiana; } if(wypelnienie==ilewypelnienie){ while(wypelnienie!=0){ analogWrite(led1, wypelnienie); wypelnienie=wypelnienie-zmiana; delay(czas); } } delay(czas); } Wciśniecie przycisku powoduje ustawienie stanu logicznego 1 i zmianę wypełnienia o wartość 5. Wytłumaczy mi ktoś łopatologiczne jak napisać kod który: Po wciśnięciu przycisku na pilocie lub zwykłego switcha zapamięta wciśniecie przycisku jako logiczne 1 i będzie wykonywał wywołaną funkcje Ponowne wciśniecie tego samego przycisku spowoduje wyłączenie wywołanej funkcji lub wciśniecie innego przycisku zatrzyma aktualnie wywoływaną funkcję i wywoła inną Proszę o pomoc.
  3. Witam panowie wgrałem prosty program przykładowy blik do mikrokontrolera Arduino Uno. Teraz chciałbym aby ten program działał bez płytki arduino na płytce prototypowej. Na stronie arduino znalazłem poradnik jak to zrobić zrobiłem wszystko według instrukcji i nie działa program. Na pinie jest zaledwie 0,5V gdzie napięcie powinno raz mieć 5V a po 1sec 0V(bo taki program jest wgrany). Nie wiem co jest nie tak wszystko powinno byc dobrze zmontowane wklejam zdjęcia układu i proszę o pomoc.
×