Skocz do zawartości

MC2Systems

Użytkownicy
  • Zawartość

    7
  • Rejestracja

  • Ostatnio

Reputacja

2 Neutralna

O MC2Systems

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna

Ostatnio na profilu byli

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

  1. @ethanak No właśnie mam problem z przełożeniem tego co pojawia się np. na ekranie komputera gdy piszę program, a z tym co wyświetla port szeregowy. Gdy piszę w np. php print('coś tam'); otrzymuję pojedynczy wiersz na wyjściu z tym tekstem i tyle. Gdy piszę w ArduinoC Serial.print("Klawisz"); Serial.println(nowy); w porcie szeregowym mam efekt przewijania się wielu wierszy Klawisz i sporadycznie gdy wduszę jakiś klawisz to wyświetli się jaki. I to nie jest to co chcę uzyskać. Efekt który chcę uzyskać to coś podobne do tego co mam w php. Wyświetli się aktualny klawisz i nie ma tej całej sekwencji "Klawisz". Docelowy efekt ma być taki że gdy naciskam klawisz pojawia się dźwięk o zdefiniowanych parametrach (wysokości i długość) i najpierw pojawia się dany znak, zamieniany po sekundzie na # lub *. Po prostu ma być podgląd tego co się nacisnęło bez zbyt długiego czasu na zobaczenie przez osoby postronne. Docelowo z tej całej funckjonalności zrobić funkcję która będzie zwracać prawdę lub fałsz i na bazie tego system albo włącza alarm albo rozbraja się.
  2. Słuszna uwaga Późna pora też mi się udzieliła. To co zamieściłem to była ewolucja z użycia nieskutecznego innych pętli... w efekcie faktycznie switch jest niepotrzebny. Skrócenie kodu zaowocowało też zmniejszeniem zajętości pamięci... Same plusy Ok, to teraz już chyba poprawnie. Docelowo wysyłki na monitor portu szeregowego mają być zastąpione wyświetlaczem LCD, ale czekam na ekspander. Przydało by się jeszcze by po każdym wciśnięciu klawisza został wysłany na LCD podgląd, a po sekundzie nadpisany *. #include <Keypad.h> const byte ROWS = 4; // ile wierszy const byte COLS = 4; //ile kolumn byte rowPins[ROWS] = {5, 4, 3, 2}; byte colPins[COLS] = {6, 7, 8, 9}; // MAPOWANIE char keys[ROWS][COLS] = { //mapowanie klawiatury {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; //inicjalizacja klawiatury Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup() { Serial.begin(9600); } void loop() { char klawisz = klawiatura.getKey(); String szyfr = "92740*AC"; String kod; String k = String(klawisz); //string z klawiatury String a = ""; //ciąg wyjściowy String a1; //string pomocniczy if (klawisz != NO_KEY) { for (int i = 1; i < 4; i++) { while (klawisz != '#' ) //klawisz zakończenia { kod = kod_wyjsciowy(a, k); a1 = kod; a = a1; klawisz = klawiatura.getKey(); k = String(klawisz); } // jeśli # to porównaj z szyfrem if (a1 != szyfr) { int proby = 3 - i; Serial.print("Próba "); Serial.print(i); Serial.print("#3 "); Serial.print("błędne hasło "); Serial.println(a1); delay(1500); a = ""; klawisz = klawiatura.getKey(); k = String(klawisz); } else if (a1 == szyfr) { Serial.print ("super podałeś prawidłowe hasło "); Serial.println(a1); delay(1500); } } if (a1 != szyfr) { Serial.print("ALARM"); delay(2000); } } // koniec NO_KEY } String kod_wyjsciowy(String stary, String nowy) { String wyjscie; Serial.print("Klawisz"); Serial.println(nowy); // nie działa zgodnie z oczekiwaniem wyjscie = stary + nowy; return wyjscie; } Niestety wyświetlanie wprowadzonego znaku w pojedynczym wierszu pojedynczo nie działa tak jak tego oczekiwałem. Cały czas przewija się sekwencja. Tak że tutaj mile widziana sugestia jak to rozwiązać.
  3. Dzięki za wskazówkę. Czyli zostaje albo Arduino Mega albo expandery... Póki co expander zastosuję.
  4. W odniesieniu do wcześniejszej mojej wypowiedzi... doszedłem do wniosku że trochę zmodyfikuję rozwiązanie i... natrafiłem na problem. Z uwagi na to że mówimy o "systemie alarmowym", wydaje mi się przydało by się trochę bezpieczniej podejść do tematu, no przynajmniej ja chciałbym Założyłem 2 etapy: 1. zamiast wprowadzania znaku i od razu kontroli poprawności (co jest prostsze ale wprowadzać może problematyczne sytuacje) chcę wprowadzać sekwencji np. 4 znaków zakończonych znakiem #. I dopiero dla tej sekwencji wykonywana jest kontrola poprawności. Takie rozwiązanie zwiększa ilość kombinacji. 2. Wprowadzenie kontroli ilości prób. Powiedzmy 3 próby zanim alarm się uruchomi. Zmontowałem podstawowy układ do wprowadzania danych z "klawiatury" i wyświetlania wyniku na monitorze portu szeregowego. Do tego kawałek kodu. Na początek by wiedzieć co się dzieje i jakie są pośrednie wyniki, ustawiłem warunki dla 3 znaków i kontrolę na porcie szeregowym dla każdego etapu. Oczywiście jak poprawnie zadziała to zbędne elementy się usunie. #include <Keypad.h> const byte ROWS = 4; // ile wierszy const byte COLS = 4; //ile kolumn byte rowPins[ROWS] = {5, 4, 3, 2}; byte colPins[COLS] = {6, 7, 8, 9}; // MAPOWANIE char keys[ROWS][COLS] = { //mapowanie klawiatury {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; //inicjalizacja klawiatury Keypad klawiatura = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup() { Serial.begin(9600); } void loop() { char klawisz = klawiatura.getKey(); String kod; String k = String(klawisz); //string z klawiatury String a = "_"; //ciąg wyjściowy String a1; //string pomocniczy if (klawisz != NO_KEY) { while (klawisz != '#' ) //klawisz zakończenia { switch (klawisz) { case 'A': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz A "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case 'B': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz B "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case 'C': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz C "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case 'D': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz D "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '1': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 1 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '2': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 2 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '3': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 3 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '4': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 4 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '5': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 5 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '6': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 6 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '7': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 7 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '8': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 8 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '9': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 9 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '0': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz 0 "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; case '*': { kod = kod_wyjsciowy(a, k); Serial.print("klawisz * "); Serial.print(" kod="); Serial.print(kod); a1 = kod; Serial.print(" a1="); Serial.println(a1); delay(10); } break; default: break; } a = a1; klawisz = klawiatura.getKey(); k = String(klawisz); } // jeśli # to porównaj z szyfrem } // koniec NO_KEY Serial.println(kod); delay(10); } String kod_wyjsciowy(String stary, String nowy) { String wyjscie; wyjscie = stary + nowy; return wyjscie; } Podstawowe pytanie na ten moment to jak zoptymalizować ilość pamięci którą program zajmuje. Obecnie niewiele program robi a już zabiera 22% pamięci programu i 25% pamięci dynamicznej.
  5. No to ja dorzucę swoich kilka pytań. Może jakieś sugestie się Wam nasuną. Bazuję na programie rozbudowanym już o przerwanie (jak będę przy komputerze wrzucę listing). Usiłuję rozwiązać problem: 1. Po uzbrojeniu alarmu i rozłączeniu kontaktronu mam 10s na rozbrojenie. OK. Po ponownym uzbrojeniu, przy próbie rozbrojenia od razu włącza się alarm. Wnioskuję że nie jest "resetowany" wskaźnik numeru wprowadzonego znaku. Jak to zmienić? 2. W sumie najlepszym chyba rozwiązaniem było by gdyby cała sekwencję pinu wprowadzić i dopiero całość akceptować jakimś klawiszem, a nie po kolei - obecna forma nie zostawia miejsca na korektę. Z drugiej strony można by to rozwiązanie ograniczyć np. do 3 prób. 3. Rozbrojenie alarmu przez wywołanie przerwania jest ok, ale warto było by jeszcze dodać możliwość rozbrojenia gdy już alarm się aktywuje. Nie wiedzieć czemu gdy w tym przypadku próbuję wprowadzić coś z klawiatury aktywny jest tylko jeden klawisz "6" reszta nie generuje niczego w podglądzie Serial.println. 4. Czego powinienem użyć by rozbudować układ z ćwiczenia o ekran lcd? Patrząc na wcześniejsze ćwiczenia z LCD to zarówno klawiatura jak i LCD korzystają z tych samych pinów. Nie mówiąc już o tym że np. próbuję rozbudować układ o kolejne PIR i kontaktrony i tutaj już w ogóle brakuje pinów. Na ten moment to wszystko chyba... ale kolejne pomysły na rozbudowę się pojawią.
  6. Szukam skutecznego alternatywnego rozwiązania. Mam rozwiązanie wzorcowe - Kontroler BSP DJI połączony z np. telefonem Samsung'a i appką DJI GO i inną dedykowaną. Rozwiązanie które chcę uzyskać to zastąpienie telefonu SBC (w sumie jakimkolwiek) - a że mam na stanie RPi3 i Odroida C2 to od tego chciałem zacząć. Zainstalowałem zatem na RPi androida, dorzuciłem DJI GO. Niestety nie widzi kontrolera BSP. Podobnie jest w przypadku ODROIDA tu też obie appki uruchamiają się poprawnie i czekają na "znalezienie" kontrolera. Zastanawiam się czy problem tkwić może w przewodzie, bo łączę kontroler i SBC poprzez standardowej wielkości port USB, w telefonie zazwyczaj jest microUSB. Pytanie zatem czego brakuje. Kontroler BSP + Telefon (android) działa... Kontroler BSP + SBC (Android) nie działa.... Albo jak inaczej podłączyć to by zadziałało? Coś doradzicie?
  7. Mam taki problem na który szukam od kilku dni odpowiedzi w necie. Zakupiłem zestaw rozszerzony kursu Raspberry... by "upiec dwie pieczenie na jednym ogniu". Z jednej strony elementy zestawu w którym sam mogę poeksperymentować, a drugie kurs który usystematyzuje wiedzę. Do jednego mojego projektu potrzebuję by na RBp 3 zainstalować Androida w wersji powyżej 4.4. i przetestować poprawność działania dedykowanej aplikacji. Generalnie chodzi o to by aplikację na tabletowego androida spróbować uruchomić pod androidem na raspberry 3. Mam do tego raspberry 3 z rozszerzonego zestawu forbot i 7"dedykowany touchscreen (Waveshare 7" HDMI LCD©. Android bez większych problemów się uruchamia, niestety nie mieści się na ekranie. Nie ma dostępu do części nawigacji i możliwości uruchamiania czegokolwiek (przyciski nawigacyjne u dołu ekranu są poza obszarem wyświetlania). Zrobiłem podgląd na dużym monitorze i tu jest OK, czyli to ewidentnie wina konfiguracji wyświetlania. Dodatkowo by "trafić" palcem w dany aktywny element na ekranie trzeba przycisnąć mocno obok niego. Czyli nie działa poprawnie synchronizacja wyświetlania z powłoką dotykową. Pytanie jak dostosować rozdzielczość ekranu do 1024x600? Od razu mówię że framebuffer_width=1024 oraz framebuffer_height=600 nie działają. Podobnie polecenia znajdujące się w instrukcji do ekranu. Jakieś sugestie?
×
×
  • Utwórz nowe...