И вот какой результат если шнур юсб отключить а питание 6 вольт оставить то пашет не сбрасывает, однако если вернуть юсб кабель и оставить питание сброс через 15 секунд, а если в иде включить монитор нету сброса
На какие пины подаёте 6 вольт? Если на Vin, то этого мало. Минимум 7,5, а лучше 9. думаю, где-то здесь собака и порылась. А если на +5, то этого соответсвенно много.
Пищалку на любой свободный пин (ну, типа с резистором, но это не мне Вас учить). В программно пищание вставить в setup. Тогда всё понятно будет, т.к. setup выполняется один раз сразу после перезугрузки.
В общем немного разобрался ,Это компьютер формирует какой то сигнал сброса потому как если выйти из пользователя на панель выбора то сброса не происходит и ето явно не програмный код, извините
здравствуйте хороший код пользовался не много скорректировав но недавно наткнулся на дисплей от DVD микросхема 1628 а вот экран с общим анодом! не подскажите как запустить его ?
И вот какой результат если шнур юсб отключить а питание 6 вольт оставить то пашет не сбрасывает, однако если вернуть юсб кабель и оставить питание сброс через 15 секунд, а если в иде включить монитор нету сброса
На какие пины подаёте 6 вольт? Если на Vin, то этого мало. Минимум 7,5, а лучше 9. думаю, где-то здесь собака и порылась. А если на +5, то этого соответсвенно много.
штекр питания ардуины туда и подал 6 вольт
штекр питания ардуины туда и подал 6 вольт
Не меньше 7,5, а лучше 9-12
9 вольт подал не в етом дело похоже с компа какойто сигнал приходит и обнуляет ардуину хотя и отключил все программы
Например, перезапуск окна монитора (если его закрыть/открыть) вызывает перезагрузку.
Вы вообще перезагрузку проверили? Поставьте пищалку и проверьте, чтобы убедиться.
перезапуск монитора вызывает перезагрузку, а пищалку куда прицепить ?
Пищалку на любой свободный пин (ну, типа с резистором, но это не мне Вас учить). В программно пищание вставить в setup. Тогда всё понятно будет, т.к. setup выполняется один раз сразу после перезугрузки.
В общем немного разобрался ,Это компьютер формирует какой то сигнал сброса потому как если выйти из пользователя на панель выбора то сброса не происходит и ето явно не програмный код, извините
#include <stdio.h> //#include <math.h> static int serial_fputchar(const char ch, FILE *stream) { ((void*)stream); Serial.write(ch); return ch; } static FILE *serial_stream = fdevopen(serial_fputchar, NULL); // // Подключение пинов // разъём отверстиями кверху и синей стороной шлейфа к себе, тогда рсапиновка: // GND 3,3V CLK DIO STB OUT-IR 5V // #define PIN_DIO 9 #define PIN_CLK 8 #define PIN_STB 7 #define INIT_6x12 2 #define INIT_7x11 3 ///////////////////////////////////////////////////////////// ///////////// ТИПА "библиотека" ДЛЯ TM1668 //////////// ///////////////////////////////////////////////////////////// // // при том подключении, что есть // достаточно 10 байтов на светодиоды и 2 на кнопки // #define LED_DATA_LENGTH 14 #define KEY_DATA_LENGTH 5 // // Маски нажатых кнопок (слева направо) // //#define KEY_2_BLUE 0x00001000ul //#define KEY_1_BLUE 0x00000200ul //#define KEY_2_RED 0x00020000ul //#define KEY_1_RED 0x00000010ul /* #define KEY_2_BLUE 0x0010000000 #define KEY_1_BLUE 0x0002000000 #define KEY_2_RED 0x0000020000 #define KEY_1_RED 0x1000000000 #define POWER_2 0x0000000010 // LE6 #define POWER_1 0x0000000002 // LE8 */ // // Подключено 5 "цифр". // 0-ая - это двоеточие, залействовано только два младших бита // 1-4 - собственно цифры слева направо. // В цифрах задействовано 7 битов под сегменты (с 0-го по 6-ой) // и 7-ой бит под доплнительный символ (питание, конверт и т.п.) // #define LE6 0x0001 // зел справа #define LE5 0x0020 // красн справа #define LE7 0x0040 // красн слева #define LE8 0x0080 // зел. слева #define SEG_A 0x0001 #define SEG_F 0x0002 #define SEG_B 0x0004 #define SEG_G 0x0008 #define SEG_C 0x0010 #define SEG_DP 0x0020 #define SEG_D 0x0040 #define SEG_E 0x0080 // // Символы (цифры / буквы, можно ещё добавить всяких) // #define SYMBOL_0 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F) #define SYMBOL_1 (SEG_B | SEG_C) #define SYMBOL_2 (SEG_A | SEG_B | SEG_D | SEG_E | SEG_G) #define SYMBOL_3 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_G) #define SYMBOL_4 (SEG_B | SEG_C | SEG_F | SEG_G) #define SYMBOL_5 (SEG_A | SEG_C | SEG_D | SEG_F | SEG_G) #define SYMBOL_6 (SEG_A | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G) #define SYMBOL_7 (SEG_A | SEG_B | SEG_C) #define SYMBOL_8 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G) #define SYMBOL_9 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_F | SEG_G) #define SYMBOL_MINUS (SEG_G) #define SYMBOL_A (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G) #define SYMBOL_C (SEG_A | SEG_E | SEG_F | SEG_D) #define SYMBOL_E (SEG_A | SEG_D | SEG_E | SEG_F | SEG_G) #define SYMBOL_H (SEG_B | SEG_C | SEG_E | SEG_F | SEG_G) #define SYMBOL_P (SEG_A | SEG_B | SEG_E | SEG_F | SEG_G) #define SYMBOL_G (SEG_A | SEG_E | SEG_F) #define SYMBOL_L (SEG_D | SEG_E | SEG_F) #define SYMBOL_F (SEG_A | SEG_E | SEG_F | SEG_G) #define SYMBOL_d (SEG_B | SEG_C | SEG_D | SEG_E | SEG_G) #define SYMBOL_b (SEG_C | SEG_D | SEG_E | SEG_F | SEG_G) #define SYMBOL_rP (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F) // // Глобальные переменные // static uint16_t ledGRID[LED_DATA_LENGTH / 2]; // текущее состояние экрана static uint8_t currentBrightness = 7; // текущая яркость static uint8_t digits[] = { SYMBOL_0, SYMBOL_1, SYMBOL_2, SYMBOL_3, SYMBOL_4, SYMBOL_5, SYMBOL_6, SYMBOL_7, SYMBOL_8, SYMBOL_9 }; // static uint16_t saveGRID[LED_DATA_LENGTH / 2]; // нужно для сохранения состояния экрана на время теста static uint8_t saveBrightness; // нужно для сохранения яркости на время теста // // // Запись одиночной команды в TM1668 // void writeSingleCommand(const uint8_t command) { digitalWrite(PIN_STB, LOW); shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, command); digitalWrite(PIN_STB, HIGH); delayMicroseconds(1); // Пауза до следующей команды } // // Запись состояния дисплея в TM1668 // void updateDisplay(void) { writeSingleCommand(0x40); // запись данных, автоматический адрес digitalWrite(PIN_STB, LOW); shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, 0xC0); // Установка адреса в 0 uint8_t * p = (uint8_t *) ledGRID; for (int8_t i = 0; i < LED_DATA_LENGTH; i++, p++) shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, *p); // запись данных digitalWrite(PIN_STB, HIGH); delayMicroseconds(1); // Пауза до следующей команды } // // Чтение состояния кнопок с TM1668 // #define KEY_2_BLUE 1 #define KEY_1_BLUE 2 #define KEY_2_RED 4 #define KEY_1_RED 8 #define POWER_2 16 #define POWER_1 32 void readKeyData(uint8_t * data) { digitalWrite(PIN_STB, LOW); shiftOut(PIN_DIO, PIN_CLK, LSBFIRST, 0x42); // чтение данных pinMode(PIN_DIO, INPUT_PULLUP); delayMicroseconds(1); byte buffer[KEY_DATA_LENGTH]; for (int i=0; i<KEY_DATA_LENGTH; i++) { buffer[i] = shiftIn(PIN_DIO, PIN_CLK, LSBFIRST); } pinMode(PIN_DIO, OUTPUT); digitalWrite(PIN_STB, HIGH); * data = 0; if (buffer[1] & 0x10) *data |= KEY_2_BLUE; if (buffer[1] & 0x02) *data |= KEY_1_BLUE; if (buffer[2] & 0x02) *data |= KEY_2_RED; if (buffer[0] & 0x10) *data |= KEY_1_RED; if (buffer[4] & 0x10) *data |= POWER_2; if (buffer[4] & 0x02) *data |= POWER_1; } // // Установить яркость от 0 (выключено) до 8 // (возвращает старую яркость) // static inline uint8_t setBrightness(const uint8_t newBrighness) { const uint8_t res = currentBrightness; currentBrightness = (newBrighness > 8) ? 8 : newBrighness; if (currentBrightness == 0) writeSingleCommand(0x80); // Выключить дисплей else writeSingleCommand(0x88 + (currentBrightness - 1)); // Установить яркость return res; } // // Увеличить яркость на 1 (возвращает старую яркость) // static inline uint8_t increaseBrightness(void) { const uint8_t res = currentBrightness; if (currentBrightness < 8) setBrightness(currentBrightness + 1); return res; } // // Уменьшить яркость на 1 (возвращает старую яркость) // static inline uint8_t decreaseBrightness(void) { const uint8_t res = currentBrightness; if (currentBrightness > 0) setBrightness(currentBrightness - 1); return res; } // // Показать тест экрана // (все символы включены на максимальной яркости) // void showTest(void) { memcpy(saveGRID, ledGRID, sizeof(saveGRID)); ledGRID[0] = 3; ledGRID[1] = 0xFF; ledGRID[2] = 0xFF; ledGRID[3] = 0xFF; ledGRID[4] = 0xFF; updateDisplay(); saveBrightness = setBrightness(8); } // // Восстановить экран после теста // void hideTest(void) { memcpy(ledGRID, saveGRID, sizeof(saveGRID)); updateDisplay(); setBrightness(saveBrightness); } // // Показать цифру value (0-9) в позиции digit (1-4) // при этом, если у цифры горит дополнительный символ, сохраняем его // static inline void setDigit(const int8_t digit, const uint8_t value) { if (digit < 0 || digit > 6) return; // цифры у нас с 1-ой по 4-ую слева направо ledGRID[digit] = value; // не обижать дополнительный символ, если есть } // // Показать число m в двух правых цифрах (типа минуты или там секунды) // static inline void showMinutes(const int8_t m) { setDigit(0, digits[m % 10]); setDigit(1, digits[m / 10]); } // // Показать число h в двух левых цифрах (типа часы или там минуты) // static inline void showHours(const int8_t h) { setDigit(2, digits[h % 10]); setDigit(3, digits[h / 10]); } // // Показать и часы, и минуты // static inline void showClock(const int8_t h, const int8_t m) { showHours(h); showMinutes(m); } #define LEFT_POSITION 3 #define RIGHT_POSITION 0 static inline void showNumber(const int8_t where, int num) { for (uint8_t i = where; i < where + 3; i++) { if (num == 0) { setDigit(i, i == where ? SYMBOL_0 : 0); } else { setDigit(i, digits[num % 10]); num /= 10; } } } ///////////////////////////////////////////////////////////// //////////// КОНЕЦ "библиотеки" ДЛЯ TM1668 //////////// ///////////////////////////////////////////////////////////// static int l = 20, r = 000; #include <math.h> int encoder = 127; int payaln = 378; int sting_tmp; int fadeAmount = 1; byte Sens_A1 = A1; byte sting = 13; unsigned long currentTime; unsigned long loopTime; unsigned long timing; const int enc_pin_A = 3; const int enc_pin_B = 2; unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev=0; void setup(void) { stdout = serial_stream; // эта строка первая в setup Serial.begin(115200); // // Инициализация пинов pinMode(PIN_CLK, OUTPUT); pinMode(PIN_DIO, OUTPUT); pinMode(PIN_STB, OUTPUT); pinMode(A0, INPUT_PULLUP); //сенсор стола pinMode(Sens_A1, INPUT_PULLUP); //сенсор паяльника pinMode(sting, OUTPUT); digitalWrite(PIN_STB, HIGH); digitalWrite(PIN_CLK, HIGH); // // Инициализация экрана writeSingleCommand(INIT_7x11); // Режим отображения (1 и 2 - ничего не меняется) setBrightness(currentBrightness); // // // Пишем на экране слово ПОПА // setDigit(3, SYMBOL_rP); // setDigit(2, SYMBOL_0); // setDigit(1, SYMBOL_rP); // setDigit(0, SYMBOL_A); // updateDisplay(); // // // // Даём 5 секунд полюбоваться // delay(1000); // // // // Рисуем нулевое время // showClock(0, 0); // updateDisplay(); // showNumber(LEFT_POSITION, l); showNumber(RIGHT_POSITION, r); updateDisplay(); // delay(5000); // showNumber(LEFT_POSITION, 0); // showNumber(RIGHT_POSITION, 3); // updateDisplay(); // delay(5000); // showNumber(LEFT_POSITION, 21); // showNumber(RIGHT_POSITION, 1); // updateDisplay(); // delay(5000); // showNumber(LEFT_POSITION, 666); // showNumber(RIGHT_POSITION, 321); // updateDisplay(); // delay(5000); // // printf("Press key\n"); // Настрийки для энкодера pinMode(enc_pin_A, INPUT_PULLUP); pinMode(enc_pin_B, INPUT_PULLUP); currentTime = millis(); loopTime = currentTime; } void loop(void) { uint8_t newKeys; readKeyData(& newKeys); #define KEY_2_BLUE 1 #define KEY_1_BLUE 2 #define KEY_2_RED 4 #define KEY_1_RED 8 #define POWER_2 16 #define POWER_1 32 if (millis() - timing > 75){ if (newKeys & KEY_1_BLUE) { if (l < 480) l++; } if (newKeys & KEY_1_RED) { if (l > 20) l--; } if (newKeys & KEY_2_BLUE) { if (r < 999) r++; } if (newKeys & KEY_2_RED) { if (r > 0) r--; } timing = millis(); } ENCODER(); //процедура опроса энкодера if (newKeys == 0x00000020){ STING(); //процедура нагрева паяльника } if (newKeys == 0x00000030){ STING(); //процедура нагрева паяльника // FEN(); //процедура нагрева фена } if (newKeys == 0x00000000){ payaln = 378; l = 20; } if (newKeys == 0x00000010){ payaln = 378; l = 20; } showNumber(LEFT_POSITION, l); showNumber(RIGHT_POSITION, encoder); //r //#define POWER_2 0x0000000010 // LE6 //#define POWER_1 0x0000000002 // LE8 if (newKeys & POWER_2) setDigit(6, ledGRID[6] | LE6); else { setDigit(6, ledGRID[6] & ~LE6); setDigit(0, 0); setDigit(1, 0); setDigit(2, 0); } if (newKeys & POWER_1) setDigit(6, ledGRID[6] | LE8); // else { setDigit(6, ledGRID[6] & ~LE6); setDigit(3, 0); setDigit(4, 0); setDigit(5, 0); } updateDisplay(); Serial.println(); Serial.print(" Pay_Disp: "); Serial.print(l); Serial.print(" | Payalnik: "); Serial.print(payaln); Serial.print(" | Pay_Sensor: "); Serial.print(sting_tmp); Serial.print(" | Encoder: "); Serial.print(encoder); printf("0x%08lX\n", newKeys); // delay(100); } ///// Всё! Веселье закончилось! ///// Мало нам веселья! void ENCODER() //Процедура опроса энкодера { currentTime = millis(); if(currentTime >= (loopTime + 3)) { encoder_A = digitalRead(enc_pin_A); encoder_B = digitalRead(enc_pin_B); if((!encoder_A) && (encoder_A_prev)) { if(encoder_B) { if(encoder + fadeAmount <= 255) encoder += fadeAmount; } else { if(encoder - fadeAmount >= 0) encoder -= fadeAmount; } } encoder_A_prev = encoder_A; loopTime = currentTime; } } void STING() { sting_tmp = analogRead(Sens_A1); payaln = map(l, 20, 400, 378, 320); if (sting_tmp > payaln) { analogWrite(sting, 1022); } else { digitalWrite(sting, HIGH); } } void FEN() { }И снова я вас побеспокою и сразу извините !!!
Вот код на котором паяльник работает нормально но хоть убейте не пойму как его встроить в скетчь ваш готовый последний
Не могли бы вы на примере етом показать мне как встроить в ваш скетчь паяльник ?
Смогу, но не сейчас. Я просьбу услышал. Как только, так сразу.
здравствуйте хороший код пользовался не много скорректировав но недавно наткнулся на дисплей от DVD микросхема 1628 а вот экран с общим анодом! не подскажите как запустить его ?