Skocz do zawartości

Haragorn

Użytkownicy
  • Zawartość

    13
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O Haragorn

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna
  1. Faktycznie, zapomniałem o opornikach. Dziękuję za podpowiedź. Co do stabilizatorów to oczywiście powinny być inne. Dziękuję za sprawdzenie
  2. Witam. Na schemacie przedstawiłem prosty schemat centrali alarmowej, który wykonałem w celach nauki. Czy mógłby ktoś sprawdzić, czy jest to poprawnie wykonany? Pozdrawiam
  3. Dla potomnych. Program jest testowy, więc nie oczekujcie zaawansowanej technologii. Zadaniem jest sprawdzenie poprawności działania I2C. Kod dla Master: //------------------------------------------------------- // Enable debug prints to serial monitor #define MY_DEBUG // Enable serial gateway #define MY_GATEWAY_SERIAL // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender) #if F_CPU == 8000000L #define MY_BAUD_RATE 38400 #endif // Enable inclusion mode #define MY_INCLUSION_MODE_FEATURE // Enable Inclusion mode button on gateway #define MY_INCLUSION_BUTTON_FEATURE // Set inclusion mode duration (in seconds) #define MY_INCLUSION_MODE_DURATION 60 // Digital pin used for inclusion mode button #define MY_INCLUSION_MODE_BUTTON_PIN 3 #define MY_REPEATER_FEATURE //------------------------------------------------------- //------------------------------------------------------- #include <Wire.h> #include <MySensors.h> #include <SPI.h> #include <MFRC522.h> #include <Bounce2.h> //------------------------------------------------------- //------------------------------------------------------- #define BUTTON_PIN A9 Bounce debouncer = Bounce(); bool y = true; //------------------------------------------------------- //------------------------------------------------------- void setup() { Wire.begin(); // join i2c bus (address optional for master) pinMode(BUTTON_PIN, INPUT_PULLUP); // After setting up the button, setup debouncer. debouncer.attach(BUTTON_PIN); debouncer.interval(15); Serial.begin(9600); } //------------------------------------------------------- //------------------------------------------------------- void loop() { if (debouncer.update()) { // Get the update value. int value = debouncer.read(); // Send in the new value. if(value == LOW) { Wire.beginTransmission(10); // transmit to device #8 Wire.write(y); // sends one byte Wire.endTransmission(); // stop transmitting unsigned char statuss = Wire.endTransmission(); Serial.println (statuss); } } } //------------------------------------------------------- Kod dla Slave : //------------------------------------------------------- #include <Wire.h> //------------------------------------------------------- //------------------------------------------------------- volatile bool b; //------------------------------------------------------- //------------------------------------------------------- void setup() { Wire.begin(10); // join i2c bus with address #8 Wire.onReceive(receiveEvent); // register event Serial.begin(9600); // start serial for output } //------------------------------------------------------- //------------------------------------------------------- void loop() { if (b == true) { Serial.print(b); b = !b; } delay(100); } //------------------------------------------------------- //------------------------------------------------------- // function that executes whenever data is received from master // this function is registered as an event, see setup() void receiveEvent(int howMany) { while (0 < Wire.available()) { bool c = Wire.read(); // receive byte as a character b=c; } } //-------------------------------------------------------
  4. Rezystory są po 4.7 k Om To też zmieniałem... Udało się . Już nawet sam nie wiem co zrobiłem. Wgrałem przykłady z biblioteki Wire i zmieniłem je pod siebie. Jakimś cudem wszystko działa. Dziękuję Ci za pomoc
  5. Nie wiem, czy będzie dokładnie wszystko widać. Wydaje mi się, że jest dobrze ponieważ, gdy wgram przykłady z biblioteki Wire to wszystko ładnie działa.
  6. Kod dla Mega: // Enable debug prints to serial monitor #define MY_DEBUG // Enable serial gateway #define MY_GATEWAY_SERIAL // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender) #if F_CPU == 8000000L #define MY_BAUD_RATE 38400 #endif // Enable inclusion mode #define MY_INCLUSION_MODE_FEATURE // Enable Inclusion mode button on gateway #define MY_INCLUSION_BUTTON_FEATURE // Inverses behavior of inclusion button (if using external pullup) //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP // Set inclusion mode duration (in seconds) #define MY_INCLUSION_MODE_DURATION 60 // Digital pin used for inclusion mode button #define MY_INCLUSION_MODE_BUTTON_PIN 3 #define MY_REPEATER_FEATURE //----------------biblioteki----------------------------- #include <SPI.h> #include <MFRC522.h> //RFID RC522 #include <Wire.h> //Dla I2C #include <Bounce2.h> //Obsługa przycisków #include <MySensors.h> //------------------------------------------------------- //----------------definiowanie elementów----------------- #define BUTTON_PIN 31 #define RELAY_1 24 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) #define NUMBER_OF_RELAYS 1 // Total number of attached relays #define RELAY_ON 1 // GPIO value to write to turn on attached relay #define RELAY_OFF 0 // GPIO value to write to turn off attached relay //------------------------------------------------------- //----------------zmienne-------------------------------- Bounce debouncer = Bounce(); volatile boolean stan = true; //------------------------------------------------------- //------------------------------------------------------- void before() { for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); // Set relay to last known state (using eeprom storage) digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF); } } //------------------------------------------------------- //------------------------------------------------------- void setup() { // Setup locally attached sensors delay(5000); // Setup the button. pinMode(BUTTON_PIN, INPUT_PULLUP); // After setting up the button, setup debouncer. debouncer.attach(BUTTON_PIN); debouncer.interval(5); digitalWrite(RELAY_1, LOW); //Inne Serial.begin(9600); SPI.begin(); } //------------------------------------------------------- //------------------------------------------------------- // Główna funkcja sterująca void loop() { // Send locally attached sensor data here if (debouncer.update()) { // Get the update value. int value = debouncer.read(); // Send in the new value. if(value == LOW) { stan = !stan; Serial.println(stan); Wire.beginTransmission(10); Wire.write(stan); // sends one byte Wire.endTransmission(); unsigned char statuss = Wire.endTransmission(); Serial.println (statuss); } } } //------------------------------------------------------- Kod dla Uno: //----------------biblioteki----------------------------- #include <Servo.h> //Servo #include <Wire.h> //Dla I2C //------------------------------------------------------- //----------------zmienne-------------------------------- volatile byte stan = 0; //------------------------------------------------------- //------------------------------------------------------- void setup() { Wire.begin(10); Wire.onReceive(czytaj); Serial.begin(9600); } //------------------------------------------------------- //------------------------------------------------------- // Główna funkcja sterująca void loop() { if (stan > 0) { Serial.println(stan); } } //------------------------------------------------------- //------------------------------------------------------- void czytaj(int howMany) { if (Wire.available()) { stan = Wire.read(); // receive byte as a character } } //-------------------------------------------------------
  7. Wdrożyłem wszystkie sugestie. Wybrałem adres powyżej 8. Ustawiłem na master i slave adres 10 i teraz komunikacja nie działa w ogóle, ponieważ slave nie potwierdziło odbioru adresu (błąd 2. Standardowo sprawdzam status transmisji w Mega na monitorze portu).
  8. Dzień dobry Mam połączone Arduino Mega z Uno przy pomocy I2C do komunikacji. Mega jest "master", który po wciśnięciu przycisku wysyła wartość zmiennej "stan". Uno jako "slave" ma tą wartość odczytać i wykonać odpowiednie polecenie. I tu jest problem, ponieważ o ile Mega wysyła wartość (gdy sprawdzam status transmisji komendą: unsigned char statuss = Wire.endTransmission(); Serial.println (statuss); to wartość "statuss" = 0, czyli sukces) to gdy sprawdzam monitor Uno, to nic tam nie ma do wyświetlenia. Czy mógłby mi ktoś powiedzieć gdzie występuje błąd w mojej pracy ? Kod dla Mega: // Enable debug prints to serial monitor #define MY_DEBUG // Enable serial gateway #define MY_GATEWAY_SERIAL // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender) #if F_CPU == 8000000L #define MY_BAUD_RATE 38400 #endif // Enable inclusion mode #define MY_INCLUSION_MODE_FEATURE // Enable Inclusion mode button on gateway #define MY_INCLUSION_BUTTON_FEATURE // Inverses behavior of inclusion button (if using external pullup) //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP // Set inclusion mode duration (in seconds) #define MY_INCLUSION_MODE_DURATION 60 // Digital pin used for inclusion mode button #define MY_INCLUSION_MODE_BUTTON_PIN 3 #define MY_REPEATER_FEATURE //----------------biblioteki----------------------------- #include <SPI.h> #include <MFRC522.h> //RFID RC522 #include <Wire.h> //Dla I2C #include <Bounce2.h> //Obsługa przycisków #include <MySensors.h> //------------------------------------------------------- //----------------definiowanie elementów----------------- #define BUTTON_PIN 31 #define RELAY_1 24 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) #define NUMBER_OF_RELAYS 1 // Total number of attached relays #define RELAY_ON 1 // GPIO value to write to turn on attached relay #define RELAY_OFF 0 // GPIO value to write to turn off attached relay //------------------------------------------------------- //----------------zmienne-------------------------------- Bounce debouncer = Bounce(); volatile boolean stan = true; //------------------------------------------------------- //------------------------------------------------------- void before() { for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); // Set relay to last known state (using eeprom storage) digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF); } } //------------------------------------------------------- //------------------------------------------------------- void setup() { // Setup locally attached sensors delay(5000); // Setup the button. pinMode(BUTTON_PIN, INPUT_PULLUP); // After setting up the button, setup debouncer. debouncer.attach(BUTTON_PIN); debouncer.interval(5); digitalWrite(RELAY_1, LOW); //Inne Serial.begin(9600); SPI.begin(); } //------------------------------------------------------- //------------------------------------------------------- // Główna funkcja sterująca void loop() { // Send locally attached sensor data here if (debouncer.update()) { // Get the update value. int value = debouncer.read(); // Send in the new value. if(value == LOW) { stan = !stan; Serial.println(stan); Wire.beginTransmission(1); Wire.write(stan); // sends one byte Wire.endTransmission(); unsigned char statuss = Wire.endTransmission(); Serial.println (statuss); } } } //------------------------------------------------------- Kod dla Uno: //----------------biblioteki----------------------------- #include <Servo.h> //Servo #include <Wire.h> //Dla I2C //------------------------------------------------------- //----------------zmienne-------------------------------- volatile byte stan = 1; //------------------------------------------------------- //------------------------------------------------------- void setup() { Serial.begin(9600); Wire.begin(1); } //------------------------------------------------------- //------------------------------------------------------- // Główna funkcja sterująca void loop() { Wire.onReceive(czytaj); } //------------------------------------------------------- //------------------------------------------------------- void czytaj(int howMany) { if (Wire.available()) { stan = Wire.read(); // receive byte as a character Serial.println(stan); } } //------------------------------------------------------- Jeśli chodzi o połączenia to na pewno są dobrze, ponieważ gdy wczytam przykłady z biblioteki "Wire" to komunikacja działa poprawnie. Może źle korzystam z biblioteki "MySensors" ?
  9. Niestety, ale oscyloskopu nie posiadam. A co do źródła to zainstalowałem ją poprzez menedżer bibliotek w Arduino (https://github.com/thomasfredericks/Bounce2 - takie wyświetliło mi się źródło)
  10. Witam. Wykorzystuję przykład z biblioteki Bounce2, aby sterować diodą on/off (wciskam raz, dioda się zapala; wciskam drugi raz, dioda gaśnie). Wiem, że muszę wpisać odpowiednią wartość w debouncer.interval(x),aby zniwelować drgania styków. Jednak nie mogę określić jaki to miałby być czas. Próbowałem standardowego 20ms, ale nic (inne wartości też). Chyba, że ja źle rozumiem działanie tej biblioteki to proszę mnie poprawić. Co do samego przycisku to używam Tact Switch 12x12mm z nasadką. #include <Bounce2.h> #define BUTTON_PIN 2 #define LED_PIN 13 // Instantiate a Bounce object Bounce debouncer = Bounce(); void setup() { // Setup the button with an internal pull-up : pinMode(BUTTON_PIN,INPUT_PULLUP); // After setting up the button, setup the Bounce instance : debouncer.attach(BUTTON_PIN); debouncer.interval(15); // interval in ms //Setup the LED : pinMode(LED_PIN,OUTPUT); } void loop() { // Update the Bounce instance : debouncer.update(); // Get the updated value : int value = debouncer.read(); // Turn on or off the LED as determined by the state : if ( value == LOW ) { digitalWrite(LED_PIN, HIGH ); } else { digitalWrite(LED_PIN, LOW ); } }
  11. Chciałbym wykonać układ w stylu bramy automatycznej, składający się z dwóch przycisków, przekaźnika, diody led oraz serwa 360*. Wciskając przycisk "button_u" przekaźnik uruchamia serwo, które kręci się w jedno stronę. Wciskając przycisk "button_d" przekaźnik uruchamia serwo, które kręci się w przeciwną stronę. Co mógłbym zrobić, aby podczas uruchomionego serwa dioda migała (sygnalizacja ruchu bramy)? P.S. Wiem, że w obecnej postać mało w tym automatyki, ale z tym sobie poradzę (chyba). #define LED 4 #define BUTTON_U 2 #define BUTTON_D 3 //#define SENSOR_CLOSE A0 //#define SENSOR_OPEN A1 void setup() { //Serial.begin(9600); pinMode(LED, OUTPUT); pinMode(BUTTON_U, INPUT_PULLUP); pinMode(BUTTON_D, INPUT_PULLUP); //pinMode(SENSOR_CLOSE, INPUT_PULLUP); //pinMode(SENSOR_OPEN, INPUT_PULLUP); digitalWrite (LED, LOW); pinMode(9,OUTPUT);// pin sterujący serwem pinMode(8, OUTPUT);// pin sterujący przekaźnikiem digitalWrite(8, HIGH); } void loop() { if (digitalRead(BUTTON_U) == LOW) { delay(20); digitalWrite(8, LOW); while (digitalRead(BUTTON_U) == LOW); delay(20); analogWrite(9, 175); } if (digitalRead(BUTTON_D) == LOW) { delay(20); digitalWrite(8, LOW); while (digitalRead(BUTTON_D) == LOW); delay(20); analogWrite(9, 190); } }
  12. Dzień dobry Celem mojego projektu jest wykonanie zamka szyfrowanego. Chciałbym, aby podczas wpisywania hasła(5 znaków) znaki wyświetlały się na wyświetlaczu LCD. W obecnej postaci wyświetla się tylko jeden znak. Czy mógłby mi ktoś wytłumaczyć jak powinienem to wykonać? PS. Próbowałem z funkcją "while", ale jedyny skutek był taki, że od razu dostawałem 5 znaków na wyświetlaczu. //----------------biblioteki------------ #include <LiquidCrystal_I2C.h> #include <Wire.h> #include <Keypad.h> //#include <EEPROM.h> //----------------zmienne------------ //LCD LiquidCrystal_I2C lcd(0x27,20,4); //adres 27, 16 znaków, 4 wiersze //klawiatura const byte ROWS = 4; //ilość wierszy const byte COLS = 4; //ilość kolumn char keys[ROWS][COLS]= { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}, }; byte rowPins[ROWS] = {5,6,7,8}; //piny wierszy p1-p4 byte colPins[COLS] = {9,10,11,12}; //piny kolumn p5-p8 Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //tworzenie klawiatury volatile int stanAlarmu = 1; volatile int k=0; void wpisz() { switch(keypad.getState()) { case PRESSED: char key = keypad.getKey(); switch (key) { case '#': lcd.print("f_spr_hasla"); break; case '*': lcd.clear(); break; default: lcd.print('*'); break; } } } //------------------------------------------------------- void funkcja() { switch(stanAlarmu) { case 1: { //Uzbrajanie lcd.setCursor(0,0); lcd.print("Wpisz haslo: "); lcd.setCursor(0,1); wpisz(); break; } case 2: //Monitorowanie break; case 3: //Rozbrajanie break; case 4: //Sygnalizacja alarmu break; } } //------------------------------------------------------- //------------------------------------------------------- void setup() { pinMode(22,OUTPUT); pinMode(24,OUTPUT); lcd.init(); lcd.backlight(); lcd.clear(); } //------------------------------------------------------- void loop() { keypad.getKey(); funkcja(); }
×
×
  • Utwórz nowe...