Gal_kris Napisano Marzec 24, 2014 Udostępnij Napisano Marzec 24, 2014 Witam serdecznie wszystkich forumowiczów, trafiłem tu bo jak każdy kto chce coś wykonać to szuka informacji wszędzie (czyli tu). Mam pewien pomysł na przydatne mi urządzenie ale prawie zero wiadomości jak to zrobić, elektronicznie dam radę programistycznie z waszą pomocą co potrzebuję: program wsadowy do jakiegoś atmela, który będzie miał minimum 1 wejście i 2 wyjścia program musi czytać dane przychodzące z wejścia i gdy pokażą się konkretne dane dać sygnał na jedno bądź drugie wyjście. czyli pewnie w programie muszę utworzyć wzorzec do którego będzie porównany oryginał danych wchodzących na wejście. generalnie tyle mi wystarczy choć być może wzorców będzie 256, na tę chwilę porzeba 2 proszę o sugestie jak to ugryść puki co jestem na etapie 2 części kursu programowania pozdrawiam, Krystian Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Marzec 24, 2014 Udostępnij Marzec 24, 2014 Co będzie sygnałem wejściowym? Jaka będzie postać tej informacji, albo kto/co ją będzie wysyłał/o? Czy na wyjściu chcesz mieć tylko stany 0-1 pojawiające się na odpowiednich pinach procesora? Co będziesz z tym dalej robił? Jakieś silniki, przekaźniki itp? Cytuj Link do komentarza Share on other sites More sharing options...
Sabre Marzec 24, 2014 Udostępnij Marzec 24, 2014 Jaki to ma związek z tematyką forum? Jeśli nie robisz robota to niestety żaden, czyli twój temat wyląduje w jedynym słusznym miejscu - koszu! Cytuj Link do komentarza Share on other sites More sharing options...
Gal_kris Marzec 26, 2014 Autor tematu Udostępnij Marzec 26, 2014 Witam Dane pochodzić będą z rs485, na wyjściu owszem ma być 0 i 1. postać danych wygląda tak: 01 00 FF 01 00 C7 01 00 FF 01 00 C6 01 00 FF 01 00 C6 01 00 FF 01 00 C6 01 00 FF 01 00 C6 CA 00 00 01 00 FF 01 00 C6 CA 00 00 01 00 FF 01 00 C6 CA 00 00 01 00 FF 01 00 C6 CA 00 00 01 00 FF 01 00 C6 CA 00 00 01 00 FF 01 00 C6 CA 00 00 takie coś będzie leciało na wejęsie z tym że CA 00 00 to jedeno z danych które mnie interesuje powinno dać na wyjście 1 stan 1 a na wyjście 2 stan 0 co to będzie owszem robot a na razie jego część komunikacyjna po rs485, podłączony będzie do hexacoptera, no tyle zdradzę na razie. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Gal_kris Październik 26, 2015 Autor tematu Udostępnij Październik 26, 2015 Witam od czasu napisanie pierwszego postu, trochę wody upłynęło lecz ja tak długo wczytywałem się w publikacje związane z programowaniem, mam już na swoim koncie pierwszą zrobioną rzecz, to zabawka dla kota laserowa opisana na majstrkowo.pl zrobiona na arduino uno, ponieważ mam koty a one nie lubią tak jak psy gdy laser stale pomyka na podłodze dodałem do całości czujkę ruchu więc cały układ grzecznie stoi w miejscu i dopiero gdy kot zaatakuje rusza o trzy pozycje do przodu.. działa świetnie na końcu wgrałem wszystko do arduino nano by odzyskać uno na inny projekt. Mam stale zagwostkę z odebraniem danych z rs485 producent pisze że dane wyglądają tak: 73002000010000 a ja je widze w terminalu tak: 01 00 FF 01 00 C7 transmisja 9600,8,1,0 o co biega?? bo nie rozumiem Gal Cytuj Link do komentarza Share on other sites More sharing options...
Gal_kris Listopad 8, 2015 Autor tematu Udostępnij Listopad 8, 2015 Witam Program już napisałem i działa świetnie, jedyny problem jaki po drodze wyskoczył to mało stabilna praca układu max485, lecz zdaje sobie sprawę że płytka stykowa może od czasu do czasu coś tam powodować, jak przeniosę to wszystko na laminat, będzie ok. Dziękuję za wskazówki jakie otrzymałem na forum. Krystian 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Listopad 8, 2015 Udostępnij Listopad 8, 2015 Gal_kris, to może poradzisz na przyszłość dla innych jak rozwiązać podobny problem? Cytuj Link do komentarza Share on other sites More sharing options...
Gal_kris Luty 17, 2019 Autor tematu Udostępnij Luty 17, 2019 Witam Napiszę dla potomnych jak poradzić sobie z odczytem danych idących w protokole rs485. Na początek napiszę co miałem do dyspozycji: klawiatura CCTV, konwerter RS485 na USB, Program Putty ( ale ostateczne znalazłem w sieci 232analizer. założenie mojego projektu: komunikacja klawiatury CCTV innego producenta z Rejestratorem cyfrowym innego producenta, ostatecznie przy okazji powstało kilka urządzeń sterowanych przez wspomnianą klawiaturę. protokół komunikacji wysyłany przez naciskanie klawiszy w klawiaturze można było zaczytać przez konwerter bezpośrednio po podłączeniu do urządzenia, natomiast rejestrator i protokół w nim zawarty znalazłem na stronie producenta Hikvision co do programu i porównaniu danych byte buffer[2]; int cnt = 0; #define kanal1 11 #define kanal2 12 void setup() { Serial.begin(9600); //Serial.println("Start"); } void loop(void) { pinMode(kanal1, OUTPUT); //Konfiguracja wyjść pinMode(kanal2, OUTPUT); // pinMode(dioda, OUTPUT); digitalWrite(kanal1, LOW); //Doziemienie wyjść digitalWrite(kanal2, LOW); // czytamy bajty if ((cnt < 2) && Serial.available()) buffer[cnt++] = Serial.read(); if (cnt == 2) // odczytujemy wszyskie bajty //Serial.print(Serial.available()); { //Serial.print("odpalamy kanal 1); boolean same = true; // zakładamy że tablice są takie same byte ans[]={0xDC,0x01,0x00}; //znaki do porównania for (int i=0; i< 2 && same; i++) same = (buffer[i] == ans[i]); if (same) { digitalWrite(kanal1, HIGH); //To włączamy kanal 1 delay(20); digitalWrite(kanal1, LOW); //Serial.println(" odebrałem dane 1"); Serial.flush(); cnt = 0; } if ((cnt < 2) && Serial.available()) buffer[cnt++] = Serial.read(); if (cnt == 2) // odczytujemy wszyskie bajty //Serial.print(Serial.available()); { //Serial.print("odpalamy monitor 2"); boolean same = true; byte ans2[]={0xDC,0x02,0x0}; for (int i=0; i< 2 && same; i++) same = (buffer[i] == ans2[i]); if (same) { digitalWrite(kanal2, HIGH); //To włączamy kanal 2 delay(20); digitalWrite(kanal2, LOW); //Serial.println("odebrałem dane 2"); } Serial.flush(); cnt = 0; //Serial.println("czyścimy bufor"); } 1 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!