Вопрос о переменных

Вопросы от новичков
av
Подполковник
Сообщения: 1417
Зарегистрирован: 25.09.2017{, 13:25}
Репутация: 126
Имя: Алексей

Вопрос о переменных

#21

Сообщение av » 31.08.2018{, 00:31}

Не нашел нужного раздела спрошу здесь.

Что за тип переменной unsigned char ? В программе FLProg что то не встречал.

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Вопрос о переменных

#22

Сообщение kalobyte » 31.08.2018{, 00:40}

беззанковый байт 0-255
аналог byte или char в коде

av
Подполковник
Сообщения: 1417
Зарегистрирован: 25.09.2017{, 13:25}
Репутация: 126
Имя: Алексей

Вопрос о переменных

#23

Сообщение av » 31.08.2018{, 01:02}

О понял ! А то в библиотеке для мелкосхемы аудио процессора используется этот тип данных для управления.

Отправлено спустя 16 минут 24 секунды:
И еще вопрос в догонку. Может ли тип unsigned char принимать значения с знаком минус ?

Аватара пользователя
fsergei70
Лейтенант
Сообщения: 691
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 49
Откуда: Ессентуки-Кисловодск
Имя: Сергей

Вопрос о переменных

#24

Сообщение fsergei70 » 31.08.2018{, 06:06}

av писал(а):
31.08.2018{, 01:19}
unsigned char
Нет только положительные от 0 до 255

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Вопрос о переменных

#25

Сообщение kalobyte » 31.08.2018{, 10:28}

av писал(а):
31.08.2018{, 01:19}
Может ли тип unsigned char принимать значения с знаком минус ?
unsigned переводится как беззнаковый, т.е. не имеет знака минус
signed знаковый, если не указано, то подразумевается автоматом со знаком, но в некоторых компиляторах есть опция, что принимать по дефолту как беззнаковый, а знаковый надо указывать специально
обычно стараются работать без отрицательных чисел, поэтому используют в компиляторах эту опцию

вот тут образцы типов со значениями
https://www.tutorialspoint.com/arduino/ ... _types.htm

av
Подполковник
Сообщения: 1417
Зарегистрирован: 25.09.2017{, 13:25}
Репутация: 126
Имя: Алексей

Вопрос о переменных

#26

Сообщение av » 31.08.2018{, 13:00}

fsergei70 писал(а):
31.08.2018{, 06:06}
Нет только положительные от 0 до 255
Странно но в библиотеке как раз эта переменная идет с отрицательными значениями

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Вопрос о переменных

#27

Сообщение kalobyte » 31.08.2018{, 13:40}

av, покажи кусок кода

av
Подполковник
Сообщения: 1417
Зарегистрирован: 25.09.2017{, 13:25}
Репутация: 126
Имя: Алексей

Вопрос о переменных

#28

Сообщение av » 31.08.2018{, 16:06}

kalobyte,

Код: Выделить всё

#include <Wire.h>
#include <PT2322.h>
#include <LiquidCrystal.h>

#define FUNCTIONPIN 6
#define UPPIN 7
#define DOWNPIN 8
#define MUTEPIN 9

#define DISPLAYMODE 0
#define EDITINGMODE 1

PT2322 audio;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// enumerate PT2322 functions
enum function {FMasterVolume, FFrontLeftVolume, FFrontRightVolume, 
               FCenterVolume, FRearLeftVolume, FRearRightVolume, FSubVolume, 
               FBass, FMiddle, FTreble, F3D, FToneDefeat, FEnd};  

// default values as initialized by PT3222 library - order as per above enum
int functionValues [] = { -15, 0, 0, 0, 0, 0, 0, 7, 7, 7, false, false, 0};
//masterVolume = 15,
//frontLeftVolume = 0,
//frontRightVolume = 0,
//centerVolume = 0,
//rearLeftVolume = 0,
//rearRightVolume = 0,
//subVolume = 0,
//bass = 7,
//middle = 7,
//treble = 7,
//_3DState = false,
//toneDefeatState = false

