Пытаюсь красиво согнуть алюминиевую трубку. С замороженной водой - рвется. С проволокой внутри - рвется. Просто так - гнется. Не рвется. Но плавного гиба не плучается. Заламывается немного. Проходимость хорошая. Плюнуть? Плучалось у кого плавно (более или менее) согнуть?
Насчет алюминиевой не знаю, но латунную легко согнул с утрамбованным песком. С нержавейкой не получилось ничего, только с проволокой в мягкой оболочке, гнется, но заламывается. Плюнул, разрезал и спаял чистым оловом, без свинца, вроде ничего получилось....
Пытаюсь красиво согнуть алюминиевую трубку. С замороженной водой - рвется. С проволокой внутри - рвется. Просто так - гнется. Не рвется. Но плавного гиба не плучается. Заламывается немного. Проходимость хорошая. Плюнуть? Плучалось у кого плавно (более или менее) согнуть?
Мелкий "калифорнийский" песок, нагрев горелкой 600 С точку сгиба, станок подогретый, так на производстве радиаторов гнут радиус 30мм, завтра фото выложу.
Arduino: 1.8.10 (Windows 10), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:11:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:45:20: error: redefinition of 'uint8_t send_buf [10]'
uint8_t send_buf[10] = {
^
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:1:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/dfplayer_mini_mp3.h:45:9: note: 'uint8_t send_buf [10]' previously defined here
uint8_t send_buf[10] = {
^~~~~~~~
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:11:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:47:20: error: redefinition of 'uint8_t recv_buf [10]'
uint8_t recv_buf[10];
^
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:1:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/dfplayer_mini_mp3.h:47:9: note: 'uint8_t recv_buf [10]' previously declared here
uint8_t recv_buf[10];
^~~~~~~~
Несколько библиотек найдено для "dfplayer_mini_mp3.h"
Используется: C:\Program
Несколько библиотек найдено для "SoftwareSerial.h"
Используется: C:\Program
Несколько библиотек найдено для "adafruit_neopixel.h"
Используется: C:\Program
Несколько библиотек найдено для "oled_i2c.h"
Используется: C:\Program
Несколько библиотек найдено для "Servo.h"
Используется: C:\Program
exit status 1
Ошибка компиляции для платы Arduino Nano.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Forthomo пишет:
vovan47, ругань в студию, посмотрим на что в этот раз.
Arduino: 1.8.10 (Windows 10), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:11:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:45:20: error: redefinition of 'uint8_t send_buf [10]'
uint8_t send_buf[10] = {
^
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:1:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/dfplayer_mini_mp3.h:45:9: note: 'uint8_t send_buf [10]' previously defined here
uint8_t send_buf[10] = {
^~~~~~~~
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:11:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:47:20: error: redefinition of 'uint8_t recv_buf [10]'
uint8_t recv_buf[10];
^
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:1:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/dfplayer_mini_mp3.h:47:9: note: 'uint8_t recv_buf [10]' previously declared here
uint8_t recv_buf[10];
^~~~~~~~
Несколько библиотек найдено для "dfplayer_mini_mp3.h"
Используется: C:\Program
Несколько библиотек найдено для "SoftwareSerial.h"
Используется: C:\Program
Несколько библиотек найдено для "adafruit_neopixel.h"
Используется: C:\Program
Несколько библиотек найдено для "oled_i2c.h"
Используется: C:\Program
Несколько библиотек найдено для "Servo.h"
Используется: C:\Program
exit status 1
Ошибка компиляции для платы Arduino Nano.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Forthomo пишет:
vovan47, ругань в студию, посмотрим на что в этот раз.
#include <dfplayer_mini_mp3.h>
#include <adafruit_neopixel.h>
#include <oled_i2c.h>
#include <OLED_I2C.h>
#include <Servo.h>
#include "Adafruit_NeoPixel.h"
#include <SoftwareSerial.h>//добавляем библиотеки
#include <DFPlayer_Mini_Mp3.h>//добавляем библиотеку МП3 плейера
OLED myOLED(SDA, SCL, 8); //Подключение экрана А4-SDA-зеленый, А5-SCL-желтый
extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
extern uint8_t SmallFont[];
unsigned long currentTime;
unsigned long loopTime;
unsigned long ledTime;
// Переменные для энкодера -----------
const int pin_A = 2; // Подключение вывода A (CLK) энкодера
const int pin_B = 3; // Подключение вывода B (DT) энкодера
const int pin_SW = 4; // Подключение вывода кнопки (SW) энкодера
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev = 0;
unsigned char encoder_sw_prew = 1;
//Массив , обозначаем подключенные оптопары по выводам . Оптопары подключены, A0,A1,A2,A3,A6
const byte Optics[] = {0, 1, 2, 3, 6};
// Значения порога срабатывания датчика для каждой рюмки
const unsigned int Optics_porog[] = {50,50,100,100,50};
//Серво
const int PIN_SERVO = 9;
Servo servo;
//Позиция каждой рюмки
const byte Rumka_pos[] = {0,50,98,145,179}; //12 - 48 - 90 - 135 - 174 (7,6-48,8-90,0-132,0-173,00 или 165/4=41)
const byte servo_speed=15; // Скорость поворота серво, 10 - норм, 20 медленно, 30 очень медленно
byte Menu = 0;
byte MenuFlag = 0; // Здесь храниться уровень меню. 0 находимся в Главном меню. 1 Вошли в меню Авто, 2 вошли в Ручное управление
byte Drink = 25; // По умолчанию в рюмку наливаем 20 мл.
//----- Минимальные и максимальные значения наполняемой жидкости и задержки для наполнения.
const byte min_Drink = 2; // Минимум в рюмку - 2 мл.
const byte max_Drink = 50; // Максимум в рюмку - 50 мл.
// Калибровка работы насосика. Значения для налива min_Drink и max_Drink соотвественно
const unsigned int min_Drink_delay = 222;
const unsigned int max_Drink_delay = 6000;
//--------
byte DrinkCount = 1; //По умолчанию, для ручного режима - 1 рюмка
const byte max_DrinkCount = 5; //Максимальное кол-во рюмок - 5
// Насосик
const byte PIN_PUMP = 12;
// Светодиоды
const int PIN_LED = 5;// Сюда подключаются светодиоды
const int LED_COUNT = max_DrinkCount;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, PIN_LED, NEO_GRB + NEO_KHZ800);
//-------
void pump_enable() {
digitalWrite(PIN_PUMP, 1); //вкл реле
}
void pump_disable() {
digitalWrite(PIN_PUMP, 0); //выкл реле
}
void pump_timer(byte Drink) {
digitalWrite(PIN_PUMP, 1); //вкл реле
delay(map(Drink, min_Drink, max_Drink, min_Drink_delay, max_Drink_delay));
digitalWrite(PIN_PUMP, 0); //выкл реле
}
void oled_menu(int Menu) {
myOLED.clrScr();
myOLED.setFont(RusFont);
myOLED.print(F("Y F K B D F N J H"), CENTER, 0);//Н А Л И В А Т О Р
myOLED.print(F("F D N J"), CENTER, 15);//А В Т О
myOLED.print(F("H E X Y J Q "), CENTER, 30);//Р У Ч Н О Й
myOLED.print(F("G H J V S D R F"), CENTER, 45);//П Р О М Ы В К А
myOLED.setFont(SmallFont);
myOLED.print(F(">"), LEFT, (Menu * 15) + 15);
myOLED.print(F("<"), RIGHT, (Menu * 15) + 15);
myOLED.update();
}
// выводит строчку по чуть чуть, в самый раз и тд. Передается номер строки, на которой выводить сообщение
void DrinkInfo(byte pos) {
if (Drink < 15) {
myOLED.print(F("YB J XTV"), CENTER, pos);//НИ О ЧЕМ
} else if (Drink < 28) {
myOLED.print(F("GJ XENM - XENM"), CENTER, pos);//ПО ЧУТЬ - ЧУТЬ
} else if (Drink < 38) {
myOLED.print(F("D CFVSQ HFP"), CENTER, pos);//В САМЫЙ РАЗ
} else if (Drink < 48) {
myOLED.print(F("GJ GJKYJQ"), CENTER, pos);//ПО ПОЛНОЙ
} else {
myOLED.print(F("LJ RHFTD"), CENTER, pos);//ДО КРАЕВ
}
}
void Tost() {
randomSeed(currentTime);
myOLED.clrScr();
myOLED.setFont(RusFont);
myOLED.print(F("YE!"), CENTER, 20); //НУ!
// Рандом - 1
switch (random(18)) { // case 0...17
case 0:
myOLED.print(F("PF DCNHTXE!"), CENTER, 40); //ЗА ВСТРЕЧУ!
mp3_play (2); // Проигрываем "mp3/0002.mp3"
delay(100);
break;
case 1:
myOLED.print(F("PF RHFCJNE!"), CENTER, 40); //ЗА КРАСОТУ!
mp3_play (3); // Проигрываем "mp3/0003.mp3"
delay(100);
break;
case 2:
myOLED.print(F("PF LHE;,E!"), CENTER, 40); //ЗА ДРУЖБУ!
mp3_play (4); // Проигрываем "mp3/0004.mp3"
delay(100);
break;
case 3:
myOLED.print(F("DS <KBY"), CENTER, 38); //ВЫ БЛИН
myOLED.print(F("LFTNT!"), CENTER, 55); //ДАЕТЕ!
mp3_play (20); // Проигрываем "mp3/0020.mp3"
delay(100);
break;
case 4:
myOLED.print(F("PF ,HFNCNDJ!"), CENTER, 40); //ЗА БРАТСТВО!
mp3_play (5); // Проигрываем "mp3/0005.mp3"
delay(100);
break;
case 5:
myOLED.print(F("PF"), CENTER, 38); //за
myOLED.print(F("CGHFDTLKBDJCNM!"), CENTER, 55); //СПРАВЕДЛИВОСТЬ!
mp3_play (6); // Проигрываем "mp3/0006.mp3"
delay(100);
break;
case 6:
myOLED.print(F("PF HS,FKRE!"), CENTER, 40); //ЗА РЫБАЛКУ!
mp3_play (7); // Проигрываем "mp3/0007.mp3"
delay(100);
break;
case 7:
myOLED.print(F("PF BCRECCNDJ!"), CENTER, 40); //ЗА ИСКУССТВО!
mp3_play (8); // Проигрываем "mp3/0008.mp3"
delay(100);
break;
case 8:
myOLED.print(F("PF HFPEV!"), CENTER, 40); //ЗА РАЗУМ!
mp3_play (9); // Проигрываем "mp3/0009.mp3"
delay(100);
break;
case 9:
myOLED.print(F("PF BCNBYYS["), CENTER, 38); //ЗА ИСТИННЫХ
myOLED.print(F(":TYOBY!"), CENTER, 55); //ЖЕНЩИН!
mp3_play (10); // Проигрываем "mp3/0010.mp3"
delay(100);
break;
case 10:
myOLED.print(F("PF GJYBVFYBT!"), CENTER, 40); //ЗА ПОНИМАНИЕ!
mp3_play (11); // Проигрываем "mp3/0011.mp3"
delay(100);
break;
case 11:
myOLED.print(F("PF TLBYTYBT!"), CENTER, 40); //ЗА ЕДИНЕНИЕ!
mp3_play (13); // Проигрываем "mp3/0013.mp3"
delay(100);
break;
case 12:
myOLED.print(F("PF GJ,TLE!"), CENTER, 40); //ЗА ПОБЕДУ!
mp3_play (16); // Проигрываем "mp3/0016.mp3"
delay(100);
break;
case 13:
myOLED.print(F("PF HJLBYE!"), CENTER, 40); //ЗА РОДИНУ!
mp3_play (21); // Проигрываем "mp3/0021.mp3"
delay(100);
break;
case 14:
myOLED.print(F("XNJ, UJKJDF"), CENTER, 38); //ЧТОБ ГОЛОВА
myOLED.print(F("YT NHTOFKF!"), CENTER, 55); //НЕ ТРЕЩАЛА!
mp3_play (17); // Проигрываем "mp3/0017.mp3"
delay(100);
break;
case 15:
myOLED.print(F("PF CJKBLYJT"), CENTER, 38); //ЗА СОЛИДНОЕ
myOLED.print(F("VE;CRJT VJKXFYBT"), CENTER, 55); //МУЖСКОЕ МОЛЧАНИЕ
mp3_play (12); // Проигрываем "mp3/0012.mp3"
delay(100);
break;
case 16:
myOLED.print(F("XNJ, VJHOBKJ"), CENTER, 38); //ЧТОБ МОРЩИЛО
myOLED.print(F("YFC VTYMIT!"), CENTER, 55); //НАС МЕНЬШЕ!
mp3_play (18); // Проигрываем "mp3/0018.mp3"
delay(100);
break;
case 17:
myOLED.print(F("XNJ, D CNJHJYE"), CENTER, 38); //ЧТОБ В СТОРОНУ
myOLED.print(F("YT DBKMYEKJ!"), CENTER, 55); //НЕ ВИЛЬНУЛО!
mp3_play (19); // Проигрываем "mp3/0019.mp3"
delay(100);
break;
}
delay(2000);
myOLED.update();
}
// Меню Авто режим
void oled_auto(int Drink) {
myOLED.clrScr();
myOLED.setFont(RusFont);
myOLED.print(F("F D N J"), CENTER, 0);
myOLED.print(F("VK "), RIGHT, 27);
DrinkInfo(57);
// myOLED.print(DrinkInfo[map(Drink, 2, max_Drink, 0, 4)], CENTER, 57);
myOLED.setFont(MegaNumbers);
myOLED.print(String(Drink), CENTER, 13);
myOLED.update();
}
// Меню Ручной режим
void oled_manual(int DrinkCount, int Drink) {
myOLED.clrScr();
myOLED.setFont(RusFont);
myOLED.print(F("H E X Y J Q"), CENTER, 0); //Р У Ч Н О Й
DrinkInfo(57);
// myOLED.print(DrinkInfo[map(Drink, 2, max_Drink, 0, 4)], CENTER, 57);
myOLED.print(F("H>V"), 24, 27);
myOLED.print(F("VK "), RIGHT, 27);
myOLED.setFont(MegaNumbers);
myOLED.print(String(DrinkCount), LEFT, 13);
myOLED.print(String(Drink), (Drink < 10) ? 80 : 57, 13);
myOLED.update();
}
void oled_naliv(int MenuFlag) {
myOLED.clrScr();
myOLED.setFont(RusFont);
myOLED.print((MenuFlag == 1) ? F("F D N J") : F("H E X Y J Q") , CENTER, 0); // А В Т О Р У Ч Н О Й
myOLED.print(F("Y F K B D F > "), CENTER, 27); //Н А Л И В А Ю
DrinkInfo(47);
myOLED.update();
}
void oled_nalito(int MenuFlag, int Nalito) {
myOLED.clrScr();
myOLED.setFont(RusFont);
myOLED.print((MenuFlag == 1) ? F("F D N J") : F("H E X Y J Q") , CENTER, 0);
myOLED.print(F("Y F K B N J"), CENTER, 20); //Н А Л И Т О
if (Nalito == 1) {
myOLED.print(F("H > V R F"), CENTER, 55); //РЮМКА
} else if (Nalito <= 4 ) {
myOLED.print(F("H > V R B"), CENTER, 55); //РЮМКИ
} else {
myOLED.print(F("H > V J R"), CENTER, 55); //РЮМОК
}
myOLED.setFont(SmallFont);
myOLED.print(String(Nalito), CENTER, 36);
myOLED.update();
}
void ServoNaliv(byte rumka) {
servo.attach(PIN_SERVO);
for (int pos = servo.read(); pos <= Rumka_pos[rumka]; pos += 1) {
// с шагом в 1 градус
servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
}
servo.detach();
}
void ServoParking () {
//Serial.println(servo.read());
servo.attach(PIN_SERVO);
for (int pos = servo.read(); pos >= 0; pos -= 1) {
// с шагом в 1 градус
servo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной 'pos'
delay(servo_speed); // ждем , пока ротор сервы выйдет в заданную позицию
}
servo.detach();
}
void CvetoMuzik() {
for (int i = 0; i <= 7; i++) {
for (int y = 0; y < max_DrinkCount; y++) {
strip.setPixelColor(y, strip.Color(255, 0, 0));
strip.show();
delay(30);
}
for (int y = 0; y < max_DrinkCount; y++) {
strip.setPixelColor(y, strip.Color(0, 255, 0));
strip.show();
delay(30);
}
for (int y = 0; y < max_DrinkCount; y++) {
strip.setPixelColor(y, strip.Color(0, 0, 255));
strip.show();
delay(30);
}
}
}
void setup() {
Serial.begin(9600);//
//устанавливаем Serial порт МП3 плейера если вывод в монитор TX(D0) и RX(D1)не нужен
mp3_set_serial (Serial);//инициализируем Serial порт МП3 плейера
/*
при необходимости создаем програмный порт для управдения МП3 плейером, если вывод в монитор TX(D0) RX(D1) необходим
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX обозначаем програмный порт как mySoftwareSerial
//плейер подключаем D10 D11
mySoftwareSerial.begin(9600);//инициализируем програмный Serial порт
mp3_set_serial (mySoftwareSerial);// указываем програмный порт для МП3 плейера
//инициализируем Serial с скоростью 115200, если вывод в монитор TX(D0) RX(D1) необходим
Serial.begin(115200);
*/
delay (100);//Между двумя командами необходимо делать задержку 100 миллисекунд, в противном случае некоторые команды могут работать не стабильно.
mp3_set_volume (25);// устанвливаем громкость 25
delay (100);
mp3_play (1); // Проигрываем "mp3/0001.mp3"(0001_get started!.mp3)
delay (100);
// Volume=EEPROM.read(0);
myOLED.begin(); // Инициализация дисплея
// выводим привествие после включения перед наливом
myOLED.clrScr();
myOLED.setFont(RusFont);
myOLED.print(F("Ye? yfxfkb!"), CENTER, 50);// Ну, начали!
delay (3500);
myOLED.update();
pinMode(pin_SW, INPUT); // устанавливаем pin pin_SW как вход
digitalWrite(pin_SW, HIGH); // Поддяжка вывода к 1
pinMode(pin_A, INPUT);
pinMode(pin_B, INPUT);
pinMode(PIN_PUMP, OUTPUT);
digitalWrite(PIN_PUMP, 0);
currentTime = millis();
loopTime = currentTime;
//---------------
oled_menu(0);
strip.begin();
for (int i = 0; i < 5; i++) {
pinMode(Optics[i], INPUT);
}
ServoParking();
}
void loop() {
currentTime = millis();
if (currentTime >= (loopTime + 5)) { // проверяем каждые 5мс
// int val = analogRead(0); // считываем значение
// Serial.println(val);
encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера
encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера
if ((!encoder_A) && (encoder_A_prev)) { // если состояние изменилось с положительного к нулю
//Вращение влево
if (encoder_B) {
if (MenuFlag == 0) {
(Menu <= 0 ) ? Menu = 2 : Menu--; // Перемещение курсора по главному меню назад
oled_menu(Menu);
} else if (MenuFlag == 1) {
(Drink <= min_Drink ) ? Drink = max_Drink : Drink--; // Уменьшаем кол-во милилитров в рюмку
oled_auto(Drink);
} else if (MenuFlag == 2) {
(DrinkCount >= max_DrinkCount ) ? DrinkCount = 1 : DrinkCount++; // Влево увечичиваем рюмки для ручного режима
oled_manual(DrinkCount, Drink);
}
//Вращение вправо
} else {
if (MenuFlag == 0) {
(Menu >= 2 ) ? Menu = 0 : Menu++; // Перемещение курсора по главному меню вперед.
oled_menu(Menu);
} else if (MenuFlag == 1) {
(Drink >= max_Drink ) ? Drink = min_Drink : Drink++;
oled_auto(Drink);
} else if (MenuFlag == 2) {
(Drink >= max_Drink ) ? Drink = min_Drink : Drink++;
oled_manual(DrinkCount, Drink);
}
}
}
encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла
int encoder_sw = digitalRead(pin_SW);
if (encoder_sw == 0 && encoder_sw != encoder_sw_prew) { // Нажата кнопка
int pause_sw = 0;
boolean promivka = false;
while (digitalRead(pin_SW) == 0) { // Держим кнопку. Считаем сколько времени прошло...
delay(100);
pause_sw++;
if (pause_sw > 20 && Menu != 2 ) break;
if (pause_sw > 20 && Menu == 2 && promivka == false) { // Если пункт меню промывка и держим кнопку больше 2 секунд.
promivka = true;
pump_enable(); // Включаем насос
myOLED.clrScr();
myOLED.setFont(RusFont);
myOLED.print(F("G H J V S D R F"), CENTER, 15); // П Р О М Ы В К А
myOLED.print(F(". . ."), CENTER, 45);
myOLED.update();
}
}
//После отпускания кнопки , обрабатываем
if (promivka == true) { //Отпустили кнопку. Если включена промывка, выключаем насос и возвращаемся в главное меню
promivka = false;
pump_disable() ; //Выключаем насос
oled_menu(2);
} else {
//Обработка всех нажатий кнопки
if (Menu == 0 && MenuFlag == 0 && pause_sw < 10) { //Нажатие кнопки меню авто
MenuFlag = 1;
oled_auto(Drink);
} else if (MenuFlag == 1 && pause_sw > 20) { //Выход из меню авто в главное
MenuFlag = 0;
oled_menu(0);
} else if (MenuFlag == 1 ) { //Начинается автоматический разлив
Serial.println("Начало автоматического разлива");
oled_naliv(MenuFlag); // Выводим на экран наливаем ...
byte drink_count = 0;
for (int y = 0; y < max_DrinkCount; y++) {
if (analogRead(Optics[y]) > Optics_porog[y] ) {
strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом
strip.show();
ServoNaliv(y); // Перемещяемся к рюмке
pump_timer(Drink); // Налив.
strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подствечиваем зеленым , налито.
strip.show();
drink_count++;
}
}
if (drink_count > 0) {
oled_nalito(MenuFlag, drink_count );
ServoParking();
delay(1000);
Tost();
CvetoMuzik();
oled_auto(Drink);
} else {
myOLED.clrScr();
myOLED.setFont(RusFont);
myOLED.print(F("YTN H>VJR !"), CENTER, 25); //НЕТ РЮМОК !
myOLED.update();
delay(2000);
oled_auto(Drink);
}
} else if (Menu == 1 && MenuFlag == 0 && pause_sw < 10) { // Нажатие меню ручное
MenuFlag = 2;
oled_manual(DrinkCount, Drink);
} else if (MenuFlag == 2 && pause_sw > 20) { //Выход из меню ручное в главное
MenuFlag = 0;
oled_menu(1);
} else if (MenuFlag == 2 ) { //Начинается ручной разлив
// Serial.println("Начало ручного разлива " + String(DrinkCount));
oled_naliv(MenuFlag); // Выводим на экран наливаем ...
for (int y = 0; y < DrinkCount; y++) {
strip.setPixelColor(y, strip.Color(255, 0, 0)); // Подствечиваем красным цветом
strip.show();
ServoNaliv(y); // Перемещяемся к рюмке
pump_timer(Drink); // Налив.
strip.setPixelColor(y, strip.Color(0, 255, 0)); // Подствечиваем зеленым , налито.
strip.show();
}
oled_nalito(MenuFlag, DrinkCount );
ServoParking();
Tost();
CvetoMuzik();
oled_manual(DrinkCount, Drink);
}
}
}
if (currentTime >= (ledTime + 300)) {
//Опрашиваем оптопары ... Если рюмка поставлена , светодиод светится синим, нет ничего - не светится
for (int i = 0; i < max_DrinkCount; i++) {
int val = analogRead(Optics[i]); // считываем значение
Serial.println(val);
if (val > Optics_porog[i]) {
strip.setPixelColor(i, strip.Color(0, 0, 255));
} else {
strip.setPixelColor(i, strip.Color(0, 0, 0));
}
// delay(20);
}
strip.show();
ledTime = currentTime;
}
encoder_sw_prew = encoder_sw;
loopTime = currentTime;
}
}
Forthomo пишет:
vovan47 пишет:
Arduino: 1.8.10 (Windows 10), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:11:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:45:20: error: redefinition of 'uint8_t send_buf [10]'
uint8_t send_buf[10] = {
^
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:1:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/dfplayer_mini_mp3.h:45:9: note: 'uint8_t send_buf [10]' previously defined here
uint8_t send_buf[10] = {
^~~~~~~~
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:11:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:47:20: error: redefinition of 'uint8_t recv_buf [10]'
uint8_t recv_buf[10];
^
In file included from C:\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:1:0:
C:\Program Files\Arduino\libraries\DFPlayer_Mini_Mp3/dfplayer_mini_mp3.h:47:9: note: 'uint8_t recv_buf [10]' previously declared here
uint8_t recv_buf[10];
^~~~~~~~
Несколько библиотек найдено для "dfplayer_mini_mp3.h"
Используется: C:\Program
Несколько библиотек найдено для "SoftwareSerial.h"
Используется: C:\Program
Несколько библиотек найдено для "adafruit_neopixel.h"
Используется: C:\Program
Несколько библиотек найдено для "oled_i2c.h"
Используется: C:\Program
Несколько библиотек найдено для "Servo.h"
Используется: C:\Program
exit status 1
Ошибка компиляции для платы Arduino Nano.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Forthomo пишет:
vovan47, ругань в студию, посмотрим на что в этот раз.
Arduino: 1.8.10 (Windows 10), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"
nalivator_v4.2_oled_dfp:3:10: error: OLED_I2C.h: No such file or directory
#include <OLED_I2C.h>
^~~~~~~~~~~~
compilation terminated.
exit status 1
OLED_I2C.h: No such file or directory
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Сдается мне, что тут требуется опытный экзорцист. Имена каталогов библиотек одинаковые, а одноименные хидеры в них отличаются только регистром.
Только что проверил, добавлял по одной, добавляются с правильным регистром, но действительно при добавлении библиотеки плеера компиляция не происходит.
In file included from C:\Temp\Arduino\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:11:0:
C:\Temp\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:45:20: error: redefinition of 'uint8_t send_buf [10]'
uint8_t send_buf[10] = {
^
In file included from C:\Temp\Arduino\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:1:0:
C:\Temp\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:45:9: note: 'uint8_t send_buf [10]' previously defined here
uint8_t send_buf[10] = {
^
In file included from C:\Temp\Arduino\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:11:0:
C:\Temp\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:47:20: error: redefinition of 'uint8_t recv_buf [10]'
uint8_t recv_buf[10];
^
In file included from C:\Temp\Arduino\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino:1:0:
C:\Temp\Arduino\libraries\DFPlayer_Mini_Mp3/DFPlayer_Mini_Mp3.h:47:9: note: 'uint8_t recv_buf [10]' previously declared here
uint8_t recv_buf[10];
^
Часть первая:В папке Temp на диске "C " создаешь папку Arduino(C:\Temp\Arduino). В папке Arduino создаешь папку librares (C:\Temp\Arduino\libraries), туда помещаешь библиотеки с Ядиска(C:\Temp\Arduino\libraries\DFPlayer_Mini_Mp3). В вновь созданную папку Arduino помещаешь папку с скетчем с Ядиска (C:\Temp\Arduino\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino). Из папки librares,в директории где установлен Arduino IDE, удаляешь (временно) одноименные библиотеки. Компелируешь.
Че то мысля посетила. Что бы не отключать нагрузку перед перепрошивкой, ну и что бы не подпалить USB порт компа при подключении без внешнего питания, почему бы не поставить диод перед VCC пином ардуины ?
Че то мысля посетила. Что бы не отключать нагрузку перед перепрошивкой, ну и что бы не подпалить USB порт компа при подключении без внешнего питания, почему бы не поставить диод перед VCC пином ардуины ?
Плеер все равно отключать надо, если к D1 и D0 используется, а так мысль верная.
Оптимизирую код. Может кому будет полезным. В свете использования меню (а у меня пункты хранятся в массивах, а положение на экране рассчитывается функцией) актуальна проблема хранения текстовых массивов.
Так было:
//ЗВУК (переменные для LCD-дисплея и MP3-плейера)
char * Tosts_str_01[] = {"ВЫПЬЕМ","НУ","ЗА","ВЫПЬЕМ","ЧТОБЫ"};
char * Tosts_str_02[] = {"ЗА ВСТРЕЧУ","ПОВТОРИМ","ЖЕНЩИН","ЗА МУЖИКОВ","ВСЕГДА"};
Че то мысля посетила. Что бы не отключать нагрузку перед перепрошивкой, ну и что бы не подпалить USB порт компа при подключении без внешнего питания, почему бы не поставить диод перед VCC пином ардуины ?
Плеер все равно отключать надо, если к D1 и D0 используется, а так мысль верная.
Че то мысля посетила. Что бы не отключать нагрузку перед перепрошивкой, ну и что бы не подпалить USB порт компа при подключении без внешнего питания, почему бы не поставить диод перед VCC пином ардуины ?
Плеер все равно отключать надо, если к D1 и D0 используется, а так мысль верная.
Алексей, а какой диод лучше использовать ?
Я думаю чем меньше прямое падение напряжения тем лучше, шотки подойдет. Обычный импульсный падение дает 0,7В...1,1В
Arduino: 1.8.10 (Windows 10), Плата:"Arduino Nano, ATmega328P (Old Bootloader)"
nalivator_v4.2_oled_dfp:3:10: error: OLED_I2C.h: No such file or directory
#include <OLED_I2C.h>
^~~~~~~~~~~~
compilation terminated.
exit status 1
OLED_I2C.h: No such file or directory
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Forthomo пишет:
все сделал как описали!и все ровно нет библиотек
vovan47, сделайте точно так как написано ниже:
Часть первая:В папке Temp на диске "C " создаешь папку Arduino(C:\Temp\Arduino). В папке Arduino создаешь папку librares (C:\Temp\Arduino\libraries), туда помещаешь библиотеки с Ядиска(C:\Temp\Arduino\libraries\DFPlayer_Mini_Mp3). В вновь созданную папку Arduino помещаешь папку с скетчем с Ядиска (C:\Temp\Arduino\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino). Из папки librares,в директории где установлен Arduino IDE, удаляешь (временно) одноименные библиотеки. Компелируешь.
Это обратный клапан? Модельку можно? И какая помпа?
Это помпа, но не мембранная а роторная, качать не начнет пока жидкости в камере не будет, а клапан из двух шприцов здесь где то на форуме, ссылку сейчас найду
А кстати. Есть ли возможность у какой-нибудь модели помпы дуть туда или обратно в зависимости от полярности подключения? Можно было бы простенько реализовать "выдув" обратно в бутылку.
А кстати. Есть ли возможность у какой-нибудь модели помпы дуть туда или обратно в зависимости от полярности подключения? Можно было бы простенько реализовать "выдув" обратно в бутылку.
Самому интересно, завтра проэксперемментирую, устал сегодня после дантиста, таблетки слабо помогают, а "Морошка" в Дикси закочилась).
Вопрос к знатокам. Серва, если находится вверх исполнительным механизмом, имеет вращение против часовой стрелки 0...180 (налив слева направо) - считаем стандартно. Если серву перевернуть то вращение сервы будет по часовой 180...0 (налив справа налево). А теперь вопрос что нужно поменять в скетче чтобы налив остался стандартным при перевернутой серве?
И напоследок кто может добавить в скетч с ОЛЕД отображение заряда батареи? Библиотека с символами (дополнение к OLED_I2C) и мануал к ней На Я диске в папке доки.
можно наполнить припоем с помощью горелки, согнуть, а потом выплавить. делали так тонкий змеевик из нержавейки
Насчет алюминиевой не знаю, но латунную легко согнул с утрамбованным песком. С нержавейкой не получилось ничего, только с проволокой в мягкой оболочке, гнется, но заламывается. Плюнул, разрезал и спаял чистым оловом, без свинца, вроде ничего получилось....
Трубки брал в Китае для коктейлей из нержавейки.
https://ru.aliexpress.com/item/32827869150.html?spm=a2g0s.9042311.0.0.274233ed9xeRme&scm=1007.22893.152569.0&pvid=b9921ed4-ee59-4c96-be3a-6c1f04617ede&onelink_page_from=ITEM_DETAIL&onelink_item_to=32827869150&onelink_duration=0.792644&onelink_status=noneresult&onelink_item_from=32827869150&onelink_page_to=ITEM_DETAIL&af=1037565&afref=&cv=47843&dp=b236290d28b789fd3aaaa64fb5afbd54&mall_affr=pr3&aff_platform=aaf&cpt=1573661509778&sk=VnYZvQVf&aff_trace_key=263ad8b0e8a14fb384ba57bd3cea913b-1573661509778-01782-VnYZvQVf&terminal_id=23a2686b14a6421492d1ca03632550b8
получил концевики
https://ru.aliexpress.com/item/32968198983.html
нажимаются изумительно, без усилий и звука.
так при прошивке плеер нужно отключать
Возможно несколько библиотек установлено похожих. Предположение.
Попробуйте так.
В самом начале скетча заменить
на
и все три файла из скаченной с яндекс диска библиотеки
а именно
положить в папку с скетчем. В этом случае при компиляции библиотека подцепится из этой папки
Если будет опять ругаться, удалите все библотеки Dfplayer_mini , которые были установлены ранее
Мелкий "калифорнийский" песок, нагрев горелкой 600 С точку сгиба, станок подогретый, так на производстве радиаторов гнут радиус 30мм, завтра фото выложу.
vovan47, ругань в студию, посмотрим на что в этот раз.
vovan47, ругань в студию, посмотрим на что в этот раз.
vovan47, ругань в студию, посмотрим на что в этот раз.
и скетч сюда же
vovan47, ругань в студию, посмотрим на что в этот раз.
и скетч сюда же
vovan47, у тебя объявления библиотек дублируются ! Убирай строчки
vovan47, у тебя объявления библиотек дублируются ! Убирай строчки
vovan47, у тебя объявления библиотек дублируются ! Убирай строчки
Что конкретно требует ?
vovan47, у тебя объявления библиотек дублируются ! Убирай строчки
Что конкретно требует ?
[/quot
Сдается мне, что тут требуется опытный экзорцист. Имена каталогов библиотек одинаковые, а одноименные хидеры в них отличаются только регистром.
Нет таких строк в скетче с Я-диска
https://yadi.sk/d/iSC-hQ6K3KCJCg
Нет таких строк в скетче с Я-диска
https://yadi.sk/d/iSC-hQ6K3KCJCg
Нет таких строк в скетче с Я-диска
https://yadi.sk/d/iSC-hQ6K3KCJCg
Зачем?
Нет таких строк в скетче с Я-диска
https://yadi.sk/d/iSC-hQ6K3KCJCg
Зачем?
Нет таких строк в скетче с Я-диска
https://yadi.sk/d/iSC-hQ6K3KCJCg
Зачем?
Так прочитайте все советы с вашего первого обращения. " Дело было в не в бобине, *** сидел в кабине."
Нет таких строк в скетче с Я-диска
https://yadi.sk/d/iSC-hQ6K3KCJCg
Зачем?
Так прочитайте все советы с вашего первого обращения. " Дело было в не в бобине, *** сидел в кабине."
Нет таких строк в скетче с Я-диска
https://yadi.sk/d/iSC-hQ6K3KCJCg
Зачем?
Так прочитайте все советы с вашего первого обращения. " Дело было в не в бобине, *** сидел в кабине."
[/quoteскетч без мп3 загрузился и работает
Я же писал ранее ,что с подключенным mp3 не грузит и надо rx tx отключать. Я пол дня промучился пока дошел
Сдается мне, что тут требуется опытный экзорцист. Имена каталогов библиотек одинаковые, а одноименные хидеры в них отличаются только регистром.
Только что проверил, добавлял по одной, добавляются с правильным регистром, но действительно при добавлении библиотеки плеера компиляция не происходит.
Ошибки
Я же писал ранее ,что с подключенным mp3 не грузит и надо rx tx отключать. Я пол дня промучился пока дошел
До загрузки дело не доходит, не компелирует когда именно две библиотеки плеера даже находяшиеся в одной папке
vovan47, сделайте точно так как написано ниже:
Часть первая:В папке Temp на диске "C " создаешь папку Arduino(
C:\Temp\Arduino)
. В папке Arduino создаешь папку librares (C:\Temp\Arduino\libraries)
, туда помещаешь библиотеки с Ядиска(C:\Temp\Arduino\libraries\DFPlayer_Mini_Mp3)
. В вновь созданную папку Arduino помещаешь папку с скетчем с Ядиска (C:\Temp\Arduino\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino)
. Из папки librares,в директории где установлен Arduino IDE, удаляешь (временно) одноименные библиотеки. Компелируешь.Че то мысля посетила. Что бы не отключать нагрузку перед перепрошивкой, ну и что бы не подпалить USB порт компа при подключении без внешнего питания, почему бы не поставить диод перед VCC пином ардуины ?
Че то мысля посетила. Что бы не отключать нагрузку перед перепрошивкой, ну и что бы не подпалить USB порт компа при подключении без внешнего питания, почему бы не поставить диод перед VCC пином ардуины ?
Плеер все равно отключать надо, если к D1 и D0 используется, а так мысль верная.
Привет, коллеги.
Оптимизирую код. Может кому будет полезным. В свете использования меню (а у меня пункты хранятся в массивах, а положение на экране рассчитывается функцией) актуальна проблема хранения текстовых массивов.
Так было:
Так переписал:
Отжал сразу кучу озу.
Вот так вот. Размещайте переменные во ФЛЕШЕ.
Я же писал ранее ,что с подключенным mp3 не грузит и надо rx tx отключать. Я пол дня промучился пока дошел
Я плейер не отключаю. Все заливается. Ардуинка на шилде стоит (НАНО v3)
Я же писал ранее ,что с подключенным mp3 не грузит и надо rx tx отключать. Я пол дня промучился пока дошел
Я плейер не отключаю. Все заливается. Ардуинка на шилде стоит (НАНО v3)
Проблема возникает у тех кто юзает pro mini, с nano такой проблемы нет.
Че то мысля посетила. Что бы не отключать нагрузку перед перепрошивкой, ну и что бы не подпалить USB порт компа при подключении без внешнего питания, почему бы не поставить диод перед VCC пином ардуины ?
Плеер все равно отключать надо, если к D1 и D0 используется, а так мысль верная.
Алексей, а какой диод лучше использовать ?
чтоб спрятать концевик и защитить его от заливания можно использовать пластиковую кредитную карту
(розовым на рисунке)
или любой другой тонкий пластик, можно с папки канцелярской вырезать.
Че то мысля посетила. Что бы не отключать нагрузку перед перепрошивкой, ну и что бы не подпалить USB порт компа при подключении без внешнего питания, почему бы не поставить диод перед VCC пином ардуины ?
Плеер все равно отключать надо, если к D1 и D0 используется, а так мысль верная.
Алексей, а какой диод лучше использовать ?
Я думаю чем меньше прямое падение напряжения тем лучше, шотки подойдет. Обычный импульсный падение дает 0,7В...1,1В
vovan47, сделайте точно так как написано ниже:
Часть первая:В папке Temp на диске "C " создаешь папку Arduino(
C:\Temp\Arduino)
. В папке Arduino создаешь папку librares (C:\Temp\Arduino\libraries)
, туда помещаешь библиотеки с Ядиска(C:\Temp\Arduino\libraries\DFPlayer_Mini_Mp3)
. В вновь созданную папку Arduino помещаешь папку с скетчем с Ядиска (C:\Temp\Arduino\nalivator_v4.2_oled_dfp\nalivator_v4.2_oled_dfp.ino)
. Из папки librares,в директории где установлен Arduino IDE, удаляешь (временно) одноименные библиотеки. Компелируешь.У меня как раз с nano такая проблема
vovan47 :"скетч без мп3 загрузился и работает" , покажи скетч, иди сам сравни, очень странно что на значёк "меньше" ругается.
vovan47 :"скетч без мп3 загрузился и работает" , покажи скетч, иди сам сравни, очень странно что на значёк "меньше" ругается.
Ну тогда добавляй свои библиотеки и после добавления удаляй из скетча те что заглавными буквами, а так точно экзорцист нужен.
https://youtu.be/6V5rtLE0Lss
Коллеги! Вот для чего нужен обратный клапан, помпа зверь!!!5В питания 0,5 л меньше 20 сек! Полностью совпадает с МОЕЙ концепцией моноблока.
Это обратный клапан? Модельку можно?
И какая помпа?
Это помпа, но не мембранная а роторная, качать не начнет пока жидкости в камере не будет, а клапан из двух шприцов здесь где то на форуме, ссылку сейчас найду
А кстати. Есть ли возможность у какой-нибудь модели помпы дуть туда или обратно в зависимости от полярности подключения? Можно было бы простенько реализовать "выдув" обратно в бутылку.
Вот тип амфибия (два штуцера), шланги у этих ребят не заказывайте не силикон а говно какое то похожее на пивиси
https://ru.aliexpress.com/item/32895878894.html?spm=a2g0s.9042311.0.0.480433edDBk5hk
Лучше на "ты". И я тезка))
Если Михалыч то полный, напиши в почту, куча идей, и куча друзей СЯБРОВ. А вот в программировании не силен.
Самому интересно, завтра проэксперемментирую, устал сегодня после дантиста, таблетки слабо помогают, а "Морошка" в Дикси закочилась).
Клапан http://arduino.ru/forum/proekty/nalivator-avtomatizirovannaya-mashina-kotoraya-budet-razlivat-alkogol-po-stopkam?page=13#comment-484309
По твоей наводке я тогда и сделал клапан. Правда из дозатора мыла. Отлично работает.
Но мучает идея сделать принудительную "откачку"ижидкости из системы.
И не в рюмку, а обратно - в бутылку.
Если Михалыч то полный, напиши в почту, куча идей, и куча друзей СЯБРОВ. А вот в программировании не силен.
На дворе 2019 год (
Коллеги приветствую!
Вопрос к знатокам. Серва, если находится вверх исполнительным механизмом, имеет вращение против часовой стрелки 0...180 (налив слева направо) - считаем стандартно. Если серву перевернуть то вращение сервы будет по часовой 180...0 (налив справа налево). А теперь вопрос что нужно поменять в скетче чтобы налив остался стандартным при перевернутой серве?
И напоследок кто может добавить в скетч с ОЛЕД отображение заряда батареи? Библиотека с символами (дополнение к OLED_I2C) и мануал к ней На Я диске в папке доки.