Skocz do zawartości

Przeszukaj forum

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

  • Szukaj wg tagów

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

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i 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 - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY 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

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

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


Imię


Strona

Znaleziono 4 wyniki

  1. dzień dobry mam problem z działaniem skryptu #include <Servo.h> Servo myservo; int val = 0; void setup() { Serial.begin(9600); myservo.attach(9); pinMode(7,INPUT_PULLUP); } void loop() { int pkt = 1; while (true) { if(digitalRead(7) == LOW) { if(pkt < 6) { pkt = 0; } else { if(pkt == 1) { myservo.write(90); delay(25); } if(pkt == 2) { myservo.write(100); delay(25); } if(pkt == 3) { myservo.write(110); delay(25); } if(pkt == 4) { myservo.write(115); delay(25); } if(pkt == 5) { myservo.write(125); delay(25); } if(pkt == 6) { myservo.write(135); delay(100); } } } } }
  2. Cześć, chce zrobić termostat, który będzie oparty na dwóch rożnych ekranach które będą przełączane jednym guzikiem. Część, kodu mam napisane jednak doszedłem do momentu w którym nie wiem co może być nie tak. Przyjmę każda pomoc w ruszeniu z miejsca 🙂 Wiem, że podobny wątek był poruszany na forum jednak nie chce zmieniać pierwotnego problemu innego uzytkownika. Poniżej załączam kod na jakim działam. Część kodu jest napisana prze zemnie a część zapożyczona z gotowego. #include <Wire.h> #include <LiquidCrystal_I2C.h> #include "dht.h" LiquidCrystal_I2C lcd(0x3F,20,4); dht DHT22; #define DHT22PIN 13 int menu =1; // This variable stores the current Screen number boolean hasChanged = true; const int buttonPin = 10; // the number of the pushbutton pin int buttonState; // the current reading from the input pin int lastButtonState = LOW; // the previous reading from the input pin unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers unsigned long aktualnyCzas = 0; // Przypisanie long temperatury i willgotnosci unsigned long zapamietanyCzas = 0; unsigned long roznicaCzasu = 0; void setup() { lcd.init();// initialize the lcd lcd.backlight(); pinMode(buttonPin, INPUT_PULLUP); } void loop() { if (hasChanged == true) { switch(menu) { case 1: { secondScreen(); } break; case 2: { fourthScreen(); //temperatura } break; case 3: { fifthScreen(); // wilgotnosc } break; case 0: { } break; } } //------------------------------- // BEGIN of the switch debouncing code int reading = digitalRead(buttonPin); if (reading != lastButtonState) { // reset the debouncing timer lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // whatever the reading is at, it's been there for longer // than the debounce delay, so take it as the actual current state: // if the button state has changed: if (reading != buttonState) { buttonState = reading; // only toggle the LED if the new button state is HIGH if (buttonState == HIGH) { hasChanged = true; menu++; } } else { hasChanged = false; } } lastButtonState = reading; // END of the switch Debouncing code // -------------------------------------- if (menu > 3){ menu = 1; } } /////////////////////////////////////////////////////// WIDOK GŁÓWNY ///////////////////////////////////////////////// void secondScreen() { lcd.clear(); lcd.setCursor(0,0); // Column, line lcd.print(" Ekran nr 1 "); lcd.setCursor(0,1); lcd.print(" na moim menu !! "); } /////////////////////////////////////////////////////// TEMPERATURA ////////////////////////////////////////////////// void fourthScreen() { aktualnyCzas = millis(); roznicaCzasu = aktualnyCzas - zapamietanyCzas; if (roznicaCzasu >= 1000UL) { int chk = DHT22.read(DHT22PIN); zapamietanyCzas = aktualnyCzas; lcd.clear(); lcd.setCursor(0,0); lcd.print("Temperatura (C): "); lcd.setCursor(0,1); lcd.print((float)DHT22.temperature, 2); } } /////////////////////////////////////////////////////// WILOGTNOSC //////////////////////////////////////////////////// void fifthScreen() { aktualnyCzas = millis(); roznicaCzasu = aktualnyCzas - zapamietanyCzas; if (roznicaCzasu >= 1000UL) { int chk = DHT22.read(DHT22PIN); zapamietanyCzas = aktualnyCzas; lcd.clear(); lcd.setCursor(0,0); lcd.print("Wilgotnosc: "); lcd.setCursor(0,1); lcd.print((float)DHT22.humidity, 2); } } Główne problemy to: 1. Menu przełącza się miedzy ekranami, jednak zmienne (temperatury oraz wilgotności) nie są aktualizowane na bieżąco, widać tylko jakby jedną "klatkę" danego odczytu. Dopiero po powrocie do tego samego ekranu wartości jakby się aktualizowały. Chciałbym, żeby dane aktualizowały się na bieżąco. No i jak za szybko kliknę to czasami przeskakuje o 2 ekrany. 2. Chciałbym dodać do tego termostatu, dwoma kolejnymi przyciskami, funkcje regulacji temperatury, by przekaźniki wyłączały się po osiągnięciu założonych wartości. 3. Punkt na którym zależy mi póki co najmniej, optymalizacja kodu oraz ewentualnie dodanie dodatkowych funkcji. Jestem mega amatorem pod względem optymalizacji, a wiem ze wiele spraw można uprościć, dodając biblioteki. Kurs na Arduino przerobiony, przynajmniej pierwsza część w 100 %, część druga w około 40%. Dziękuje bardzo za wszelką pomoc. 🙂
  3. Witam! Pewnie problem na zasadzie początkującego użytkownika STM32 ale co poradzę - wystąpił ! 🙂 Mianowicie, mam podłączone 3 przyciski do STM32F103CBT6, przyciski podłączone z rezystorem pull-up i poprzez kondensator filtrujący. W procesorze włączony również pull-up na wejściu od przycisku. Reakcja na wciśnięcie (zbocze opadające) miała być uruchamiana z wykorzystaniem przerwań zewnętrznych. I tu pojawia się problem bo o ile program nie zajmuje się czymś innym albo tylko jakimiś drobnymi rzeczami to wszystko jest w porządku - reakcja następuje od razu. Jeśli tylko zacznę np. więcej rzeczy wyświetlać na OLEDzie to reakcja następuje losowo. Wszystkie przerwania mają priorytety i grupy ustawione na 0. Dodam, że sprawdzałem na oscyloskopie czy występują jakiekolwiek drgania styków - zbocze opadające jest gładziutkie, nie ma możliwości, ze tu coś jest nie halo. Program pisany w HALu tak jak w kursie Forbota. Jeśli będzie potrzeba to dodam listing. Dodatkowo również w ten sam sposób uruchomione są przerwania z zewnętrznego urządzenia i tam wszystko śmiga, no a na przyciskach nie chce - ciekawe. Proszę o jakieś sugestie co to może być, czy ktoś się z czymś spotkał.
  4. Witam, Natknąłem się problem z odpowiednim wykonywaniem warunków w funkcji SwitchCase. w poniższym kodzie program nie chce wejść w case 2, oraz case 3. void sensorTypeUpDate () { switch (actualSensor) { case 1: Serial.print("wszedl w 1 petle"); int odczyt = analogRead(lightSensor); light = map(odczyt, 0, 1023, 0, 100); sensorType = "Jasnosc:"; sensorValue = String(light) + "%"; break; case 2: Serial.print("wszedl w 2 petle"); humidity = dht.getHumidity(); if (dht.getStatusString() == "OK") { sensorType = "Wilgotnosc:"; sensorValue = String(humidity) + "RH%"; } break; case 3: Serial.print("wszedl w 3 petle"); temperature = dht.getTemperature(); if (dht.getStatusString() == "OK") { sensorType = "Temperatura:"; sensorValue = String(temperature) + "*C"; } break; } } Linia Serial.print potrzebna mi była do sprawdzenia czy program wchodzi w dany warunek. O dziwo gdy zmienię kolejność warunków program działa poprawnie. Nie jest to pierwszy raz, jak się z tym spotykam. Poniższy kod działa. void sensorTypeUpDate () { switch (actualSensor) { case 3: Serial.print("wszedl w 3 petle"); temperature = dht.getTemperature(); if (dht.getStatusString() == "OK") { sensorType = "Temperatura:"; sensorValue = String(temperature) + "*C"; } break; case 2: Serial.print("wszedl w 2 petle"); humidity = dht.getHumidity(); if (dht.getStatusString() == "OK") { sensorType = "Wilgotnosc:"; sensorValue = String(humidity) + "RH%"; } break; case 1: Serial.print("wszedl w 1 petle"); int odczyt = analogRead(lightSensor); light = map(odczyt, 0, 1023, 0, 100); sensorType = "Jasnosc:"; sensorValue = String(light) + "%"; break; } } Z góry dziękuje za pomoc.
×
×
  • 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.