int minValues [] = { -79, -15, -15, -15, -15, -15, -15, -14, -14, -14, false, false, 0};
int maxValues [] = { 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, true, true, 0};

// startup state               
int currentFunction = FMasterVolume;
int mute = false;
int mode = DISPLAYMODE;

void setup()
{
  // pins for buttons used to control user interface displayed on LCD
  pinMode(FUNCTIONPIN, INPUT);
  pinMode(UPPIN, INPUT);
  pinMode(DOWNPIN, INPUT);
  pinMode(MUTEPIN, INPUT);
  
  // initialize PT2322
  Wire.begin(); // join i2c bus
  int rtnCode = audio.init();
  
  // startup the LCD
  lcd.begin(16, 2);
//  lcd.print("Return code = ");
//  lcd.print(rtnCode);
  displayFunction();
}

void loop()
{
  // read function button
  int functionButton = deBounceRead(FUNCTIONPIN);
  if (functionButton == HIGH){
    currentFunction++;
    if (currentFunction == FEnd)
      currentFunction = FMasterVolume;
    displayFunction();
    mode = EDITINGMODE;
  }
  // read up button
  int upButton = deBounceRead(UPPIN);
  if (upButton == HIGH && mode == EDITINGMODE){
    if (currentFunction > FTreble)
      functionValues[currentFunction] = !functionValues[currentFunction];
    else{
      if (functionValues[currentFunction] < maxValues[currentFunction])
        functionValues[currentFunction] += 1;
    }
    displayFunction();
  }
   // read down button
  int downButton = deBounceRead(DOWNPIN);
  if (downButton == HIGH && mode == EDITINGMODE){
    if (currentFunction > FTreble)
      functionValues[currentFunction]  = !functionValues[currentFunction];
    else{
       if (functionValues[currentFunction] > minValues[currentFunction])
         functionValues[currentFunction] -= 1;
    }
    displayFunction();
  }
  // read mute button
  int muteButton = deBounceRead(MUTEPIN);
  if (muteButton == HIGH){
    mute = !mute;
    mode = DISPLAYMODE; // reset to display mode so up/down buttons disabled
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Mute");
    lcd.setCursor(0,1);
    if (mute == true){
      lcd.print("On");
      audio.muteOn();
    }
    else{
      audio.muteOff();
      lcd.print("Off");
      delay(500);
      currentFunction = FMasterVolume;
      displayFunction();
    }
  }
  delay(200);
 }
    
int deBounceRead(int buttonPin){
  int lastButtonState = digitalRead(buttonPin); 
  while (1){
    delay(10);
    int reading = digitalRead(buttonPin);
    if (reading == lastButtonState)
      return reading;
    else
      lastButtonState = reading;
   }
}

void displayFunction(){
  lcd.clear();
  lcd.setCursor(0,0);
  switch (currentFunction){
   default:
   case FMasterVolume:
     lcd.print("Master Volume");
     audio.masterVolume(functionValues[FMasterVolume]);
     break;
   case FFrontLeftVolume:
     lcd.print("Front Left Vol.");
     audio.leftVolume(functionValues[FFrontLeftVolume]);
     break;
   case FFrontRightVolume:
     lcd.print("Front Right Vol.");
     audio.rightVolume(functionValues[FFrontRightVolume]);
     break;
   case FCenterVolume:
     lcd.print("Center Volume");
     audio.centerVolume(functionValues[FCenterVolume]);
     break;
   case FRearLeftVolume:
     lcd.print("Rear Left Vol.");
     audio.rearLeftVolume(functionValues[FRearLeftVolume]);
     break;
   case FRearRightVolume:
     lcd.print("Rear Right Vol.");
      audio.rearRightVolume(functionValues[FRearRightVolume]);
    break;
   case FSubVolume:
     lcd.print("Subwoofer Vol.");
      audio.subwooferVolume(functionValues[FSubVolume]);
     break;
   case FBass:
     lcd.print("Bass");
     audio.bass(functionValues[FBass]);
     break;
   case FMiddle:
     lcd.print("Middle");
     audio.middle(functionValues[FMiddle]);
     break;
   case FTreble:
     lcd.print("Treble");
     audio.treble(functionValues[FTreble]);
     break;
   case F3D:
     lcd.print("3D");
     lcd.setCursor(0,1);
     if (functionValues[F3D] == true){
       lcd.print("On");
       audio._3DOn();
     }
     else{
       lcd.print("Off");
       audio._3DOff();
     }
     return;
   case FToneDefeat:
     lcd.print("Tone Defeat");
     lcd.setCursor(0,1);
     if (functionValues[FToneDefeat] == true){
       lcd.print("On");
       audio.toneOn();
     }
     else{
       lcd.print("Off");
       audio.toneOff();
     }
     return;
  } 
  lcd.setCursor(0,1);
  lcd.print(functionValues[currentFunction]);
  
 }

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Вопрос о переменных

