Помогите создать буфер в UNO

Тема в разделе "Arduino & Shields", создана пользователем alexlight2003, 30 июл 2014.

  1. alexlight2003

    alexlight2003 Нуб

    Добрый день. Только начал учиться в написании скетчей, собрал скетч из того что нашел в интеренете это пульт светмузыки, все работает но при переключении страниц он не запоминает значение каналов. Как сделать буфер в памяти, чтобы все значения записывались и хранились в буфере а менялись только те каналы что трогаешь ручки
     
  2. lerik2703

    lerik2703 Гик

    заведите глобальную переменную!
     
  3. alexlight2003

    alexlight2003 Нуб

    Помогите в этом деле)? с меня вознаграждение
     
  4. NR55RU

    NR55RU Гик

    Вариант 1.
    Этот пульт не единственное что вы планируете сделать, а точнее вы и дальше планирует развиваться в этом направлении - программировании.
    Тогда вам нужно не просить помочь с буфером а попросить ссылку на достойную книгу по Си для начинающих, после чего купить или скачать ее и начать читать.
    Учится писать скетчи и не нужно, нужно учится писать на Си а потом и на С++. Так как нет языка ардуина, нет языка скетчей .. есть только С/С++ в данном случае, и без хотя бы достойной базы Си вам дальше будет все сложнее и сложнее.
    И так, если этот ваш вариант вот ссылка на достойную книгу совсем для начинающих. Через пару дней чтения этой книги вам не потребуется помощь в решении вопроса с которым вы создали эту тему :)

    Вариант 2.
    Вы решили разок два сделать что-либо для каких то конкретных целей и больше оно вам и не надо.
    Тогда просто выложите ваш скетч сюда и вам подскажут какие строчки вставить чтобы было то что вам нужно.
     
  5. alexlight2003

    alexlight2003 Нуб

    мне хотелось бы научиться) буду читать!
     
  6. alexlight2003

    alexlight2003 Нуб

    Мучился я долго многое понял) но с буфером беда( вот текст скетча


    #include <DMXSerial.h> // Подключаем библиотеку DMX
    #include <LiquidCrystal.h> // Подключаем библиотеку экрана LCD
    #define UPPIN 7 // Указываем пины кнопки вверх
    #define DOWNPIN 8 // Указываем пины кнопки вниз
    #define KEYSPEED 15 // Устанавливаем скорость опроса кнопок
    LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD, указывая управляющие контакты



    int dmxbase=127; // Задаем стартовый адрес
    boolean btn_up=true, // buttons state
    btn_down=true;
    unsigned long last_btn=millis(); // buttons press timestamp
    byte dmxdata[6], // Данные
    dmxlast[6], // Предыдушие данные цикла
    btn_ticks=0, // movement buttons handled actions
    deltadmx=6; // Смешение адреса DMX

    void processmovestep(){
    btn_ticks++;
    if(btn_ticks>1) deltadmx=6; // Увеличение шага
    if(btn_ticks>2) deltadmx=6;
    if(btn_ticks>3){ // Сброс шага
    deltadmx=6;
    btn_ticks=0;
    }
    lcd.setCursor(5,0);
    LeadZeroLCD(dmxbase);
    }

    void LeadZeroLCD(int data){
    if(data<100) lcd.print("0");
    if(data<10) lcd.print("0");
    lcd.print(data,DEC);
    }

    void setup(){



    // красивая "загрузка" программы при старте :)
    lcd.begin(16, 2);
    //lcd.print("AlexLight Show");
    //lcd.setCursor(0, 1);
    //lcd.print("+7(926)026-80-20");
    //delay(1000);
    //lcd.clear();
    //lcd.print("DMX Tester V 1.0");
    //lcd.setCursor(0, 1);
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(100); // ждем 0.1 секунды
    //lcd.print(".");
    //delay(1000); // ждем 1 секунду
    //lcd.clear();
    //lcd.print("Ready to Work");
    // delay(1000);
    //lcd.clear(); //очистка экрана
    byte i;
    DMXSerial.init(DMXController);
    lcd.begin(16,2);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Base: ");
    processmovestep();
    pinMode(UPPIN,INPUT_PULLUP);
    pinMode(DOWNPIN,INPUT_PULLUP);
    pinMode(A0,INPUT);
    pinMode(A1,INPUT);
    pinMode(A2,INPUT);
    pinMode(A3,INPUT);
    pinMode(A4,INPUT);
    pinMode(A5,INPUT);
    pinMode(6, OUTPUT);

    for(i=0;i<5;i++){ // сбрасываем все в 0
    dmxdata=0;
    dmxlast=0;
    }
    }

    void loop(){



    byte i;
    for(i=0;i<=5;i++) DMXSerial.write(dmxbase+i,dmxdata); // Записываем значения dmx (канал значение)


    if(btn_up && btn_down){ // Читаем кнопки из режима ожидания
    btn_up=digitalRead(UPPIN);
    btn_down=digitalRead(DOWNPIN);
    last_btn=millis();
    btn_ticks=0;
    deltadmx=6;
    if(!btn_up && !btn_down) btn_down=true;




    digitalWrite(6, HIGH); // зажигаем светодиод
    delay(7); // ждем секунду
    digitalWrite(6, LOW); // выключаем светодиод
    delay(7); // ждем секунду
    }
    if(!btn_up) btn_up=digitalRead(UPPIN); // read movement keys from moving mode
    if(!btn_down) btn_down=digitalRead(DOWNPIN);


    if(!btn_up && millis()-last_btn>=KEYSPEED){ // move DMX up
    last_btn=millis();
    dmxbase+=deltadmx;
    if(dmxbase>496) dmxbase=1;
    processmovestep();
    }
    if(!btn_down && millis()-last_btn>=KEYSPEED){ // move DMX down
    last_btn=millis();
    dmxbase-=deltadmx;
    if(dmxbase<1) dmxbase=496;
    processmovestep();
    }
    for(i=0;i<=5;i++){
    dmxlast=dmxdata;
    dmxdata=analogRead(A0+i)/4;
    delay(15);
    }
    for(i=0;i<=5;i++){
    if(abs(dmxlast-dmxdata)>=2){
    lcd.setCursor(9,0);
    lcd.print("Fader#");
    lcd.setCursor(15,0);
    lcd.print(i+1,DEC);
    lcd.setCursor(0,1);
    lcd.print("Channel ");
    LeadZeroLCD(dmxbase+i);
    lcd.print(": ");
    LeadZeroLCD(dmxdata);
    }
    }
    }
     
  7. alexlight2003

    alexlight2003 Нуб

    Как сделать так чтобы были переменные на 512 каналов, и все данные писались в переменные а читались тоже с них а не напрямую. Так же нужно чтобы данные с аналоговых входов перезаписывались в буфере только при изменении. Помогити с меня коньяк)
     
  8. alexlight2003

    alexlight2003 Нуб

  9. alexlight2003

    alexlight2003 Нуб

    За основу взял вот этот проект. только поменял подключение лсд
     
  10. alexlight2003

    alexlight2003 Нуб

    Протестил он запоминает значения при переходе страницы, Проблема в том что когда возвращаешся на нужную он сразу пересчитывает значение по резисторам в данный момент, а нужно только если меняеш значение резистора.