Составьте пожалуйста программу
- Войдите на сайт для отправки комментариев
Пт, 12/02/2016 - 00:11
Если цель движется с большой скоростью (в направлении датчика), загорается красный светодиод и шаговый двигатель поворачивается на 90 градусов .Датчик ультразвуковой
вот , бери....
/* * lcd_nav_keypad.ino - Example code using the menu system library * * This example shows using the menu system with a 16x2 LCD display and keypad * (controled over serial). * * Copyright (c) 2015 arduino-menusystem * Licensed under the MIT license (see LICENSE) */ #include <MenuSystem.h> #include <LiquidCrystal.h> //#define DEBUG #define NUM_KEYS 5 #define Key_Pin 0 // LCD key pad analog pin int adc_key_val[5] ={50,200,400,600,800}; int adc_key_in; int key=-1; int oldkey=-1; // Menu variables MenuSystem ms; Menu mm("ROOT Menu Title"); MenuItem mm_mi1("Level1- Item1 (Item)"); MenuItem mm_mi2("Level1- Item2 (Item)"); Menu mu1("Level1- Item3 (Menu)"); MenuItem mu1_mi1("Level2- Item1 (Item)"); /* The LCD circuit: * LCD RS pin to digital pin 8 * LCD Enable pin to digital pin 9 * LCD D4 pin to digital pin 4 * LCD D5 pin to digital pin 5 * LCD D6 pin to digital pin 6 * LCD D7 pin to digital pin 7 * LCD R/W pin to ground */ // initialize the library with the numbers of the interface pins LiquidCrystal lcd(26, 24, 22, 23, 25, 27, 29); // Menu callback function // In this example all menu items use the same callback. void on_item1_selected(MenuItem* p_menu_item) { lcd.setCursor(0,2); lcd.print("Item1 Selected "); delay(1500); // so we can look the result on the LCD } void on_item2_selected(MenuItem* p_menu_item) { lcd.setCursor(0,2); lcd.print("Item2 Selected "); delay(1500); // so we can look the result on the LCD } void on_item3_selected(MenuItem* p_menu_item) { lcd.setCursor(0,2); lcd.print("Item3 Selected "); delay(1500); // so we can look the result on the LCD } // Standard arduino functions void setup() { Serial.begin(9600); lcd.begin(20, 4); serialPrintHelp(); Serial.println("Setting up the menu."); // Menu setup /* Menu Structure: -Item1 -Item2 -Item3 --Item1 */ mm.add_item(&mm_mi1, &on_item1_selected); mm.add_item(&mm_mi2, &on_item2_selected); mm.add_menu(&mu1); mu1.add_item(&mu1_mi1, &on_item3_selected); ms.set_root_menu(&mm); Serial.println("Menu setted."); displayMenu(); } void loop() { // Handle serial commands serialHandler(); // Wait for two seconds so the output is viewable // delay(2000); } void displayMenu() { lcd.clear(); lcd.setCursor(0,0); // Display the menu Menu const* cp_menu = ms.get_current_menu(); //lcd.print("Current menu name: "); lcd.print(cp_menu->get_name()); lcd.setCursor(0,1); lcd.print(cp_menu->get_selected()->get_name()); } void serialHandler() { //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ adc_key_in = analogRead(Key_Pin); // Read the value of the pulsation key = get_key(adc_key_in); // We get the button pressed if (key != oldkey) // if keypress is detected { delay(50); // Expected to avoid bouncing pulsations adc_key_in = analogRead(Key_Pin); // Read the value of the pulsation key = get_key(adc_key_in); // We get the button pressed // if (key != oldkey) oldkey = key; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if (key == 1){ ms.prev(); displayMenu(); #ifdef DEBUG Serial.print("key- ");Serial.println(key); #endif } if (key == 2) { ms.next(); displayMenu(); #ifdef DEBUG Serial.print("key- ");Serial.println(key); #endif } if (key == 3){ ms.back(); displayMenu(); #ifdef DEBUG Serial.print("key- ");Serial.println(key); #endif } if (key == 4) ms.select(); displayMenu(); #ifdef DEBUG Serial.print("key- ");Serial.println(key); #endif } if (key == 0) serialPrintHelp(); #ifdef DEBUG Serial.print("key- ");Serial.println(key); #endif } //} void serialPrintHelp() { Serial.println("***************"); Serial.println("w: go to previus item (up)"); Serial.println("s: go to next item (down)"); Serial.println("a: go back (right)"); Serial.println("d: select \"selected\" item"); Serial.println("?: print this help"); Serial.println("h: print this help"); Serial.println("***************"); } // Convert the analog value read in a number of button pressed int get_key(unsigned int input) { int k; for (k = 0; k < NUM_KEYS; k++) { if (input < adc_key_val[k]) { return k; } } if (k >= NUM_KEYS) k = -1; // Error in reading. return k; } #include <PID_v1.h> #include <PID_AutoTune_v0.h> byte ATuneModeRemember=2; double input=80, output=50, setpoint=180; double kp=2,ki=0.5,kd=2; double kpmodel=1.5, taup=100, theta[50]; double outputStart=5; double aTuneStep=50, aTuneNoise=1, aTuneStartValue=100; unsigned int aTuneLookBack=20; boolean tuning = false; unsigned long modelTime, serialTime; PID myPID(&input, &output, &setpoint,kp,ki,kd, DIRECT); PID_ATune aTune(&input, &output); //set to false to connect to the real world boolean useSimulation = true; void setup() { if(useSimulation) { for(byte i=0;i<50;i++) { theta[i]=outputStart; } modelTime = 0; } //Setup the pid myPID.SetMode(AUTOMATIC); if(tuning) { tuning=false; changeAutoTune(); tuning=true; } serialTime = 0; Serial.begin(9600); } void loop() { unsigned long now = millis(); if(!useSimulation) { //pull the input in from the real world input = analogRead(0); } if(tuning) { byte val = (aTune.Runtime()); if (val!=0) { tuning = false; } if(!tuning) { //we're done, set the tuning parameters kp = aTune.GetKp(); ki = aTune.GetKi(); kd = aTune.GetKd(); myPID.SetTunings(kp,ki,kd); AutoTuneHelper(false); } } else myPID.Compute(); if(useSimulation) { theta[30]=output; if(now>=modelTime) { modelTime +=100; DoModel(); } } else { analogWrite(0,output); } //send-receive with processing if it's time if(millis()>serialTime) { SerialReceive(); SerialSend(); serialTime+=500; } } void changeAutoTune() { if(!tuning) { //Set the output to the desired starting frequency. output=aTuneStartValue; aTune.SetNoiseBand(aTuneNoise); aTune.SetOutputStep(aTuneStep); aTune.SetLookbackSec((int)aTuneLookBack); AutoTuneHelper(true); tuning = true; } else { //cancel autotune aTune.Cancel(); tuning = false; AutoTuneHelper(false); } } void AutoTuneHelper(boolean start) { if(start) ATuneModeRemember = myPID.GetMode(); else myPID.SetMode(ATuneModeRemember); } void SerialSend() { Serial.print("setpoint: ");Serial.print(setpoint); Serial.print(" "); Serial.print("input: ");Serial.print(input); Serial.print(" "); Serial.print("output: ");Serial.print(output); Serial.print(" "); if(tuning){ Serial.println("tuning mode"); } else { Serial.print("kp: ");Serial.print(myPID.GetKp());Serial.print(" "); Serial.print("ki: ");Serial.print(myPID.GetKi());Serial.print(" "); Serial.print("kd: ");Serial.print(myPID.GetKd());Serial.println(); } } void SerialReceive() { if(Serial.available()) { char b = Serial.read(); Serial.flush(); if((b=='1' && !tuning) || (b!='1' && tuning))changeAutoTune(); } } void DoModel() { //cycle the dead time for(byte i=0;i<49;i++) { theta[i] = theta[i+1]; } //compute the input input = (kpmodel / taup) *(theta[0]-outputStart) + input*(1-1/taup) + ((float)random(-10,10))/100; }все , проверено , работает...
мне надо на 120 градусов и датчик ультрафиолетовый , но из-за меню - подписался :)
мне надо на 120 градусов и датчик ультрафиолетовый , но из-за меню - подписался :)
Все это меняется в разделе "СИТАП". А вот ЛЭД- только зеленого цвета...
Где Пухлявый запропал? Отбиваться нету сил...
Еще и шар хрустальный забрал с собой...
Раздел "Ищу исполнителя" теперь здесь? И даже без денег всё делают? :)
Во времена оные в каком-то из классификаторов должностей была такая - "составитель программ".
Набей-ка мне, кольщик, перфакарту.
Как то ве замудренно
Да не обращайте внимания.
Тут ведь два варианта всего : либо показываете собственные наработки и задаёте по ним конкретные вопросы, либо плавно переходите в http://arduino.ru/forumy/ishchu-ispolnitelya
прочитал и побежал меню.h тестить.
в примерах нарыл код:
/* * serial_nav.ino - Example code using the menu system library * * This example shows the menu system being controlled over the serial port. * * Copyright (c) 2015 arduino-menusystem * Licensed under the MIT license (see LICENSE) */ #include <MenuSystem.h> // Menu variables MenuSystem ms; Menu mm("ROOT Menu Title"); MenuItem mm_mi1("Level 1 - Item 1 (Item)"); MenuItem mm_mi2("Level 1 - Item 2 (Item)"); Menu mu1("Level 1 - Item 3 (Menu)"); MenuItem mu1_mi1("Level 2 - Item 1 (Item)"); // Menu callback function // In this example all menu items use the same callback. void on_item1_selected(MenuItem* p_menu_item) { Serial.println("Item1 Selected"); } void on_item2_selected(MenuItem* p_menu_item) { Serial.println("Item2 Selected"); } void on_item3_selected(MenuItem* p_menu_item) { Serial.println("Item3 Selected"); } // Standard arduino functions void setup() { Serial.begin(9600); serialPrintHelp(); Serial.println("Setting up the menu."); // Menu setup /* Menu Structure: -Item1 -Item2 -Item3 --Item1 */ mm.add_item(&mm_mi1, &on_item1_selected); mm.add_item(&mm_mi2, &on_item2_selected); mm.add_menu(&mu1); mu1.add_item(&mu1_mi1, &on_item3_selected); ms.set_root_menu(&mm); Serial.println("Menu setted."); displayMenu(); } void loop() { // Handle serial commands serialHandler(); // Wait for two seconds so the output is viewable //delay(2000); } void displayMenu() { Serial.println(""); // Display the menu Menu const* cp_menu = ms.get_current_menu(); Serial.print("Current menu name: "); Serial.println(cp_menu->get_name()); MenuComponent const* cp_menu_sel = cp_menu->get_selected(); for (int i = 0; i < cp_menu->get_num_menu_components(); ++i) { MenuComponent const* cp_m_comp = cp_menu->get_menu_component(i); Serial.print(cp_m_comp->get_name()); if (cp_menu_sel == cp_m_comp) Serial.print("<<< "); Serial.println(""); } } void serialHandler() { char inChar; if((inChar = Serial.read())>0) { switch (inChar) { case 'w': // Previus item ms.prev(); displayMenu(); break; case 's': // Next item ms.next(); displayMenu(); break; case 'a': // Back presed ms.back(); displayMenu(); break; case 'd': // Select presed ms.select(); displayMenu(); break; case '?': case 'h': // Display help serialPrintHelp(); break; default: break; } } } void serialPrintHelp() { Serial.println("***************"); Serial.println("w: go to previus item (up)"); Serial.println("s: go to next item (down)"); Serial.println("a: go back (right)"); Serial.println("d: select \"selected\" item"); Serial.println("?: print this help"); Serial.println("h: print this help"); Serial.println("***************"); }я так понимаю, что в функциях
должен выполнятся свой код при выборе оного пункта меню. но в данном примере не выводит на сериал из этих функций ничего.
как увеличить меню разобрался, а как сделать, чтоб при выборе определенного пункта функция выполнялась?