#29

Сообщение kalobyte » 31.08.2018{, 16:52}

если ты имел в виду
int minValues [] = { -79, -15, -15, -15, -15, -15, -15, -14, -14, -14, false, false, 0};
int maxValues [] = { 0, 0, 0, 0, 0, 0, 0, 14, 14, 14, true, true, 0};

то тут инт не имеет модификатора unsigned, поэтому по умолчанию он знаковый

av
Подполковник
Сообщения: 1417
Зарегистрирован: 25.09.2017{, 13:25}
Репутация: 126
Имя: Алексей

Вопрос о переменных

#30

Сообщение av » 31.08.2018{, 17:17}

kalobyte,
Хорошо с этим разобрались.
Но проблема осталась. В FLProg нет переменных с типом unsigned char. Как же тогда на вход управления мелкосхемы подавать с блока меню управляющие значения.

Отправлено спустя 53 секунды:
Ответ то есть но не про мою честь :D
Нужно переписывать библу.

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Вопрос о переменных

#31

Сообщение kalobyte » 31.08.2018{, 17:22}

av, а что флпрог не может соединить эти разные типы?
я соединял инт с байтом и становилось интом

av
Подполковник
Сообщения: 1417
Зарегистрирован: 25.09.2017{, 13:25}
Репутация: 126
Имя: Алексей

Вопрос о переменных

#32

Сообщение av » 31.08.2018{, 17:33}

Тогда в блоке меню какую переменную выбрать чтобы управлять входом с типом unsigned char ?

Аватара пользователя
Sancho
Полковник
Сообщения: 3991
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 567
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Вопрос о переменных

#33

Сообщение Sancho » 31.08.2018{, 17:37}

av писал(а):
31.08.2018{, 17:18}
Но проблема осталась. В FLProg нет переменных с типом unsigned char. Как же тогда на вход управления мелкосхемы подавать с блока меню управляющие значения.
Не могу вкурить - где проблема?
Когда Вы будете писать блок, с его функциями, библиотеке будет фиолетово - передаёте, к примеру, один байт - это одна ячейка памяти - а библиотека прочитает эти ячейки как ей нужно!
Допустим, вы присвоили типу байт 255, т.е. в ячейке памяти все единицы. Если Вы отправите его имя( на самом деле это ка-бы указатель, где этот байт лежит в памяти) другой переменной или функции, но она как-бы работает со знаковыми значениями, но восьмибитными, + и -, то она считает эти восемь единиц и интерпретирует их как -1( почему - отдельная тема о дополнительном коде).
Как-то так...
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

av
Подполковник
Сообщения: 1417
Зарегистрирован: 25.09.2017{, 13:25}
Репутация: 126
Имя: Алексей

Вопрос о переменных

#34

Сообщение av » 31.08.2018{, 17:40}

Хотел запилить пользовательский блок из примера для мелкосхемы PT2322. Но там черт ногу сломает. Совсем запутался с этой unsigned char. Весь инет облазил нет кроме этой библиотеки больше нигде (единственная и не повторимая блин :shok: )

Аватара пользователя
Sancho
Полковник
Сообщения: 3991
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 567
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Вопрос о переменных

#35

Сообщение Sancho » 31.08.2018{, 17:47}

В приведённом выше коде нет такого типа. Или я не туда смотрю?

