Skocz do zawartości

matrix0606

Użytkownicy
  • Zawartość

    41
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O matrix0606

  • Ranga
    3/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Dopisz kawałek kodu który niestety zatrzyma Ci cały program na kilka chwil. Niestety na obecną chwilę nic innego nie przychodzi mi do głowy. Oczywiście kod jest przykładowy. Wszelkie konieczne zmienne i sposób odliczania czasu dopisz sobie sam. if (digitalRead(przycisk) == 0) { do { /* tu sobie wpisz obliczanie trzymania przycisku*/ } while (digitalRead(przycisk) == 0); } if (czasTrzymania <= 2) {//tu kod jak czas wynosi poniżej 2 czy innego czasu } if (czasTrzymania >= 4) {//tu kod jak czas wynosi powyżej 4 czy innego czasu }
  2. Jak by kolega mógł ciut jaśniej napisać bo nic nie rozumiem. Czy przycisk już istnieje i jest używany do czegoś czy go nie ma ? Jeśli nie ma to co stoi na przeszkodzie by taki przycisk dodać i po sprawie.
  3. Ja też miałem kilka razy problem z dodawaniem zdjęć o wadze około 2M, natomiast zdjęcia 4M dodawały się bez kłopotu przy czym zdjęcia pochodziły z mojego OPPO A52
  4. Nie do końca potrafię odpowiedzieć Ci na pytanie ale wiem że w pierwszej linii w tym kodzie masz nawias w niewłaściwym miejscu. Poniżej już poprawiony fragment. void ledsOn(){ if(zmiennaP1>3 && zmiennaP1<8 && (digitalRead(przycisk1)==LOW)) { // Jeśli jesteśmy w rozświetlaniu i zapaliły się więcej niż 3 diody to kolejne naciśnięcie przycisku zwiększa podtrzymanie o 5 jedn Natomiast poniżej masz kod który u mnie działa jak na filmiku który nagrywałem Ci gdzieś tam wyżej, pozmieniaj sobie tylko pinologię na początku w sekcji #drfine. #include <Arduino.h> #define led1 2 #define led2 3 #define led3 4 #define led4 5 #define led5 6 #define led6 7 #define led7 8 #define przycisk1 0 #define przycisk2 1 unsigned long oldTime = 0; //zmienna starego czasu między rozświetlaniem diod unsigned long newTime = 0; unsigned long oldTimePodtrzymania = 0; //zmienna starego czasu podtrzymania świecenia unsigned long newTimePodtrzymania = 0; //byte iloscKrokow = 17; // il. diod x 4 bo co 2 case-y się zapalają + podtrzymanie np 4 okresy i gaszenie byte zmiennaP1 = 0; //zmienna dla przycisku 1 byte zmiennaP2 = 0; //zmienna dla przycisku 2 byte stanPrzycisku1 = 0; //0-puszczony, 1-wciśnięty byte stanPrzycisku2 = 0; int odczytanaWartosc = 0; byte zmienna2 = 0; //zmienna ilosci seknud które mineły w podtrzymaniu int czasPodtrzymania = 0; bool wpusc1 = 0; bool wpusc2 = 0; void ledsOnUp(); void ledsOnDown(); void czasCzekania(); //void odczytCzujek(); void zeruj(); void debugging(); void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(przycisk1, INPUT_PULLUP); //przycisk 1 pinMode(przycisk2, INPUT_PULLUP); // przycisk 2 Serial.begin(9600); } void loop() { //odczytCzujek(); if ((digitalRead(przycisk1) == 0) && stanPrzycisku2 == 0) // && wpusc1 == 0) { stanPrzycisku1 = 1; zmiennaP1 = 0; wpusc1 = 1; } if ((digitalRead(przycisk2) == 0) && stanPrzycisku1 == 0) // && wpusc2 == 0) { stanPrzycisku2 = 1; zmiennaP2 = 0; wpusc2 = 1; } newTime = millis(); if (newTime - oldTime >= 1000) { oldTime = newTime; if (stanPrzycisku1 == 1) { zmiennaP1++; ledsOnUp(); } if (stanPrzycisku2 == 1) { zmiennaP2++; ledsOnDown(); } } //delay(500); //debugging(); } void ledsOnUp() { switch (zmiennaP1) { case 1: digitalWrite(led1, HIGH); break; case 2: digitalWrite(led2, HIGH); break; case 3: digitalWrite(led3, HIGH); break; case 4: digitalWrite(led4, HIGH); break; case 5: digitalWrite(led5, HIGH); break; case 6: digitalWrite(led6, HIGH); break; case 7: digitalWrite(led7, HIGH); break; case 8: czasCzekania(); break; case 9: digitalWrite(led1, LOW); break; case 10: digitalWrite(led2, LOW); break; case 11: digitalWrite(led3, LOW); break; case 12: digitalWrite(led4, LOW); break; case 13: digitalWrite(led5, LOW); break; case 14: digitalWrite(led6, LOW); break; case 15: digitalWrite(led7, LOW); stanPrzycisku1 = 0; wpusc1 = 0; break; } } void ledsOnDown() { switch (zmiennaP2) { case 1: digitalWrite(led7, HIGH); break; case 2: digitalWrite(led6, HIGH); break; case 3: digitalWrite(led5, HIGH); break; case 4: digitalWrite(led4, HIGH); break; case 5: digitalWrite(led3, HIGH); break; case 6: digitalWrite(led2, HIGH); break; case 7: digitalWrite(led1, HIGH); break; case 8: czasCzekania(); break; case 9: digitalWrite(led7, LOW); break; case 10: digitalWrite(led6, LOW); break; case 11: digitalWrite(led5, LOW); break; case 12: digitalWrite(led4, LOW); break; case 13: digitalWrite(led3, LOW); break; case 14: digitalWrite(led2, LOW); break; case 15: digitalWrite(led1, LOW); stanPrzycisku2 = 0; wpusc2 = 0; break; } } void czasCzekania() { //jako że program nie jest wymagający to tutaj również można użyć delay'a bo i tak program jest wstrzymany do //cała ta pętla wstrzyma Ci cały program póki nie zostanie spełniony warunek za wyrażeniem while { odczytanaWartosc = analogRead(A0); //odczytujesz wartość z portu A0 czasPodtrzymania = map(odczytanaWartosc, 0, 1023, 0, 10); //zamienia zmienną z przedziału od 0 do 1023 na zmienną od 0 do 10 (sekund) newTimePodtrzymania = millis(); void odczytCzujek(); if (newTimePodtrzymania - oldTimePodtrzymania >= 1000) // odliczaj po 1s { oldTimePodtrzymania = newTimePodtrzymania; zmienna2++; //co 1sek zwiększasz wartość zmiennej2 } } while (zmienna2 < czasPodtrzymania); //a pętla trwa póki zmienna2 nie osiągnie wartości zmapowanej zmiennej czasPodtrzymania } void zeruj() { digitalWrite(led1, 0); digitalWrite(led2, 0); digitalWrite(led3, 0); digitalWrite(led4, 0); digitalWrite(led5, 0); digitalWrite(led6, 0); digitalWrite(led7, 0); } void debugging() { Serial.print("zmiennaP1-"); Serial.println(zmiennaP1); Serial.print("zmiennaP2-"); Serial.println(zmiennaP2); }
  5. -> OTO EFEKT <- Lewa "czujka" nie działała z racji że wyskoczył mi przewód z arduino ale nie zmienia to działania prawej "czujki".
  6. Sory że wtrącę swoje trzy grosze, ale przecież widać na środku płytki że linie czerwona i niebieska są przerwane.
  7. A próbowałeś w ogóle wklepać podstawowy kod dla diod programowalnych ? Na przykład taki bo mi działa. Załącza jedną diodę po drugiej. jeśli Tobie załączy po trzy to jest jak pisałeś. #include <Arduino.h> #include <Adafruit_NeoPixel.h> #include<LiquidCrystal_I2C.h> #define LED_PIN 6 #define iloscLed 60 Adafruit_NeoPixel led(iloscLed, LED_PIN, NEO_GRB + NEO_KHZ800); unsigned long oldTime; unsigned long newTime; byte i = 0; byte a = 0; byte redColor = 0; byte greenColor = 25; byte blueColor = 25; byte jasnosc = 25; void wyswietlanie(); void setup() { Serial.begin(9600); led.begin(); led.show(); } void loop() { newTime = millis(); if (newTime - oldTime >= 50) { wyswietlanie(); oldTime = newTime; if (i < (iloscLed + 1)) { i++; } //Serial.print("I="); //Serial.println(i); //Serial.print("a="); //Serial.println(a); } } void wyswietlanie() { led.setBrightness(jasnosc); led.setPixelColor(i, (redColor), (greenColor), (blueColor)); if (i > iloscLed) { a++; led.setPixelColor(a, (0), (0), (0)); led.setPixelColor(0, (0), (0), (0)); } else { led.setPixelColor(0, (redColor), (greenColor), (blueColor)); } if (a > iloscLed) { i = 0; a = 0; } led.show(); }
  8. No ja nie przywiązywałem mocno wagi do rodzaju diod programowalnych ale wydaje mi się że są na 5V a nie na 12V. Jeśli się mylę to mnie poprawcie. Ja zastosowałem rezystor 470 Ohmów. Na przykład -> TAKI <- Przy tych diodach prawdopodobnie tak jest jak piszesz bo jest jeden sterownik na 3 diody.
  9. Jak kolega poprawi kod tak żeby się kompilował to wgram i przetestuję. Mój najnowszy kod działa jak na filmiku poniżej: -> FILMIK <-
  10. To co chcesz zrealizować to jedno z prostszych zadań. Dzisiaj mam wolne to złożę układ na stykówce i napiszę cały program.
  11. Ad1. Nie dobrze. Po pierwsze ledy nie są zasilane napięciem 12V tylko 5V, po drugie brak rezystora przed samymi diodami. Ad2. Arduino (np NANO czy UNO) ma wejście Vin. Ad3. Może to że masz ledy na 5V a podłączyłeś je pod 12V ? Ad4. Potrzebny jest jeden rezystor na wejście D_in Ad5. Możesz programować pojedyńczo jeśli oczywiście są to diody programowalne a nie osobne RGB.
  12. Ja cały czas myślałem że Ty tego nie symulujesz tylko testujesz na żywym organizmie. Ja nigdy nie testuję w symulatorze bo od testowania do realnego działania to daleko. W takim przypadku to wy gonimy swój własny ogon. Symulator coś tam pokaże ale to nie to samo co nawet najprostsze zestawienie układu powiedzmy na płytce stykowej.
  13. Tak było w poprzedniej wersji mojego programu ale teraz napisałem to co wyżej z racji że trzeba włączać i wyłączać ledy z dołu do góry ale i z góry do dołu. Coś czuję że na stykówce podepnę kilka ledów i to oprogramuję.
  14. Takie umiejscowienie wywołania funkcji "ledsOff" } while (zmienna2 < czasPodtrzymania); //a pętla trwa póki zmienna2 nie osiągnie wartości zmapowanej zmiennej czasPodtrzymania ledsOff(); zmienna2=0; } właśnie spowodowało jej jednokrotne wywołanie. I nic więcej się nie wydarzyło. Po wywołaniu funkcji "czasCZekania" na końcu tejże funkcji wywołałeś tylko raz funkcję "ledsOff" i więcej jej nie wywołałeś. Do tego wyzerowałeś zmienną2 i pozamiatane.
  15. Ponieważ nigdzie nie masz odwołania do funkcji "ledsOff" ? Popatrz na kod, gdzie masz skok do tej funkcji ? Bo ja nigdzie nie widzę. Spróbuj takiego kodu: #include <Arduino.h> #define led1 4 #define led2 5 #define led3 6 #define led4 7 #define led5 8 #define led6 9 #define led7 10 #define przycisk1 2 #define przycisk2 3 unsigned long oldTime = 0; //zmienna starego czasu między rozświetlaniem diod unsigned long newTime = 0; unsigned long oldTimePodtrzymania = 0; //zmienna starego czasu podtrzymania świecenia unsigned long newTimePodtrzymania = 0; //byte iloscKrokow = 17; // il. diod x 4 bo co 2 case-y się zapalają + podtrzymanie np 4 okresy i gaszenie byte zmiennaP1 = 0; //zmienna dla przycisku 1 byte zmiennaP2 = 0; //zmienna dla przycisku 2 byte stanPrzycisku1 = 0; //0-puszczony, 1-wciśnięty byte stanPrzycisku2 = 0; int odczytanaWartosc = 0; byte zmienna2 = 0; //zmienna ilosci seknud które mineły w podtrzymaniu int czasPodtrzymania = 0; void ledsOnUp(); void ledsOnDown(); void czasCzekania(); void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(przycisk1, INPUT_PULLUP); //przycisk 1 pinMode(przycisk2, INPUT_PULLUP); // przycisk 2 Serial.begin(9600); } void loop() { if (digitalRead(przycisk1) == 0) { stanPrzycisku1 = 1; } if (digitalRead(przycisk2) == 0) { stanPrzycisku2 = 1; } newTime = millis(); if (newTime - oldTime >= 1000) { oldTime = newTime; if (stanPrzycisku1 == 1) { zmiennaP1++; ledsOnUp(); } if (stanPrzycisku2 == 1) { zmiennaP2++; ledsOnDown(); } } } void ledsOnUp() { switch (zmiennaP1) { case 1: digitalWrite(led1, HIGH); break; case 2: digitalWrite(led2, HIGH); break; case 3: digitalWrite(led3, HIGH); break; case 4: digitalWrite(led4, HIGH); break; case 5: digitalWrite(led5, HIGH); break; case 6: digitalWrite(led6, HIGH); break; case 7: digitalWrite(led7, HIGH); break; case 8: czasCzekania(); break; case 9: digitalWrite(led1, LOW); break; case 10: digitalWrite(led2, LOW); break; case 11: digitalWrite(led3, LOW); break; case 12: digitalWrite(led4, LOW); break; case 13: digitalWrite(led5, LOW); break; case 14: digitalWrite(led6, LOW); break; case 15: digitalWrite(led7, LOW); stanPrzycisku1 = 0; zmiennaP1 = 0; break; } } void ledsOnDown() { switch (zmiennaP2) { case 1: digitalWrite(led7, HIGH); break; case 2: digitalWrite(led6, HIGH); break; case 3: digitalWrite(led4, HIGH); //itd break; case 4: digitalWrite(led4, HIGH); break; case 5: digitalWrite(led3, HIGH); break; case 6: digitalWrite(led2, HIGH); break; case 7: digitalWrite(led1, HIGH); break; case 8: czasCzekania(); break; case 9: digitalWrite(led7, LOW); break; case 10: digitalWrite(led6, LOW); break; case 11: digitalWrite(led5, LOW); break; case 12: digitalWrite(led4, LOW); break; case 13: digitalWrite(led3, LOW); break; case 14: digitalWrite(led2, LOW); break; case 15: digitalWrite(led1, LOW); stanPrzycisku2 = 0; zmiennaP2 = 0; break; } } void czasCzekania() { //jako że program nie jest wymagający to tutaj również można użyć delay'a bo i tak program jest wstrzymany do //cała ta pętla wstrzyma Ci cały program póki nie zostanie spełniony warunek za wyrażeniem while { odczytanaWartosc = analogRead(A0); //odczytujesz wartość z portu A0 czasPodtrzymania = map(odczytanaWartosc, 0, 1023, 0, 10); //zamienia zmienną z przedziału od 0 do 1023 na zmienną od 0 do 10 (sekund) newTimePodtrzymania = millis(); if (newTimePodtrzymania - oldTimePodtrzymania >= 1000) // odliczaj po 1s { oldTimePodtrzymania = newTimePodtrzymania; zmienna2++; //co 1sek zwiększasz wartość zmiennej2 } } while (zmienna2 < czasPodtrzymania); //a pętla trwa póki zmienna2 nie osiągnie wartości zmapowanej zmiennej czasPodtrzymania }
×
×
  • Utwórz nowe...