If nie działa (a tak poza tym to laser dla kota) - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: If nie działa (a tak poza tym to laser dla kota) (/watek-if-nie-dzia%C5%82a-a-tak-poza-tym-to-laser-dla-kota) |
If nie działa (a tak poza tym to laser dla kota) - Fl1p3r3k - 09-12-2019 Dzień dobry, Mam problem, a dokładniej chodzi o to, że chciałem zrobić sterowany laser dla kota działający z kontrolerem na telefonie (bluetooth). Zbudowałem go, a kiedy zacząłem go programować, okazało się, że nie umiem tego zrobić. Dzięki diagnostyce udało mi się ustalić, że komendy if nie działają i najzwyczajniej if nie wykrywa w odpowiednim momencie, że musi odpalić inne komendy. Czy mógłby ktoś mi pomóc? Załączam plik z (dotychczasowym) kodem. [attachment=915] Kod: #define Speed 3 //określenie pinu do definiowania szybkości silnika RE: If nie działa (a tak poza tym to laser dla kota) - Agregacik - 09-12-2019 Podejrzewam, że to co otrzymujesz nie jest zmienną int tylko char i stąd problem. RE: If nie działa (a tak poza tym to laser dla kota) - semi - 09-12-2019 Gwarantuję, że if działa! Dział tak jak każesz. Możesz wytłumaczyć, dlaczego czasem w kodzie porównujesz z liczbą Kod: if (c == 1){ //wykrycie pierwszego przycisku (nie działa) Kod: if (c == "2"){ //if od drugiego przycisku (nie działa) Co wyświetla serial monitor gdy wykonuje się fragment Kod: if (Serial.available()){ //if od wykrywania wiadomości z kontrolera (działa) RE: If nie działa (a tak poza tym to laser dla kota) - Robson Kerman - 09-12-2019 Pierwsza sprawa: Kod: digitalWrite(laser, moc); Kod: analogWrite(laser, moc); Druga sprawa, to jak wyglądają komendy wysyłane z telefonu? Tak naprawdę to wysyłasz kody ASCII, a c=Serial.read() przypisuje te kody do zmiennej c. Więc jeśli wyślesz char '1', to c=49 i za chwilę c=10 bo jeszcze mamy '\n' co w ASCII jest decymalnie równe 10. Proponuję: Kod: if (Serial.available()) RE: If nie działa (a tak poza tym to laser dla kota) - Fl1p3r3k - 09-12-2019 (09-12-2019, 20:28)semi napisał(a): Gwarantuję, że if działa! Dział tak jak każesz.Robiłem raz z liczbą, a raz ze znakiem, bo testy robiłem i zapomniałem usunąć. A gdy wykonuje ten fragment, to wyświetla to, co się wyślę z telefonu. RE: If nie działa (a tak poza tym to laser dla kota) - Fl1p3r3k - 09-12-2019 (09-12-2019, 20:33)Robson Kerman napisał(a): Pierwsza sprawa:Sprawdzałem i nie wysyła ascii tylko to co na telefonie wpisywałem. I nie chodziło mi o regulacje mocy, tylko o to, żeby można było wyłączyć, a 5V z pinu było za dużo i laser się przegrzewał, więc trzeba było zmienić PWN i wszystko działa z digitalRead. RE: If nie działa (a tak poza tym to laser dla kota) - Robson Kerman - 09-12-2019 (09-12-2019, 21:55)Fl1p3r3k napisał(a): Sprawdzałem i nie wysyła ascii tylko to co na telefonie wpisywałem. A jak to sprawdziłeś? Bo jeśli tak: Kod: if (Serial.available()){ //if od wykrywania wiadomości z kontrolera (działa) to uwierz mi, ale gdy wyślesz z telefonu 1, to c przyjmie wartość 49. Zrób taki eksperyment i napisz program: Kod: void setup() { I powiedz co się wyświetliło? 49 czy 1? Albo w swoim kodzie zamiast Kod: Serial.write(c) Kod: Serial.print(c) Albo zamiast if(c==1) napisz if(c==49), to gwarantuję, że warunek zadziała. RE: If nie działa (a tak poza tym to laser dla kota) - Fl1p3r3k - 09-12-2019 (09-12-2019, 22:50)Robson Kerman napisał(a):Po poprawce program zadziałał, dzięki za pomoc. Ten write był przez przypadek, nie pomyślałem i jakoś przepisałem część komendy od serwa do Seriala. Działa tak jak napisałeś. Jeszcze raz dzięki za pomoc.(09-12-2019, 21:55)Fl1p3r3k napisał(a): Sprawdzałem i nie wysyła ascii tylko to co na telefonie wpisywałem. |