мое нано животное

Тема в разделе "Глядите, что я сделал", создана пользователем Redn, 5 апр 2014.

  1. Redn

    Redn Гик

    а тип переменной int на это влияет ?
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Весь код покажите. Только сначала в Arduino IDE нажмите Ctrl+T, а при вставке на форум используйте тэг CODE - это 19-я по счету кнопка в редакторе сообщений.
     
  3. Redn

    Redn Гик

    вроде понел в чем проблема но пока не проверял у меня дела (ДЗ) я вить в 5 классе.p.s взрослым везет пришол с работы и валяйся на диване .
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Я тоже так думал, пока в школе учился ) Оказалось, что не все так радужно.
     
  5. Redn

    Redn Гик

    проблему решил
     
  6. Redn

    Redn Гик

    как шитайте стоит ли делать ему чтобы он имел свои вкусы и интересы ?
     
  7. Redn

    Redn Гик

    новая проблема голод перестал быть стабилен вот код :
    Код (Text):
    #include <Ultrasonic.h>
    #include <EEPROM.h>
    int a,d,s,l,p,m,c,svet1,lop,o = 0;
    int w = 1000;
    int tok,lok = 0;
    int f,g,j,k,h = 0;
    int straxser = 0;
    int nastroenieser = 0;
    int golod = 0;
    int lol1 = 2;
    int lol2 = 3;
    int yol = 0;
    int lop1 = 25;
    int lop2 = 0;
    int lop3 = 0;
    Ultrasonic rcs(12,13);
    boolean nm,nm1,nm2 = 0;
    boolean olk = false;
    int look = 0;
    int ingredienti_golod[99];
    // [0] бараний бульен
    // [1] рыба
    // [2] овоши
    // [3] потроха
    // [4] баранина
    // [5] бычый хвост и голяшек
    // [6] соевая паста
    // [7] говядина
    // [8] рис
    // [9] грецкий орех
    // [10] бараньи ноги
    // [11] лапша
    // [12] креветки
    // [13] курица
    // [14] картошка
    // [15] лук
    // [16] марковь
    // [17] соль
    // [18]  лаврушка
    // [19] укроп
    // [20] вода :-)
    int soups[99];
    // [0] Бобчербе — одна из разновидностей среднеазиатских супов, доведенный до легкого брожения суп на бараньем бульоне.
    // [1] Буйабес — французский рыбный суп. Подобные же по технологии супы существуют и в Италии, Ирландии, Хорватии
    // [2] Демикат — словацкий овощной суп
    // [3] Ис миинэ — якутский суп из потрохов. Надо отметить, что в приполярную кухню супы вошли совсем недавно.
    // [4] Кололик — армянский суп из баранины
    // [5] Консоме — французский суп из бычьих хвостов и голяшек)
    // [6] Киду — африканский суп из рыбы киду
    // [7] Кулеш — украинский суп из сала и крупы
    // [8] Мисо — японский суп из соевой пасты
    // [9] Окстейл суп — английский суп из бычьих хвостов
    // [10] Борщ — сложный овощной суп
    // [11] Шурпа — густой суп у тюркских народов
    // [12] Харчо — грузинский суп из говядины с рисом и грецкими орехами
    // [13] Хаш — азиатский суп из говяжих и/или бараньих ног
    // [14] Хого — китайский суп из овощей и/или мяса
    // [15] Чили кон карне — мексиканский суп
    // [16] Фо — вьетнамский суп из говядины с лапшой
    // [17] Том Ям/Кунг — тайский кисло-острый суп с креветками, курицей, рыбой или другими морепродуктами.
    // [18] куриный суп
    int dessert[99];
    int second[99];
    int ingredienti_soup[99];
    int ingredienti_vkys[99];
    void opredelenie_ingredelent()
    {
      ingredienti_golod[11] = 200;
      ingredienti_golod[13] = 5000;
      ingredienti_golod[14] = 100;
      ingredienti_golod[15] = 30;
      ingredienti_golod[16] = 100;
      ingredienti_golod[18] = 1;
      ingredienti_golod[19] = 1;
    }
    void opredelenie_supov()
    {
      if(golod < 3000)
      {
        soups[18] = ingredienti_golod[13] / 100 * 30;
        + ingredienti_golod[14] / 100 * 20 + ingredienti_golod[18] + ingredienti_golod[19] + ingredienti_golod[15] + ingredienti_golod[16] + ingredienti_golod[11] + ingredienti_golod[20];

      }
    }
    void nastroenie()
    {



      if(o == 2)
      {

        nastroenieser = nastroenieser + 1000;
        digitalWrite(11,HIGH);
        delay(100);
        digitalWrite(11,LOW);
        o = 0;
      }
      if(o == 3)
      {

        nastroenieser = nastroenieser - 100;
        digitalWrite(10,HIGH);
        delay(100);
        digitalWrite(10,LOW);
        o = 0;
      }
      if(o == 4 && golod < 3000)
      {
        golod = golod + soups[18];
      }

      if(o == 5)
      {
        nastroenieser = 0;
        straxser = 0;
        golod = 0;
      }
    }
    void svet ()
    {

      svet1 = analogRead(A6);


    }
    void opt ()
    {
      lok = millis();
      if(lok > tok)
      {
        if(golod > 0)
        {
          golod = golod - 10;
        }
        if(svet1 > 600)
        {

          svet1 = svet1  / 25;
          straxser = straxser + svet1;
          lop2 = svet1 / 10;
          nastroenieser = nastroenieser - lop2;

        }
        tok = tok + 1000;

        if(straxser > 0)

        {
          straxser = straxser - 100;

        }
      }


    }



    void scan()
    {

      l = rcs.Ranging(CM);
      delay(1);
      f = rcs.Ranging(CM);

      s = f - l;
      g = s / 1;
      h = g * 100;


      if( h < 5000)
        h = 0;

      if(h > 4000)
      {
        c =  h / 25;
        straxser = straxser + c;
        lop3 = c / 10;
        nastroenieser = nastroenieser - lop3;

        digitalWrite(10,HIGH);
        delay(100);
        digitalWrite(10,LOW);
        delay(25);
      }
    }
    void strax ()
    {


    }
    void vivod ()
    {
      Serial.available();


      o = Serial.read () - '0';

      if(o == 1)
      {

        Serial.println("mur,mur,mur =)");
        Serial.print("Strax = ");
        Serial.println(straxser);
        Serial.print("nastroenie = ");
        Serial.println(nastroenieser);
        Serial.print("golod = ");
        Serial.println(golod);

        o = 0;

      }
    }
    void ommorok()
    {

      if(straxser > 10000)
      {


        digitalWrite(10,HIGH);
        delay(10000);
        digitalWrite(10,LOW);
        straxser = 0;

      }

    }
    void avtonom()
    {
      nm = digitalRead(49);
      nm1 = digitalRead(50);
      nm2 = digitalRead(30);


      if(nm == 1){
        nastroenieser = nastroenieser + 1000;
        digitalWrite(11,HIGH);
        delay(100);
        digitalWrite(11,LOW);
        o = 0;
        delay(1000);
      }
      if(nm1 == 1){
        nastroenieser = nastroenieser - 100;
        digitalWrite(10,HIGH);
        delay(100);
        digitalWrite(10,LOW);
        o = 0;
        delay(1000);
      }
      if(nm2 == 1)
      {
        golod = golod + soups[18];
        nm = 0;
        delay(1000);

      }


    }
    void setup()
    {

      Serial.begin(9600);
      pinMode(11,OUTPUT);
      pinMode(10,OUTPUT);
      pinMode(49,INPUT);
      pinMode(30,INPUT);

      pinMode(50,INPUT);



    }
    void EEPROMWriteInt(int p_address, int p_value)
    {
      byte lowByte = ((p_value >> 0) & 0xFF);
      byte highByte = ((p_value >> 8) & 0xFF);

      EEPROM.write(p_address, lowByte);
      EEPROM.write(p_address + 1, highByte);
    }

    //This function will read a 2 byte integer from the eeprom at the specified address and address + 1
    unsigned int EEPROMReadInt(int p_address)
    {
      byte lowByte = EEPROM.read(p_address);
      byte highByte = EEPROM.read(p_address + 1);

      return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
    }
    void pam()
    {
      golod = golod / 20;
      nastroenieser = nastroenieser  / 20;
      straxser = straxser / 20;
      EEPROMWriteInt(0,golod);
      EEPROMWriteInt(1,nastroenieser);
      EEPROMWriteInt(2,straxser);
    }
    void lot()
    {
      golod = EEPROMReadInt(0);
      nastroenieser = EEPROMReadInt(1);
      straxser = EEPROMReadInt(2);

      golod = golod * 20;
      nastroenieser = nastroenieser  * 20;
      straxser = straxser * 20;
    }
    void loop()
    {
      lot();
      nastroenie();
      vivod();
      scan();
      svet();
      ommorok();
      avtonom();
      opredelenie_ingredelent();
      opredelenie_supov();
      opt();
      pam();


    }
     
     
  8. Redn

    Redn Гик

    отказ функции opt :
    Код (Text):
    void opt ()
    {
      lok = millis();
      if(lok == tok)
      {
       
        if(golod > 0)
        {
         
          golod = golod - 10;
         
        }
        if(straxser > 0)
        {
         
          straxser = straxser - 100;
         
        }
        tok = tok + 1000;
      }
      lok = millis();
    }
     
  9. Redn

    Redn Гик

    побагоно
     
  10. Megakoteyka

    Megakoteyka Оракул Модератор

    Код (Text):
    lok = millis();
      if(lok == tok) ...
    Нужно >=, а не ==, иначе можно проскочить.

    Переменная golod может быть меньше нуля?
    Если нет, то вместо
    Код (Text):
    if(golod > 0)
        {
          golod = golod - 10;
        }
    следует написать
    Код (Text):
    if(golod >= 10)
        golod -= 10;
    В самом конце строчка lok = millis(); не делает ничего полезного, т.к. переменная lok далее больше нигде не используется.
     
  11. Redn

    Redn Гик

    уже побагал прикол оказался в том что не работает сохранение в памить EEPROM
     
  12. Redn

    Redn Гик

    Код (Text):
    void EEPROMWriteInt(int p_address, int p_value)
    {
      byte lowByte = ((p_value >> 0) & 0xFF);
      byte highByte = ((p_value >> 8) & 0xFF);

      EEPROM.write(p_address, lowByte);
      EEPROM.write(p_address + 1, highByte);
    }

    //This function will read a 2 byte integer from the eeprom at the specified address and address + 1
    unsigned int EEPROMReadInt(int p_address)
    {
      byte lowByte = EEPROM.read(p_address);
      byte highByte = EEPROM.read(p_address + 1);

      return ((lowByte << 0) & 0xFF) + ((highByte << 8) & 0xFF00);
    }
     
  13. Redn

    Redn Гик

    это на другом форуме нашел . шяс кину мои функции
     
  14. Redn

    Redn Гик

    Код (Text):
    void pam()
    {
      golod = golod / 10;
      straxser = straxser / 10;
      nastroenieser = nastroenieser / 10;
      EEPROMWriteInt(0,golod);
      EEPROMWriteInt(1,nastroenieser);
      EEPROMWriteInt(2,straxser);
    }
    void lot()
    {
      golod = EEPROMReadInt(0);
      nastroenieser = EEPROMReadInt(1);
      straxser = EEPROMReadInt(2);
      golod = golod * 10;
      straxser = straxser * 10;
      nastroenieser = nastroenieser * 10;

    }
     
  15. Redn

    Redn Гик

    проблема втом что он записывает значение а потом когда его спрашиваеш он выдает как будто мусорные значения низнаю это проблема в функции чтения или записи .
     
  16. Megakoteyka

    Megakoteyka Оракул Модератор

    В Arduino IDE есть пример для работы с EEPROM, прогоните его, чтобы выяснить истинную причину неработоспособности. И когда пытаетесь что-то новое для себя добавить в программу, не поленитесь сперва сделать маленький скетч для проверки и отработки. Так и поймете все лучше, и какие-то особенности сможете узнать, "играя" с кодом.
     
  17. Redn

    Redn Гик

    уже есть продвижение при первом запуске все сохраняет все норм но вместо того чтобы у голода отнимать 10 отнимает 100 через некоторое время перестает работать millis() а так без сохранений работает
     
  18. Redn

    Redn Гик

    так вроде баг с millis но с голодом все осталось
     
  19. Redn

    Redn Гик

    нет перехожу на microSD
     
  20. Redn

    Redn Гик

    теперь стал работать с sd но проблеиа таже вот код
    Код (Text):
    void save ()
    {
      golod = golod / 100;
      nastroenieser = nastroenieser / 100;
      straxser = straxser / 100;
      File save1 = SD.open("save1.txt", FILE_WRITE);
      save1.println(golod);
        save1.close();
          File save2 = SD.open("save2.txt", FILE_WRITE);
        save2.println(nastroenieser);
        save2.close();
        File save3 = SD.open("save3.txt", FILE_WRITE);
        save3.println(straxser);
        save3.close();
    }
    void load ()
    {
      File save1 = SD.open("save1.txt", FILE_READ);
        golod = save1.read();
        save1.close();
          File save2 = SD.open("save2.txt", FILE_READ);
        nastroenieser = save2.read();
        save2.close();
          File save3 = SD.open("save3.txt", FILE_READ);
        straxser = save3.read();
        save3.close();
        golod = golod * 100;
      nastroenieser = nastroenieser * 100;
      straxser = straxser * 100;
    }



    всепоказания изменяются