Hejsa, er der nogle af jer rødder der kan hjælpe mig med et M2tklib projekt.
Der er noget jeg ikke helt kan forstå eller sagt på jysk,få til at virke.
Hele koden til programmet er her.
/*
CanonTimeTake.pde
Arduino Nano Canon time take.
Version 2
Build 1
Unit to control Canon 1200D picture take.
Uses:
Arduino Nano V3.
OLED from aliexpress with SPI interface, Software SPI
Rotery encoder with key.
Universal 8bit Graphics Library, https://github.com/olikraus/u8glib/
Mini Interative Interface Toolkit Library, https://code.google.com/p/m2tklib/
Key Rotater
Pin 1 - D2
Pin 2 - D3
Select D12
Cam
Focus D10
Trigger D11
Display
SCL D4
SDA D5
RST D7
O/C D6
*/
#include "U8glib.h"
#include "M2tk.h"
#include "utility/m2ghu8g.h"
// setup u8g object, please remove comment from one of the following constructor calls
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
U8GLIB_SSD1306_128X64 u8g(4, 5, 8, 6, 7);
// SW SPI Com: SCK = 3, MOSI = 4, CS = 7, D/C = 5, RST = 6
// Nano OLED
// D4 SCL
// D5 SDA
// D8 brues ikke
// D6 D/C
// D7 RST
int ledFocus = 11;
int ledTrigger = 10;
uint32_t n_total_pic = 0;
uint8_t n_time_delay = 10;
uint8_t select_time_unit = 0;
void takePic() {
digitalWrite(ledFocus, HIGH);
delay(1000);
digitalWrite(ledFocus, LOW);
delay(100);
digitalWrite(ledTrigger, HIGH);
delay(1000);
digitalWrite(ledTrigger, LOW);
n_total_pic++;
}
const char *fn_idx_to_time_unit(uint8_t idx)
{
if( idx == 0) return "Minutter";
else return "Timer";
}
uint8_t n_time_delay_show = n_time_delay;
void fn_start(m2_el_fnarg_p fnarg) {
//
// Here i like to have a loop to i puss the select button to end it.
//
Serial.println("Start");
Serial.print("Delay = ");
Serial.print(n_time_delay);
Serial.print(" - TimeUnit = ");
if (select_time_unit == 0) {
Serial.println("Minutter");
};
if (select_time_unit == 1) {
Serial.println("Timer");
};
for(uint8_t a = n_time_delay; a > 0; a--){
//
// Here i like to have a emty screen there shows a countdown to the picture is taken and how many pictures there is taken to now.
// And a button to press to stop the loop. And then go back to the mainmenu.
//
n_time_delay_show = a;
delay((1000*n_time_delay)*((select_time_unit*60)+1));
Serial.print("a = ");
Serial.println(a);
takePic();
}
//
// Loop end
//
Serial.println("Slut");
}
void fn_take(m2_el_fnarg_p fnarg) {
takePic();
}
//=================================================
// Forward declaration of the toplevel element
M2_EXTERN_ALIGN(top_menu);
//=================================================
M2_LABEL(el_l1, "f1", "Canon Timer");
M2_LABEL(el_u1, NULL, " V2.1!");
M2_LABEL(el_l2, "f1", " Tid :");
M2_U8NUM(el_u2, "c2", 0, 60, &n_time_delay);
M2_LABEL(el_l3, "f1", " Enhed :");
M2_COMBO(el_u3, NULL, &select_time_unit, 2, fn_idx_to_time_unit);
M2_BUTTON(el_fn_start, "f1x0y50", "[Start]", fn_start);
M2_BUTTON(el_fn_take, "f1b1x30y50", "[Take]", fn_take);
M2_LABEL(el_l5, "f1", "Count :");
M2_U32NUM(el_u5, "c4r1", &n_total_pic);
M2_LIST(list) = { &el_l1, &el_u1, &el_l2, &el_u2, &el_l3, &el_u3, &el_fn_start, &el_fn_take, &el_l5, &el_u5 };
M2_GRIDLIST(el_gridlist, "c2", list);
M2_ALIGN(top_menu, "-1|1W64H64", &el_gridlist);
// m2 object and constructor
// Note: Use the "m2_eh_4bd" handler, which fits better to the "m2_es_arduino_rotary_encoder"
M2tk m2(&top_menu, m2_es_arduino_rotary_encoder, m2_eh_4bd, m2_gh_u8g_bf);
//=================================================
// Arduino Setup & Loop
void setup(void) {
pinMode(ledFocus, OUTPUT);
pinMode(ledTrigger, OUTPUT);
digitalWrite(ledFocus, LOW);
digitalWrite(ledTrigger, LOW);
// Connect u8glib with m2tklib
m2_SetU8g(u8g.getU8g(), m2_u8g_box_icon);
// Assign u8g font to index 0
m2.setFont(0, u8g_font_6x12r);
m2.setFont(1, u8g_font_7x13r);
// define button for the select message
m2.setPin(M2_KEY_SELECT, 12);
// The incremental rotary encoder is conected to these two pins
m2.setPin(M2_KEY_ROT_ENC_A, 3);
m2.setPin(M2_KEY_ROT_ENC_B, 2);
Serial.begin(9600);
}
void loop() {
// check rotary encoder also inside the picture loop
m2.checkKey();
// process events and redraw menu if required
if ( m2.handleKey() != 0 ) {
u8g.firstPage();
do {
// check rotary encoder also inside the picture loop
m2.checkKey();
// draw menu
m2.draw();
} while( u8g.nextPage() );
}
}
Jeg vil gerne at programmet skifter "skærm" når jeg trykker på start og begynder at tælle ned til det næste billede skal taget, også vil jeg gerne have at den på samme skærm viser hvor mange billeder der er blevet taget. Desuden skal der være en button der får mig tilbage til hoved menuen.
Jeg ved godt at løkken der skal køre "uendeligt" ikke er lavet endnu (det er den button skal afbryde.
Håber der er nogle der kan hjælpe.