Отправлено спустя 1 минуту 32 секунды:
Ха, так она на I2C - какие проблемы, и даташит на русском есть!
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

av
Подполковник
Сообщения: 1417
Зарегистрирован: 25.09.2017{, 13:25}
Репутация: 126
Имя: Алексей

Вопрос о переменных

#36

Сообщение av » 31.08.2018{, 17:50}

Sancho,
Да в самой проге нет но вот в библиотеке есть. Код:

Код: Выделить всё

/* Arduino PT2322 Library
 * Copyright (C) 2009 by oddWires
 *
 * This file is part of the Arduino PT2322 Library
 *
 * This Library is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This Library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * <http://www.gnu.org/licenses/>.
 */ 

#define  FL_VOLUME_CONTROL      0x10 
#define  FR_VOLUME_CONTROL      0x20 
#define  CENTER_VOLUME_CONTROL  0x30 
#define  RL_VOLUME_CONTROL      0x40 
#define  RR_VOLUME_CONTROL      0x50 
#define  SUB_VOLUME_CONTROL     0x60 
#define  FUNCTION_SELECT        0x70 
#define  BASS_TONE_CONTROL      0x90 
#define  MIDDLE_TONE_CONTROL    0xa0 
#define  TREBLE_TONE_CONTROL    0xb0 
#define  INPUT_SW_ACTIVE        0xc7 
#define  MASTER_VOLUME_1STEP    0xd0 
#define  MASTER_VOLUME_10STEP   0xe0 
#define  SYSTEM_RESET           0xff 

#define  MUTE_ON                0x08
#define  _3D_OFF                0x04
#define  TONE_DEFEAT            0x02


#ifndef PT2322_h
#define PT2322_h

class PT2322 {
    
private:
    unsigned char function;           
    unsigned char toneLookup(int);
    
    unsigned char HEX2BCD (unsigned char x);
    int writeI2CChar(unsigned char c);
    
    
public:
    int init(void); 
    void muteOn(void); 
    void muteOff(void); 
    void _3DOn(void); 
    void _3DOff(void); 
    void toneOn(void); 
    void toneOff(void); 
    void leftVolume(unsigned char flv); 
    void rightVolume(unsigned char frv); 
    void centerVolume(unsigned char cv); 
    void rearLeftVolume(unsigned char rlv); 
    void rearRightVolume(unsigned char rrv); 
    void subwooferVolume(unsigned char sv); 
    void masterVolume(unsigned char mv); 
    void bass(unsigned char tb); 
    void middle(unsigned char tm); 
    void treble(unsigned char tt);
};

#endif

Аватара пользователя
Sancho
Полковник
Сообщения: 3991
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 567
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Вопрос о переменных

#37

Сообщение Sancho » 31.08.2018{, 18:01}

Забей на то, что внутри! Это она так передаёт инфу своим функциям...
Завтра, может сегодня, постараюсь объяснить суть всего этого...
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

av
Подполковник
Сообщения: 1417
Зарегистрирован: 25.09.2017{, 13:25}
Репутация: 126
Имя: Алексей

Вопрос о переменных

#38

Сообщение av » 31.08.2018{, 18:06}

Sancho, создам тему в "Разработка пользовательских блоков" подключайтесь. Попробую с помощью участников форума таки создать ПБ для PT2322

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

Вопрос о переменных

#39

Сообщение kalobyte » 31.08.2018{, 21:20}

av писал(а):
31.08.2018{, 18:06}
Попробую с помощью участников форума таки создать ПБ для PT2322
так автор же делал ролик про создание библиотек

private:
unsigned char function;
этот модификатор говорит, что нижеследущие переменные и функции недоступны программисту, они используются внутри самой библиотеки и наружу не смотрят, поэтому забей на них

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

Аватара пользователя
olma
Рядовой
Сообщения: 55
Зарегистрирован: 06.09.2018{, 10:09}
Репутация: 0
Откуда: ереван
Имя: Ашот
Контактная информация:

Вопрос о переменных

#40

Сообщение olma » 17.09.2018{, 09:32}

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

Ответить

Вернуться в «Начинающим»